Merge "CSD: Add method to check if HAL supports CSD" into udc-dev
diff --git a/media/libaudioclient/aidl/android/media/ISoundDose.aidl b/media/libaudioclient/aidl/android/media/ISoundDose.aidl
index a4c37bc..0e2a5ab 100644
--- a/media/libaudioclient/aidl/android/media/ISoundDose.aidl
+++ b/media/libaudioclient/aidl/android/media/ISoundDose.aidl
@@ -62,6 +62,11 @@
float getOutputRs2UpperBound();
/** Get the current CSD from audioserver. */
float getCsd();
+ /**
+ * Returns true if the HAL supports the ISoundDose interface. Can be either
+ * as part of IModule or standalon sound dose HAL.
+ */
+ boolean isSoundDoseHalSupported();
/** Enables/Disables MEL computations from framework. */
oneway void forceUseFrameworkMel(boolean useFrameworkMel);
/** Enables/Disables the computation of CSD on all devices. */
diff --git a/services/audioflinger/sounddose/SoundDoseManager.cpp b/services/audioflinger/sounddose/SoundDoseManager.cpp
index dd2d80a..21252d6 100644
--- a/services/audioflinger/sounddose/SoundDoseManager.cpp
+++ b/services/audioflinger/sounddose/SoundDoseManager.cpp
@@ -334,6 +334,16 @@
return binder::Status::ok();
}
+binder::Status SoundDoseManager::SoundDose::isSoundDoseHalSupported(bool* value) {
+ ALOGV("%s", __func__);
+ *value = false;
+ auto soundDoseManager = mSoundDoseManager.promote();
+ if (soundDoseManager != nullptr) {
+ *value = soundDoseManager->isSoundDoseHalSupported();
+ }
+ return binder::Status::ok();
+}
+
void SoundDoseManager::updateAttenuation(float attenuationDB, audio_devices_t deviceType) {
std::lock_guard _l(mLock);
ALOGV("%s: updating MEL processor attenuation for device type %d to %f",
@@ -397,6 +407,19 @@
return mComputeCsdOnAllDevices;
}
+bool SoundDoseManager::isSoundDoseHalSupported() const {
+ if (mDisableCsd) {
+ return false;
+ }
+
+ std::shared_ptr<ISoundDose> halSoundDose;
+ getHalSoundDose(&halSoundDose);
+ if (mHalSoundDose == nullptr) {
+ return false;
+ }
+ return true;
+}
+
void SoundDoseManager::getHalSoundDose(std::shared_ptr<ISoundDose>* halSoundDose) const {
std::lock_guard _l(mLock);
*halSoundDose = mHalSoundDose;
diff --git a/services/audioflinger/sounddose/SoundDoseManager.h b/services/audioflinger/sounddose/SoundDoseManager.h
index d7a686a..5081ce4 100644
--- a/services/audioflinger/sounddose/SoundDoseManager.h
+++ b/services/audioflinger/sounddose/SoundDoseManager.h
@@ -142,6 +142,7 @@
binder::Status getCsd(float* value) override;
binder::Status forceUseFrameworkMel(bool useFrameworkMel) override;
binder::Status forceComputeCsdOnAllDevices(bool computeCsdOnAllDevices) override;
+ binder::Status isSoundDoseHalSupported(bool* value) override;
wp<SoundDoseManager> mSoundDoseManager;
const sp<media::ISoundDoseCallback> mSoundDoseCallback;
@@ -172,6 +173,7 @@
void disableCsd();
void setUseFrameworkMel(bool useFrameworkMel);
void setComputeCsdOnAllDevices(bool computeCsdOnAllDevices);
+ bool isSoundDoseHalSupported() const;
/** Returns the HAL sound dose interface or null if internal MEL computation is used. */
void getHalSoundDose(std::shared_ptr<ISoundDose>* halSoundDose) const;