Merge "hal: ensure voip tx update base on the rx path"
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index d3f2739..ac4233d 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -2125,11 +2125,18 @@
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 &&
- adev->active_input &&
- out_snd_device != usecase->out_snd_device) {
- select_devices(adev, adev->active_input->usecase);
- }
+ voip_usecase = get_usecase_from_list(adev, USECASE_AUDIO_PLAYBACK_VOIP);
+ if (voip_usecase == NULL && adev->primary_output && !adev->primary_output->standby)
+ 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 &&
+ adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION &&
+ out_snd_device != usecase->out_snd_device) {
+ select_devices(adev, adev->active_input->usecase);
+ }
}
} else if (usecase->type == PCM_CAPTURE) {
if (usecase->stream.in == NULL) {
@@ -2143,9 +2150,12 @@
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) {
- out_device = adev->primary_output->devices;
+ 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) {
out_device = AUDIO_DEVICE_OUT_TELEPHONY_TX;
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 6e327f2..68ffd56 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -4693,6 +4693,16 @@
(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);
}
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index 0400169..0766311 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -4549,6 +4549,16 @@
(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);
}