audio: effect: prevents spurious call to remove/add device effects
Bug: 268441977
Test: make
When multiple clients are using a same input, each time a client is
added/removed, the audio path will be recreated, thus leading to
removing/adding the device effect on audio hal if a device effect is
used.
This CL prevents from removing/adding a device effect when a patch handle
is reused, by checking if it involves same sink device/source mix or sink mix
/source device.
Change-Id: I9545f701835a4269a870b66e4f68351aca384683
Signed-off-by: François Gaffie <francois.gaffie@renault.com>
diff --git a/services/audioflinger/Effects.h b/services/audioflinger/Effects.h
index 2d8775b..0c0af73 100644
--- a/services/audioflinger/Effects.h
+++ b/services/audioflinger/Effects.h
@@ -680,11 +680,20 @@
return onCreatePatch(patchHandle,
*reinterpret_cast<const AudioFlinger::PatchPanel::Patch *>(patch));
}
+ // TODO(b/288339104) type
+ status_t onUpdatePatch(audio_patch_handle_t oldPatchHandle, audio_patch_handle_t newPatchHandle,
+ /* const PatchPanel::Patch& */ const void * patch) final {
+ return onUpdatePatch(oldPatchHandle, newPatchHandle,
+ *reinterpret_cast<const AudioFlinger::PatchPanel::Patch *>(patch));
+ }
status_t init(const std::map<audio_patch_handle_t, AudioFlinger::PatchPanel::Patch>& patches);
status_t onCreatePatch(
audio_patch_handle_t patchHandle, const AudioFlinger::PatchPanel::Patch& patch);
+ status_t onUpdatePatch(audio_patch_handle_t oldPatchHandle, audio_patch_handle_t newPatchHandle,
+ const AudioFlinger::PatchPanel::Patch& patch);
+
void onReleasePatch(audio_patch_handle_t patchHandle) final;
size_t removeEffect(const sp<IAfEffectModule>& effect) final;