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

Commit 1e1ebbf3 authored by carter_hsu's avatar carter_hsu Committed by David Lin
Browse files

audio: fix device pair for VOIP case



Since the dedicated VOIP output has been enabled, to select
VOIP device pair by primary output may not be solid.

To check the voip output first in VOIP case in case the wrong output device
is passed to get_snd_input_device function.

Bug: 64774724
Test: manual audio test
Change-Id: If7efbb40fe28d1b9ac1435406b2693cfb3be8ed8
Signed-off-by: default avatarcarter_hsu <carter_hsu@htc.com>
parent c76a5353
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -1206,13 +1206,20 @@ int select_devices(struct audio_device *adev,
            usecase->devices = usecase->stream.out->devices;
            in_snd_device = SND_DEVICE_NONE;
            if (out_snd_device == SND_DEVICE_NONE) {
                struct stream_out *voip_out = adev->primary_output;
                struct audio_usecase *voip_usecase = get_usecase_from_list(adev,
                                                         USECASE_AUDIO_PLAYBACK_VOIP);

                out_snd_device = platform_get_output_snd_device(adev->platform,
                                            usecase->stream.out->devices);
                if (usecase->stream.out == adev->primary_output &&

                if (voip_usecase)
                    voip_out = voip_usecase->stream.out;

                if (usecase->stream.out == voip_out &&
                        adev->active_input &&
                        (adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION ||
                            adev->mode == AUDIO_MODE_IN_COMMUNICATION) &&
                        out_snd_device != usecase->out_snd_device) {
                            adev->mode == AUDIO_MODE_IN_COMMUNICATION)) {
                    select_devices(adev, adev->active_input->usecase);
                }
            }
@@ -1224,9 +1231,15 @@ int select_devices(struct audio_device *adev,
                if (adev->active_input &&
                        (adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION ||
                            adev->mode == AUDIO_MODE_IN_COMMUNICATION)) {

                    struct audio_usecase *voip_usecase = get_usecase_from_list(adev,
                                                             USECASE_AUDIO_PLAYBACK_VOIP);

                    platform_set_echo_reference(adev, false, AUDIO_DEVICE_NONE);
                    if (usecase->id == USECASE_AUDIO_RECORD_AFE_PROXY) {
                        out_device = AUDIO_DEVICE_OUT_TELEPHONY_TX;
                    } else if (voip_usecase) {
                        out_device = voip_usecase->stream.out->devices;
                    } else if (adev->primary_output) {
                        out_device = adev->primary_output->devices;
                    }