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

Commit 2e2a8a99 authored by Eric Laurent's avatar Eric Laurent
Browse files

audiopolicy: evaluate all outputs routing when call state changes

When call state changes, it is possible that some outputs are active in
which case their routing must be reevaluated.
This generalizes this behavior already implemented when a device is
connected/disconnected or a forced usage changed.

This is normally not needed as music is paused when a call is active
but there can be some race conditions where music resumes before the
audio mode is actually updated due to the asynchronous nature of audio
focus and audio mode management.

Bug: 78248310
Test: repro steps in bug. Audio smoke tests
Change-Id: If491eb879a90cf29025bedb2bc77210f052bcb6a
parent 6b6f4313
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -589,6 +589,16 @@ void AudioPolicyManager::setPhoneState(audio_mode_t state)
            setOutputDevice(mPrimaryOutput, rxDevice, force, 0);
        }
    }

    // reevaluate routing on all outputs in case tracks have been started during the call
    for (size_t i = 0; i < mOutputs.size(); i++) {
        sp<SwAudioOutputDescriptor> desc = mOutputs.valueAt(i);
        audio_devices_t newDevice = getNewOutputDevice(desc, true /*fromCache*/);
        if (state != AUDIO_MODE_IN_CALL || desc != mPrimaryOutput) {
            setOutputDevice(desc, newDevice, (newDevice != AUDIO_DEVICE_NONE), delayMs);
        }
    }

    // if entering in call state, handle special case of active streams
    // pertaining to sonification strategy see handleIncallSonification()
    if (isStateInCall(state)) {