hal: fix voip device selection is not proper after voice call stop
In voip+voice concurrency case, when voip resume after voice call stop,
voip device still uses voice devices. This is due to in_call flag isn't
reset even if voice usecase doesn't exist.
Fix it by adding function to check voice usecase existence and get
correct device for non-voice usecases.
Change-Id: I39ba1092a0ab19c686baa1b80bb9913f64849590
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index 41c5941..96dfca7 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -4192,7 +4192,7 @@
* enforced audible (e.g. Camera shutter sound).
*/
if ((mode == AUDIO_MODE_IN_CALL) ||
- voice_is_in_call(adev) ||
+ voice_check_voicecall_usecases_active(adev) ||
voice_extn_compress_voip_is_active(adev))
is_active_voice_call = true;
@@ -4275,7 +4275,7 @@
}
if ((mode == AUDIO_MODE_IN_CALL) ||
- voice_is_in_call(adev) ||
+ voice_check_voicecall_usecases_active(adev) ||
voice_extn_compress_voip_is_active(adev)) {
if (devices & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
devices & AUDIO_DEVICE_OUT_WIRED_HEADSET ||
@@ -4651,8 +4651,10 @@
ALOGV("%s: enter: out_device(%#x) in_device(%#x) channel_count (%d) channel_mask (0x%x)",
__func__, out_device, in_device, channel_count, channel_mask);
if (my_data->external_mic) {
- if ((out_device != AUDIO_DEVICE_NONE) && ((mode == AUDIO_MODE_IN_CALL) || voice_is_in_call(adev) ||
- voice_extn_compress_voip_is_active(adev) || audio_extn_hfp_is_active(adev))) {
+ if ((out_device != AUDIO_DEVICE_NONE) && ((mode == AUDIO_MODE_IN_CALL) ||
+ voice_check_voicecall_usecases_active(adev) ||
+ voice_extn_compress_voip_is_active(adev) ||
+ audio_extn_hfp_is_active(adev))) {
if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||
out_device & AUDIO_DEVICE_OUT_EARPIECE ||
out_device & AUDIO_DEVICE_OUT_SPEAKER )
@@ -4666,8 +4668,10 @@
if (snd_device != AUDIO_DEVICE_NONE)
goto exit;
- if ((out_device != AUDIO_DEVICE_NONE) && ((mode == AUDIO_MODE_IN_CALL) || voice_is_in_call(adev) ||
- voice_extn_compress_voip_is_active(adev) || audio_extn_hfp_is_active(adev))) {
+ if ((out_device != AUDIO_DEVICE_NONE) && ((mode == AUDIO_MODE_IN_CALL) ||
+ voice_check_voicecall_usecases_active(adev) ||
+ voice_extn_compress_voip_is_active(adev) ||
+ audio_extn_hfp_is_active(adev))) {
if ((adev->voice.tty_mode != TTY_MODE_OFF) &&
!voice_extn_compress_voip_is_active(adev)) {
if (out_device & AUDIO_DEVICE_OUT_WIRED_HEADPHONE ||