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

Commit b36b4acc 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
parent 36f99424
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3185,6 +3185,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);
@@ -3194,6 +3196,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);