Add HAL interface to replace aaudio system property.
Using the HAL interface instead of reading system property is a better
option when moving to AIDL HAL. The replaced property includes:
- aaudio.mixer_bursts
- aaudio.hw_burst_min_usec
Test: atest AAudioTests
Bug: 193275465
Change-Id: I9c9a04296e56ff083babcfa089fcdddc6b89ed94
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index a75e427..b359331 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -104,6 +104,8 @@
namespace android {
+#define MAX_AAUDIO_PROPERTY_DEVICE_HAL_VERSION 7.0
+
using media::IEffectClient;
using media::audio::common::AudioMMapPolicyInfo;
using media::audio::common::AudioMMapPolicyType;
@@ -304,6 +306,11 @@
mDevicesFactoryHalCallback = new DevicesFactoryHalCallbackImpl;
mDevicesFactoryHal->setCallbackOnce(mDevicesFactoryHalCallback);
+
+ if (mDevicesFactoryHal->getHalVersion() <= MAX_AAUDIO_PROPERTY_DEVICE_HAL_VERSION) {
+ mAAudioBurstsPerBuffer = getAAudioMixerBurstCountFromSystemProperty();
+ mAAudioHwBurstMinMicros = getAAudioHardwareBurstMinUsecFromSystemProperty();
+ }
}
status_t AudioFlinger::setAudioHalPids(const std::vector<pid_t>& pids) {
@@ -339,15 +346,14 @@
return NO_ERROR;
}
-#define MAX_MMAP_PROPERTY_DEVICE_HAL_VERSION 7.0
-
status_t AudioFlinger::getMmapPolicyInfos(
AudioMMapPolicyType policyType, std::vector<AudioMMapPolicyInfo> *policyInfos) {
+ Mutex::Autolock _l(mLock);
if (const auto it = mPolicyInfos.find(policyType); it != mPolicyInfos.end()) {
*policyInfos = it->second;
return NO_ERROR;
}
- if (mDevicesFactoryHal->getHalVersion() > MAX_MMAP_PROPERTY_DEVICE_HAL_VERSION) {
+ if (mDevicesFactoryHal->getHalVersion() > MAX_AAUDIO_PROPERTY_DEVICE_HAL_VERSION) {
AutoMutex lock(mHardwareLock);
for (size_t i = 0; i < mAudioHwDevs.size(); ++i) {
AudioHwDevice *dev = mAudioHwDevs.valueAt(i);
@@ -368,6 +374,16 @@
return NO_ERROR;
}
+int32_t AudioFlinger::getAAudioMixerBurstCount() {
+ Mutex::Autolock _l(mLock);
+ return mAAudioBurstsPerBuffer;
+}
+
+int32_t AudioFlinger::getAAudioHardwareBurstMinUsec() {
+ Mutex::Autolock _l(mLock);
+ return mAAudioHwBurstMinMicros;
+}
+
// getDefaultVibratorInfo_l must be called with AudioFlinger lock held.
std::optional<media::AudioVibratorInfo> AudioFlinger::getDefaultVibratorInfo_l() {
if (mAudioVibratorInfos.empty()) {
@@ -2322,6 +2338,17 @@
mHardwareStatus = AUDIO_HW_IDLE;
}
+ if (mDevicesFactoryHal->getHalVersion() > MAX_AAUDIO_PROPERTY_DEVICE_HAL_VERSION) {
+ if (int32_t mixerBursts = dev->getAAudioMixerBurstCount();
+ mixerBursts > mAAudioBurstsPerBuffer) {
+ mAAudioBurstsPerBuffer = mixerBursts;
+ }
+ if (int32_t hwBurstMinMicros = dev->getAAudioHardwareBurstMinUsec();
+ hwBurstMinMicros < mAAudioHwBurstMinMicros || mAAudioHwBurstMinMicros == 0) {
+ mAAudioHwBurstMinMicros = hwBurstMinMicros;
+ }
+ }
+
mAudioHwDevs.add(handle, audioDevice);
ALOGI("loadHwModule() Loaded %s audio interface, handle %d", name, handle);