Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1f1cb58 authored by Eric Laurent's avatar Eric Laurent
Browse files

audio policy: correct force use touch sound delay

Do not apply the special delay added in setForceUse() multiple times.
This delay was meant to be applied only once to avoid truncating touch
sounds but is actually used multiple times when updating routes on all
output streams, thus lengthening the call audio path switch time
unnecessarily.

Bug: 163537547
Test: manual call routing test
Change-Id: I6fe15d4ed9b1f37452921585e9f7684637e8a30b
(cherry picked from commit b36b4acc)
parent d1fa2375
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3161,6 +3161,8 @@ void AudioPolicyManager::updateCallAndOutputRouting(bool forceVolumeReeval, uint
    if (mEngine->getPhoneState() == AUDIO_MODE_IN_CALL && hasPrimaryOutput()) {
        DeviceVector newDevices = getNewOutputDevices(mPrimaryOutput, true /*fromCache*/);
        waitMs = updateCallRouting(newDevices, delayMs);
        // Only apply special touch sound delay once
        delayMs = 0;
    }
    for (size_t i = 0; i < mOutputs.size(); i++) {
        sp<SwAudioOutputDescriptor> outputDesc = mOutputs.valueAt(i);
@@ -3170,6 +3172,8 @@ void AudioPolicyManager::updateCallAndOutputRouting(bool forceVolumeReeval, uint
            // preventing the force re-routing in case of default dev that distinguishes on address.
            // Let's give back to engine full device choice decision however.
            waitMs = setOutputDevices(outputDesc, newDevices, !newDevices.isEmpty(), delayMs);
            // Only apply special touch sound delay once
            delayMs = 0;
        }
        if (forceVolumeReeval && !newDevices.isEmpty()) {
            applyStreamVolumes(outputDesc, newDevices.types(), waitMs, true);