audio policy: fix disordered sequence while changing device
Disordered sequence will occur when delayMs of muting volume
and changing path are the same and no additional delay between
both commands (muteWaitMs == 0).
Add half reported latency to delayMs for routing could avoid
processing muting stream volume and switching path concurrently.
Test: Make VoIP/voice call and switch device between handset/handsfree.
Check if touch tone is truncated in QXDM.
Signed-off-by: Jasmine Cha <firstname.lastname@example.org>
(cherry picked from commit 7f82d1a74e77e0a89fd8431dbaf68f9b8e8b7118)
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index c048de3..a984b10 100644
@@ -5535,7 +5535,10 @@
- installPatch(__func__, patchHandle, outputDesc.get(), patchBuilder.patch(), delayMs);
+ // Add half reported latency to delayMs when muteWaitMs is null in order
+ // to avoid disordered sequence of muting volume and changing devices.
+ installPatch(__func__, patchHandle, outputDesc.get(), patchBuilder.patch(),
+ muteWaitMs == 0 ? (delayMs + (outputDesc->latency() / 2)) : delayMs);
// update stream volumes according to new device