Merge "audio policy: fix typo in comment in AudioPolicyManager.cpp" into main
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index aafe3cd..f5ac109 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -311,7 +311,8 @@
}
mPatchPanel = IAfPatchPanel::create(sp<IAfPatchPanelCallback>::fromExisting(this));
- mMelReporter = sp<MelReporter>::make(sp<IAfMelReporterCallback>::fromExisting(this));
+ mMelReporter = sp<MelReporter>::make(sp<IAfMelReporterCallback>::fromExisting(this),
+ mPatchPanel);
}
status_t AudioFlinger::setAudioHalPids(const std::vector<pid_t>& pids) {
diff --git a/services/audioflinger/MelReporter.cpp b/services/audioflinger/MelReporter.cpp
index 41c5096..1d38306 100644
--- a/services/audioflinger/MelReporter.cpp
+++ b/services/audioflinger/MelReporter.cpp
@@ -307,6 +307,22 @@
}
+void MelReporter::applyAllAudioPatches() {
+ ALOGV("%s", __func__);
+
+ std::vector<IAfPatchPanel::Patch> patchesCopy;
+ {
+ audio_utils::lock_guard _laf(mAfMelReporterCallback->mutex());
+ for (const auto& patch : mAfPatchPanel->patches_l()) {
+ patchesCopy.emplace_back(patch.second);
+ }
+ }
+
+ for (const auto& patch : patchesCopy) {
+ onCreateAudioPatch(patch.mHalHandle, patch);
+ }
+}
+
std::optional<audio_patch_handle_t> MelReporter::activePatchStreamHandle_l(
audio_io_handle_t streamHandle) {
for(const auto& patchIt : mActiveMelPatches) {
diff --git a/services/audioflinger/MelReporter.h b/services/audioflinger/MelReporter.h
index 235dd11..0aeb225 100644
--- a/services/audioflinger/MelReporter.h
+++ b/services/audioflinger/MelReporter.h
@@ -27,8 +27,6 @@
namespace android {
-constexpr static int kMaxTimestampDeltaInSec = 120;
-
class IAfMelReporterCallback : public virtual RefBase {
public:
virtual audio_utils::mutex& mutex() const
@@ -45,8 +43,10 @@
class MelReporter : public PatchCommandThread::PatchCommandListener,
public IMelReporterCallback {
public:
- explicit MelReporter(const sp<IAfMelReporterCallback>& afMelReporterCallback)
- : mAfMelReporterCallback(afMelReporterCallback) {}
+ MelReporter(const sp<IAfMelReporterCallback>& afMelReporterCallback,
+ const sp<IAfPatchPanel>& afPatchPanel)
+ : mAfMelReporterCallback(afMelReporterCallback),
+ mAfPatchPanel(afPatchPanel) {}
void onFirstRef() override;
@@ -80,9 +80,10 @@
// IMelReporterCallback methods
void stopMelComputationForDeviceId(audio_port_handle_t deviceId) final
- EXCLUDES_MelReporter_Mutex;
+ EXCLUDES_AudioFlinger_Mutex EXCLUDES_MelReporter_Mutex;
void startMelComputationForDeviceId(audio_port_handle_t deviceId) final
- EXCLUDES_MelReporter_Mutex;
+ EXCLUDES_AudioFlinger_Mutex EXCLUDES_MelReporter_Mutex;
+ void applyAllAudioPatches() final EXCLUDES_AudioFlinger_Mutex EXCLUDES_MelReporter_Mutex;
// PatchCommandListener methods
void onCreateAudioPatch(audio_patch_handle_t handle,
@@ -131,6 +132,7 @@
bool useHalSoundDoseInterface_l() REQUIRES(mutex());
const sp<IAfMelReporterCallback> mAfMelReporterCallback;
+ const sp<IAfPatchPanel> mAfPatchPanel;
/* const */ sp<SoundDoseManager> mSoundDoseManager; // set onFirstRef
diff --git a/services/audioflinger/sounddose/SoundDoseManager.cpp b/services/audioflinger/sounddose/SoundDoseManager.cpp
index 47f7228..6797e3d 100644
--- a/services/audioflinger/sounddose/SoundDoseManager.cpp
+++ b/services/audioflinger/sounddose/SoundDoseManager.cpp
@@ -590,8 +590,19 @@
}
void SoundDoseManager::setComputeCsdOnAllDevices(bool computeCsdOnAllDevices) {
- const std::lock_guard _l(mLock);
- mComputeCsdOnAllDevices = computeCsdOnAllDevices;
+ bool changed = false;
+ {
+ const std::lock_guard _l(mLock);
+ if (mHalSoundDose.size() != 0) {
+ // when using the HAL path we cannot enforce to deliver values for all devices
+ changed = mUseFrameworkMel != computeCsdOnAllDevices;
+ mUseFrameworkMel = computeCsdOnAllDevices;
+ }
+ mComputeCsdOnAllDevices = computeCsdOnAllDevices;
+ }
+ if (changed && computeCsdOnAllDevices) {
+ mMelReporterCallback->applyAllAudioPatches();
+ }
}
bool SoundDoseManager::isComputeCsdForcedOnAllDevices() const {
diff --git a/services/audioflinger/sounddose/SoundDoseManager.h b/services/audioflinger/sounddose/SoundDoseManager.h
index 0c49a80..52a3fd6 100644
--- a/services/audioflinger/sounddose/SoundDoseManager.h
+++ b/services/audioflinger/sounddose/SoundDoseManager.h
@@ -39,6 +39,8 @@
virtual void stopMelComputationForDeviceId(audio_port_handle_t deviceId) = 0;
virtual void startMelComputationForDeviceId(audio_port_handle_t deviceId) = 0;
+
+ virtual void applyAllAudioPatches() = 0;
};
class SoundDoseManager : public audio_utils::MelProcessor::MelCallback {
diff --git a/services/audioflinger/sounddose/tests/sounddosemanager_tests.cpp b/services/audioflinger/sounddose/tests/sounddosemanager_tests.cpp
index 1151647..e79b05e 100644
--- a/services/audioflinger/sounddose/tests/sounddosemanager_tests.cpp
+++ b/services/audioflinger/sounddose/tests/sounddosemanager_tests.cpp
@@ -44,6 +44,7 @@
public:
MOCK_METHOD(void, startMelComputationForDeviceId, (audio_port_handle_t), (override));
MOCK_METHOD(void, stopMelComputationForDeviceId, (audio_port_handle_t), (override));
+ MOCK_METHOD(void, applyAllAudioPatches, (), (override));
};
class MelAggregatorMock : public audio_utils::MelAggregator {