diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index 5a012bfcb2..ffc3a0fd8b 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -5710,7 +5710,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