Merge "Break cyclic binder dependency"
diff --git a/media/libaudiohal/impl/DeviceHalAidl.cpp b/media/libaudiohal/impl/DeviceHalAidl.cpp
index 22bdc23..e55ad14 100644
--- a/media/libaudiohal/impl/DeviceHalAidl.cpp
+++ b/media/libaudiohal/impl/DeviceHalAidl.cpp
@@ -32,6 +32,7 @@
#include <utils/Log.h>
#include "DeviceHalAidl.h"
+#include "EffectHalAidl.h"
#include "StreamHalAidl.h"
using aidl::android::aidl_utils::statusTFromBinderStatus;
@@ -882,25 +883,64 @@
return OK;
}
-status_t DeviceHalAidl::addDeviceEffect(const struct audio_port_config *device __unused,
- sp<EffectHalInterface> effect) {
+status_t DeviceHalAidl::addDeviceEffect(
+ const struct audio_port_config *device, sp<EffectHalInterface> effect) {
+ TIME_CHECK();
+ if (!mModule) return NO_INIT;
if (!effect) {
return BAD_VALUE;
}
- TIME_CHECK();
- if (!mModule) return NO_INIT;
- ALOGE("%s not implemented yet", __func__);
+ bool isInput = VALUE_OR_RETURN_STATUS(::aidl::android::portDirection(
+ device->role, device->type)) == ::aidl::android::AudioPortDirection::INPUT;
+ auto requestedPortConfig = VALUE_OR_RETURN_STATUS(
+ ::aidl::android::legacy2aidl_audio_port_config_AudioPortConfig(
+ *device, isInput, 0));
+ if (requestedPortConfig.ext.getTag() != AudioPortExt::Tag::device) {
+ ALOGE("%s: provided port config is not a device port config: %s",
+ __func__, requestedPortConfig.toString().c_str());
+ return BAD_VALUE;
+ }
+ AudioPortConfig devicePortConfig;
+ bool created;
+ RETURN_STATUS_IF_ERROR(findOrCreatePortConfig(
+ requestedPortConfig, {} /*destinationPortIds*/, &devicePortConfig, &created));
+ Cleanups cleanups;
+ if (created) {
+ cleanups.emplace_front(this, &DeviceHalAidl::resetPortConfig, devicePortConfig.id);
+ }
+ auto aidlEffect = sp<effect::EffectHalAidl>::cast(effect);
+ RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(mModule->addDeviceEffect(
+ devicePortConfig.id, aidlEffect->getIEffect())));
+ cleanups.disarmAll();
return OK;
}
-status_t DeviceHalAidl::removeDeviceEffect(const struct audio_port_config *device __unused,
- sp<EffectHalInterface> effect) {
+status_t DeviceHalAidl::removeDeviceEffect(
+ const struct audio_port_config *device, sp<EffectHalInterface> effect) {
+ TIME_CHECK();
+ if (!mModule) return NO_INIT;
if (!effect) {
return BAD_VALUE;
}
- TIME_CHECK();
- if (!mModule) return NO_INIT;
- ALOGE("%s not implemented yet", __func__);
- return OK;
+ bool isInput = VALUE_OR_RETURN_STATUS(::aidl::android::portDirection(
+ device->role, device->type)) == ::aidl::android::AudioPortDirection::INPUT;
+ auto requestedPortConfig = VALUE_OR_RETURN_STATUS(
+ ::aidl::android::legacy2aidl_audio_port_config_AudioPortConfig(
+ *device, isInput, 0));
+ if (requestedPortConfig.ext.getTag() != AudioPortExt::Tag::device) {
+ ALOGE("%s: provided port config is not a device port config: %s",
+ __func__, requestedPortConfig.toString().c_str());
+ return BAD_VALUE;
+ }
+ auto existingPortConfigIt = findPortConfig(
+ requestedPortConfig.ext.get<AudioPortExt::Tag::device>().device);
+ if (existingPortConfigIt == mPortConfigs.end()) {
+ ALOGE("%s: could not find a configured device port for the config %s",
+ __func__, requestedPortConfig.toString().c_str());
+ return BAD_VALUE;
+ }
+ auto aidlEffect = sp<effect::EffectHalAidl>::cast(effect);
+ return statusTFromBinderStatus(mModule->removeDeviceEffect(
+ existingPortConfigIt->first, aidlEffect->getIEffect()));
}
status_t DeviceHalAidl::getMmapPolicyInfos(
diff --git a/media/libaudiohal/impl/StreamHalAidl.cpp b/media/libaudiohal/impl/StreamHalAidl.cpp
index c84f80f..80e19a0 100644
--- a/media/libaudiohal/impl/StreamHalAidl.cpp
+++ b/media/libaudiohal/impl/StreamHalAidl.cpp
@@ -32,6 +32,7 @@
#include <utils/Log.h>
#include "DeviceHalAidl.h"
+#include "EffectHalAidl.h"
#include "StreamHalAidl.h"
using ::aidl::android::aidl_utils::statusTFromBinderStatus;
@@ -162,20 +163,26 @@
return OK;
}
-status_t StreamHalAidl::addEffect(sp<EffectHalInterface> effect __unused) {
+status_t StreamHalAidl::addEffect(sp<EffectHalInterface> effect) {
ALOGD("%p %s::%s", this, getClassName().c_str(), __func__);
TIME_CHECK();
if (!mStream) return NO_INIT;
- ALOGE("%s not implemented yet", __func__);
- return OK;
+ if (effect == nullptr) {
+ return BAD_VALUE;
+ }
+ auto aidlEffect = sp<effect::EffectHalAidl>::cast(effect);
+ return statusTFromBinderStatus(mStream->addEffect(aidlEffect->getIEffect()));
}
-status_t StreamHalAidl::removeEffect(sp<EffectHalInterface> effect __unused) {
+status_t StreamHalAidl::removeEffect(sp<EffectHalInterface> effect) {
ALOGD("%p %s::%s", this, getClassName().c_str(), __func__);
TIME_CHECK();
if (!mStream) return NO_INIT;
- ALOGE("%s not implemented yet", __func__);
- return OK;
+ if (effect == nullptr) {
+ return BAD_VALUE;
+ }
+ auto aidlEffect = sp<effect::EffectHalAidl>::cast(effect);
+ return statusTFromBinderStatus(mStream->removeEffect(aidlEffect->getIEffect()));
}
status_t StreamHalAidl::standby() {
diff --git a/services/audioflinger/Android.bp b/services/audioflinger/Android.bp
index 39a4b9e..73c2ff4 100644
--- a/services/audioflinger/Android.bp
+++ b/services/audioflinger/Android.bp
@@ -148,13 +148,10 @@
srcs: [
"AudioFlinger.cpp",
- "AudioHwDevice.cpp",
- "AudioStreamOut.cpp",
"DeviceEffectManager.cpp",
"Effects.cpp",
"PatchPanel.cpp",
"PropertyUtils.cpp",
- "SpdifStreamOut.cpp",
"Threads.cpp",
"Tracks.cpp",
],
@@ -170,6 +167,7 @@
"av-types-aidl-cpp",
"effect-aidl-cpp",
"libaudioclient_aidl_conversion",
+ "libaudioflinger_datapath",
"libaudioflinger_fastpath",
"libaudioflinger_timing",
"libaudioflinger_utils",
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index e4e39c6..8fb8ea8 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -91,14 +91,15 @@
#include <timing/SyncEvent.h>
#include <timing/SynchronizedRecordState.h>
+#include <datapath/AudioHwDevice.h>
+#include <datapath/AudioStreamOut.h>
+#include <datapath/SpdifStreamOut.h>
+#include <datapath/ThreadMetrics.h>
+#include <datapath/TrackMetrics.h>
#include <fastpath/FastCapture.h>
#include <fastpath/FastMixer.h>
#include <media/nbaio/NBAIO.h>
-#include "AudioStreamOut.h"
-#include "SpdifStreamOut.h"
-#include "AudioHwDevice.h"
-#include "ThreadMetrics.h"
-#include "TrackMetrics.h"
+
#include <android/os/IPowerManager.h>
diff --git a/services/audioflinger/datapath/Android.bp b/services/audioflinger/datapath/Android.bp
new file mode 100644
index 0000000..58f0422
--- /dev/null
+++ b/services/audioflinger/datapath/Android.bp
@@ -0,0 +1,64 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_av_services_audioflinger_license"],
+}
+
+audioflinger_datapath_tidy_errors = audioflinger_base_tidy_errors + [
+ "modernize-avoid-c-arrays",
+ "modernize-deprecated-headers",
+ "modernize-pass-by-value",
+ "modernize-use-auto",
+ "modernize-use-nodiscard",
+
+ // TODO(b/275642749) Reenable these warnings
+ "-misc-non-private-member-variables-in-classes",
+]
+
+// Eventually use common tidy defaults
+cc_defaults {
+ name: "audioflinger_datapath_flags_defaults",
+ // https://clang.llvm.org/docs/UsersManual.html#command-line-options
+ // https://clang.llvm.org/docs/DiagnosticsReference.html
+ cflags: audioflinger_base_cflags,
+ // https://clang.llvm.org/extra/clang-tidy/
+ tidy: true,
+ tidy_checks: audioflinger_datapath_tidy_errors,
+ tidy_checks_as_errors: audioflinger_datapath_tidy_errors,
+ tidy_flags: [
+ "-format-style=file",
+ ],
+}
+
+cc_library {
+ name: "libaudioflinger_datapath",
+
+ defaults: [
+ "audioflinger_datapath_flags_defaults",
+ "latest_android_media_audio_common_types_cpp_shared",
+ ],
+
+ srcs: [
+ "AudioHwDevice.cpp",
+ "AudioStreamOut.cpp",
+ "SpdifStreamOut.cpp",
+ ],
+
+ header_libs: [
+ "libaudiohal_headers",
+ "liberror_headers",
+ ],
+
+ shared_libs: [
+ "audioclient-types-aidl-cpp",
+ "av-types-aidl-cpp",
+ "libaudiospdif",
+ "libaudioutils",
+ "libbase",
+ "liblog",
+ "libutils", // refbase
+ ],
+}
diff --git a/services/audioflinger/AudioHwDevice.cpp b/services/audioflinger/datapath/AudioHwDevice.cpp
similarity index 94%
rename from services/audioflinger/AudioHwDevice.cpp
rename to services/audioflinger/datapath/AudioHwDevice.cpp
index dee6161..9ff316c 100644
--- a/services/audioflinger/AudioHwDevice.cpp
+++ b/services/audioflinger/datapath/AudioHwDevice.cpp
@@ -44,7 +44,7 @@
{
struct audio_config originalConfig = *config;
- AudioStreamOut *outputStream = new AudioStreamOut(this, flags);
+ auto outputStream = new AudioStreamOut(this, flags);
// Try to open the HAL first using the current format.
ALOGV("openOutputStream(), try "
@@ -57,7 +57,7 @@
if (status != NO_ERROR) {
delete outputStream;
- outputStream = NULL;
+ outputStream = nullptr;
// FIXME Look at any modification to the config.
// The HAL might modify the config to suggest a wrapped format.
@@ -71,7 +71,7 @@
status);
// If the data is encoded then try again using wrapped PCM.
- bool wrapperNeeded = !audio_has_proportional_frames(originalConfig.format)
+ const bool wrapperNeeded = !audio_has_proportional_frames(originalConfig.format)
&& ((flags & AUDIO_OUTPUT_FLAG_DIRECT) != 0)
&& ((flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) == 0);
@@ -83,7 +83,7 @@
ALOGE("ERROR - openOutputStream(), SPDIF open returned %d",
status);
delete outputStream;
- outputStream = NULL;
+ outputStream = nullptr;
}
} else {
ALOGE("ERROR - openOutputStream(), SPDIFEncoder does not support format 0x%08x",
diff --git a/services/audioflinger/AudioHwDevice.h b/services/audioflinger/datapath/AudioHwDevice.h
similarity index 81%
rename from services/audioflinger/AudioHwDevice.h
rename to services/audioflinger/datapath/AudioHwDevice.h
index d071922..f9cb80e 100644
--- a/services/audioflinger/AudioHwDevice.h
+++ b/services/audioflinger/datapath/AudioHwDevice.h
@@ -54,25 +54,25 @@
, mFlags(flags) { }
virtual ~AudioHwDevice() { free((void *)mModuleName); }
- bool canSetMasterVolume() const {
+ [[nodiscard]] bool canSetMasterVolume() const {
return (0 != (mFlags & AHWD_CAN_SET_MASTER_VOLUME));
}
- bool canSetMasterMute() const {
+ [[nodiscard]] bool canSetMasterMute() const {
return (0 != (mFlags & AHWD_CAN_SET_MASTER_MUTE));
}
- bool isInsert() const {
+ [[nodiscard]] bool isInsert() const {
return (0 != (mFlags & AHWD_IS_INSERT));
}
- bool supportsBluetoothVariableLatency() const {
+ [[nodiscard]] bool supportsBluetoothVariableLatency() const {
return (0 != (mFlags & AHWD_SUPPORTS_BT_LATENCY_MODES));
}
- audio_module_handle_t handle() const { return mHandle; }
- const char *moduleName() const { return mModuleName; }
- sp<DeviceHalInterface> hwDevice() const { return mHwDevice; }
+ [[nodiscard]] audio_module_handle_t handle() const { return mHandle; }
+ [[nodiscard]] const char *moduleName() const { return mModuleName; }
+ [[nodiscard]] sp<DeviceHalInterface> hwDevice() const { return mHwDevice; }
/** This method creates and opens the audio hardware output stream.
* The "address" parameter qualifies the "devices" audio device type if needed.
@@ -89,17 +89,17 @@
struct audio_config *config,
const char *address);
- bool supportsAudioPatches() const;
+ [[nodiscard]] bool supportsAudioPatches() const;
- status_t getAudioPort(struct audio_port_v7 *port) const;
+ [[nodiscard]] status_t getAudioPort(struct audio_port_v7 *port) const;
- status_t getMmapPolicyInfos(
+ [[nodiscard]] status_t getMmapPolicyInfos(
media::audio::common::AudioMMapPolicyType policyType,
std::vector<media::audio::common::AudioMMapPolicyInfo> *policyInfos) const;
- int32_t getAAudioMixerBurstCount() const;
+ [[nodiscard]] int32_t getAAudioMixerBurstCount() const;
- int32_t getAAudioHardwareBurstMinUsec() const;
+ [[nodiscard]] int32_t getAAudioHardwareBurstMinUsec() const;
private:
const audio_module_handle_t mHandle;
diff --git a/services/audioflinger/AudioStreamOut.cpp b/services/audioflinger/datapath/AudioStreamOut.cpp
similarity index 86%
rename from services/audioflinger/AudioStreamOut.cpp
rename to services/audioflinger/datapath/AudioStreamOut.cpp
index 65ec0e8..6fa82e5 100644
--- a/services/audioflinger/AudioStreamOut.cpp
+++ b/services/audioflinger/datapath/AudioStreamOut.cpp
@@ -31,21 +31,13 @@
// ----------------------------------------------------------------------------
AudioStreamOut::AudioStreamOut(AudioHwDevice *dev, audio_output_flags_t flags)
: audioHwDev(dev)
- , stream(NULL)
, flags(flags)
- , mFramesWritten(0)
- , mFramesWrittenAtStandby(0)
- , mRenderPosition(0)
- , mRateMultiplier(1)
- , mHalFormatHasProportionalFrames(false)
- , mHalFrameSize(0)
- , mExpectRetrograde(false)
{
}
-AudioStreamOut::~AudioStreamOut()
-{
-}
+// This must be defined here together with the HAL includes above and
+// not solely in the header.
+AudioStreamOut::~AudioStreamOut() = default;
sp<DeviceHalInterface> AudioStreamOut::hwDev() const
{
@@ -54,12 +46,12 @@
status_t AudioStreamOut::getRenderPosition(uint64_t *frames)
{
- if (stream == 0) {
+ if (stream == nullptr) {
return NO_INIT;
}
uint32_t halPosition = 0;
- status_t status = stream->getRenderPosition(&halPosition);
+ const status_t status = stream->getRenderPosition(&halPosition);
if (status != NO_ERROR) {
return status;
}
@@ -67,7 +59,7 @@
// Maintain a 64-bit render position using the 32-bit result from the HAL.
// This delta calculation relies on the arithmetic overflow behavior
// of integers. For example (100 - 0xFFFFFFF0) = 116.
- const uint32_t truncatedPosition = (uint32_t)mRenderPosition;
+ const auto truncatedPosition = (uint32_t)mRenderPosition;
int32_t deltaHalPosition; // initialization not needed, overwitten by __builtin_sub_overflow()
(void) __builtin_sub_overflow(halPosition, truncatedPosition, &deltaHalPosition);
@@ -87,7 +79,7 @@
status_t AudioStreamOut::getRenderPosition(uint32_t *frames)
{
uint64_t position64 = 0;
- status_t status = getRenderPosition(&position64);
+ const status_t status = getRenderPosition(&position64);
if (status == NO_ERROR) {
*frames = (uint32_t)position64;
}
@@ -96,12 +88,12 @@
status_t AudioStreamOut::getPresentationPosition(uint64_t *frames, struct timespec *timestamp)
{
- if (stream == 0) {
+ if (stream == nullptr) {
return NO_INIT;
}
uint64_t halPosition = 0;
- status_t status = stream->getPresentationPosition(&halPosition, timestamp);
+ const status_t status = stream->getPresentationPosition(&halPosition, timestamp);
if (status != NO_ERROR) {
return status;
}
@@ -109,7 +101,7 @@
// Adjust for standby using HAL rate frames.
// Only apply this correction if the HAL is getting PCM frames.
if (mHalFormatHasProportionalFrames) {
- uint64_t adjustedPosition = (halPosition <= mFramesWrittenAtStandby) ?
+ const uint64_t adjustedPosition = (halPosition <= mFramesWrittenAtStandby) ?
0 : (halPosition - mFramesWrittenAtStandby);
// Scale from HAL sample rate to application rate.
*frames = adjustedPosition / mRateMultiplier;
@@ -129,7 +121,7 @@
{
sp<StreamOutHalInterface> outStream;
- audio_output_flags_t customFlags = (config->format == AUDIO_FORMAT_IEC61937)
+ const audio_output_flags_t customFlags = (config->format == AUDIO_FORMAT_IEC61937)
? (audio_output_flags_t)(flags | AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO)
: flags;
@@ -195,7 +187,7 @@
mExpectRetrograde = false;
mFramesWritten = 0;
mFramesWrittenAtStandby = 0;
- status_t result = stream->flush();
+ const status_t result = stream->flush();
return result != INVALID_OPERATION ? result : NO_ERROR;
}
@@ -210,7 +202,7 @@
ssize_t AudioStreamOut::write(const void *buffer, size_t numBytes)
{
size_t bytesWritten;
- status_t result = stream->write(buffer, numBytes, &bytesWritten);
+ const status_t result = stream->write(buffer, numBytes, &bytesWritten);
if (result == OK && bytesWritten > 0 && mHalFrameSize > 0) {
mFramesWritten += bytesWritten / mHalFrameSize;
}
diff --git a/services/audioflinger/AudioStreamOut.h b/services/audioflinger/datapath/AudioStreamOut.h
similarity index 84%
rename from services/audioflinger/AudioStreamOut.h
rename to services/audioflinger/datapath/AudioStreamOut.h
index 82fe238..ce00f8c 100644
--- a/services/audioflinger/AudioStreamOut.h
+++ b/services/audioflinger/datapath/AudioStreamOut.h
@@ -41,7 +41,7 @@
sp<StreamOutHalInterface> stream;
const audio_output_flags_t flags;
- sp<DeviceHalInterface> hwDev() const;
+ [[nodiscard]] sp<DeviceHalInterface> hwDev() const;
AudioStreamOut(AudioHwDevice *dev, audio_output_flags_t flags);
@@ -78,7 +78,7 @@
/**
* @return frame size from the perspective of the application and the AudioFlinger.
*/
- virtual size_t getFrameSize() const { return mHalFrameSize; }
+ [[nodiscard]] virtual size_t getFrameSize() const { return mHalFrameSize; }
/**
* @return audio stream configuration: channel mask, format, sample rate:
@@ -88,7 +88,7 @@
* - sample rate from the perspective of the application and the AudioFlinger,
* The HAL may be running at a higher sample rate if, for example, playing wrapped EAC3.
*/
- virtual audio_config_base_t getAudioProperties() const;
+ [[nodiscard]] virtual audio_config_base_t getAudioProperties() const;
virtual status_t flush();
virtual status_t standby();
@@ -101,13 +101,13 @@
virtual void presentationComplete() { mExpectRetrograde = true; }
protected:
- uint64_t mFramesWritten; // reset by flush
- uint64_t mFramesWrittenAtStandby;
- uint64_t mRenderPosition; // reset by flush, standby, or presentation complete
- int mRateMultiplier;
- bool mHalFormatHasProportionalFrames;
- size_t mHalFrameSize;
- bool mExpectRetrograde; // see presentationComplete
+ uint64_t mFramesWritten = 0; // reset by flush
+ uint64_t mFramesWrittenAtStandby = 0;
+ uint64_t mRenderPosition = 0; // reset by flush, standby, or presentation complete
+ int mRateMultiplier = 1;
+ bool mHalFormatHasProportionalFrames = false;
+ size_t mHalFrameSize = 0;
+ bool mExpectRetrograde = false; // see presentationComplete
};
} // namespace android
diff --git a/services/audioflinger/SpdifStreamOut.cpp b/services/audioflinger/datapath/SpdifStreamOut.cpp
similarity index 95%
rename from services/audioflinger/SpdifStreamOut.cpp
rename to services/audioflinger/datapath/SpdifStreamOut.cpp
index 0ce5681..43e9c0c 100644
--- a/services/audioflinger/SpdifStreamOut.cpp
+++ b/services/audioflinger/datapath/SpdifStreamOut.cpp
@@ -37,9 +37,6 @@
// Tell the HAL that the data will be compressed audio wrapped in a data burst.
: AudioStreamOut(dev, (audio_output_flags_t) (flags | AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO))
, mSpdifEncoder(this, format)
- , mApplicationFormat(AUDIO_FORMAT_DEFAULT)
- , mApplicationSampleRate(0)
- , mApplicationChannelMask(AUDIO_CHANNEL_NONE)
{
}
@@ -91,7 +88,7 @@
customConfig.format,
customConfig.channel_mask);
- status_t status = AudioStreamOut::open(
+ const status_t status = AudioStreamOut::open(
handle,
devices,
&customConfig,
diff --git a/services/audioflinger/SpdifStreamOut.h b/services/audioflinger/datapath/SpdifStreamOut.h
similarity index 78%
rename from services/audioflinger/SpdifStreamOut.h
rename to services/audioflinger/datapath/SpdifStreamOut.h
index fc9bb6e..c8dc89f 100644
--- a/services/audioflinger/SpdifStreamOut.h
+++ b/services/audioflinger/datapath/SpdifStreamOut.h
@@ -39,13 +39,13 @@
SpdifStreamOut(AudioHwDevice *dev, audio_output_flags_t flags,
audio_format_t format);
- virtual ~SpdifStreamOut() { }
+ ~SpdifStreamOut() override = default;
- virtual status_t open(
+ status_t open(
audio_io_handle_t handle,
audio_devices_t devices,
struct audio_config *config,
- const char *address);
+ const char *address) override;
/**
* Write audio buffer to driver. Returns number of bytes written, or a
@@ -60,32 +60,34 @@
* callback function must be called when more space is available in the
* driver/hardware buffer.
*/
- virtual ssize_t write(const void* buffer, size_t bytes);
+ ssize_t write(const void* buffer, size_t bytes) override;
/**
* @return frame size from the perspective of the application and the AudioFlinger.
*/
- virtual size_t getFrameSize() const { return sizeof(int8_t); }
+ [[nodiscard]] size_t getFrameSize() const override { return sizeof(int8_t); }
/**
* @return format from the perspective of the application and the AudioFlinger.
*/
- virtual audio_format_t getFormat() const { return mApplicationFormat; }
+ [[nodiscard]] virtual audio_format_t getFormat() const { return mApplicationFormat; }
/**
* The HAL may be running at a higher sample rate if, for example, playing wrapped EAC3.
* @return sample rate from the perspective of the application and the AudioFlinger.
*/
- virtual uint32_t getSampleRate() const { return mApplicationSampleRate; }
+ [[nodiscard]] virtual uint32_t getSampleRate() const { return mApplicationSampleRate; }
/**
* The HAL is in stereo mode when playing multi-channel compressed audio over HDMI.
* @return channel mask from the perspective of the application and the AudioFlinger.
*/
- virtual audio_channel_mask_t getChannelMask() const { return mApplicationChannelMask; }
+ [[nodiscard]] virtual audio_channel_mask_t getChannelMask() const {
+ return mApplicationChannelMask;
+ }
- virtual status_t flush();
- virtual status_t standby();
+ status_t flush() override;
+ status_t standby() override;
private:
@@ -98,7 +100,7 @@
{
}
- virtual ssize_t writeOutput(const void* buffer, size_t bytes)
+ ssize_t writeOutput(const void* buffer, size_t bytes) override
{
return mSpdifStreamOut->writeDataBurst(buffer, bytes);
}
@@ -107,9 +109,9 @@
};
MySPDIFEncoder mSpdifEncoder;
- audio_format_t mApplicationFormat;
- uint32_t mApplicationSampleRate;
- audio_channel_mask_t mApplicationChannelMask;
+ audio_format_t mApplicationFormat = AUDIO_FORMAT_DEFAULT;
+ uint32_t mApplicationSampleRate = 0;
+ audio_channel_mask_t mApplicationChannelMask = AUDIO_CHANNEL_NONE;
ssize_t writeDataBurst(const void* data, size_t bytes);
ssize_t writeInternal(const void* buffer, size_t bytes);
diff --git a/services/audioflinger/ThreadMetrics.h b/services/audioflinger/datapath/ThreadMetrics.h
similarity index 100%
rename from services/audioflinger/ThreadMetrics.h
rename to services/audioflinger/datapath/ThreadMetrics.h
diff --git a/services/audioflinger/TrackMetrics.h b/services/audioflinger/datapath/TrackMetrics.h
similarity index 100%
rename from services/audioflinger/TrackMetrics.h
rename to services/audioflinger/datapath/TrackMetrics.h