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

Commit dcf967a3 authored by kunleiz's avatar kunleiz Committed by Gerrit - the friendly Code Review server
Browse files

hal: ensure voip tx update base on the rx path

Voip does not use primary output in rx path. When voip
rx device change, voip tx path is not updated accordingly.

Fix it by selecting voip tx device base on the rx path,
otherwise base on primary output device.

CRs-Fixed: 2289517
Change-Id: Ic078eb057be40dd4338ade70f541bb056c19dfca
parent 24d1f3b0
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -2131,7 +2131,13 @@ int select_devices(struct audio_device *adev, audio_usecase_t uc_id)
            if (out_snd_device == SND_DEVICE_NONE) {
                out_snd_device = platform_get_output_snd_device(adev->platform,
                                            usecase->stream.out);
                if (usecase->stream.out == adev->primary_output &&
                voip_usecase = get_usecase_from_list(adev, USECASE_AUDIO_PLAYBACK_VOIP);
                if (voip_usecase == NULL)
                    voip_usecase = get_usecase_from_list(adev, adev->primary_output->usecase);

                if ((usecase->stream.out != NULL &&
                     voip_usecase != NULL &&
                     usecase->stream.out->usecase == voip_usecase->id) &&
                    adev->active_input &&
                    out_snd_device != usecase->out_snd_device) {
                    select_devices(adev, adev->active_input->usecase);
@@ -2149,8 +2155,11 @@ int select_devices(struct audio_device *adev, audio_usecase_t uc_id)
                if (adev->active_input &&
                    (adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION ||
                    (adev->mode == AUDIO_MODE_IN_COMMUNICATION &&
                     adev->active_input->source == AUDIO_SOURCE_MIC)) &&
                     adev->primary_output && !adev->primary_output->standby) {
                     adev->active_input->source == AUDIO_SOURCE_MIC))) {
                    voip_usecase = get_usecase_from_list(adev, USECASE_AUDIO_PLAYBACK_VOIP);
                    if (voip_usecase != NULL && voip_usecase->stream.out != NULL)
                        out_device = voip_usecase->stream.out->devices;
                    else if (adev->primary_output && !adev->primary_output->standby)
                        out_device = adev->primary_output->devices;
                    platform_set_echo_reference(adev, false, AUDIO_DEVICE_NONE);
                } else if (usecase->id == USECASE_AUDIO_RECORD_AFE_PROXY) {
+10 −0
Original line number Diff line number Diff line
@@ -4655,6 +4655,16 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
              (mode == AUDIO_MODE_IN_COMMUNICATION)) {
        if (out_device & AUDIO_DEVICE_OUT_SPEAKER)
            in_device = AUDIO_DEVICE_IN_BACK_MIC;
        else if (out_device & AUDIO_DEVICE_OUT_EARPIECE)
            in_device = AUDIO_DEVICE_IN_BUILTIN_MIC;
        else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET)
            in_device = AUDIO_DEVICE_IN_WIRED_HEADSET;
        else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE)
             in_device = AUDIO_DEVICE_IN_USB_DEVICE;

        in_device = ((out_device == AUDIO_DEVICE_NONE) ?
                      AUDIO_DEVICE_IN_BUILTIN_MIC : in_device) & ~AUDIO_DEVICE_BIT_IN;

        if (adev->active_input) {
            snd_device = get_snd_device_for_voice_comm(my_data, out_device, in_device);
        }
+10 −0
Original line number Diff line number Diff line
@@ -4490,6 +4490,16 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d
              (mode == AUDIO_MODE_IN_COMMUNICATION)) {
        if (out_device & AUDIO_DEVICE_OUT_SPEAKER)
            in_device = AUDIO_DEVICE_IN_BACK_MIC;
        else if (out_device & AUDIO_DEVICE_OUT_EARPIECE)
            in_device = AUDIO_DEVICE_IN_BUILTIN_MIC;
        else if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADSET)
            in_device = AUDIO_DEVICE_IN_WIRED_HEADSET;
        else if (out_device & AUDIO_DEVICE_OUT_USB_DEVICE)
            in_device = AUDIO_DEVICE_IN_USB_DEVICE;

        in_device = ((out_device == AUDIO_DEVICE_NONE) ?
                      AUDIO_DEVICE_IN_BUILTIN_MIC : in_device) & ~AUDIO_DEVICE_BIT_IN;

        if (adev->active_input) {
            snd_device = get_snd_device_for_voice_comm(my_data, out_device, in_device);
        }