From 7f82d1a74e77e0a89fd8431dbaf68f9b8e8b7118 Mon Sep 17 00:00:00 2001 From: Jasmine Cha Date: Mon, 16 Mar 2020 13:21:47 +0800 Subject: [PATCH] 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. Bug: 149798335 Test: Make VoIP/voice call and switch device between handset/handsfree. Check if touch tone is truncated in QXDM. Signed-off-by: Jasmine Cha Change-Id: Ifa15ba9de330805637cfb20ee96c4293c1c1bd31 --- services/audiopolicy/managerdefault/AudioPolicyManager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index c048de3942..a984b10c03 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -5535,7 +5535,10 @@ uint32_t AudioPolicyManager::setOutputDevices(const sp& patchBuilder.addSink(filteredDevice); } - 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