diff options
author | Eric Laurent <elaurent@google.com> | 2015-10-14 18:48:06 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2015-10-14 18:48:06 -0700 |
commit | 50a38ed90672924763c4cb18773fca64588faecc (patch) | |
tree | 436a24d1f563a83247d744b114b5b4a7ba628319 | |
parent | c075069083619889b0b28147f08e53371551ea91 (diff) | |
download | hardware_qcom_audio-50a38ed90672924763c4cb18773fca64588faecc.tar.gz hardware_qcom_audio-50a38ed90672924763c4cb18773fca64588faecc.tar.bz2 hardware_qcom_audio-50a38ed90672924763c4cb18773fca64588faecc.zip |
hal: fix mic selection for IN_COMMUNICATION mode
Being in IN_COMMUNICATION audio mode is now equivalent to having the
active capture source use AUDIO_SOURCE_VOICE_COMMUNICATION source
with regard to microphone and echo reference selection.
Bug: 24592816.
Change-Id: I82324811b417864837423951bc7271511c55a026
-rw-r--r-- | hal/audio_hw.c | 10 | ||||
-rw-r--r-- | hal/msm8960/platform.c | 3 | ||||
-rw-r--r-- | hal/msm8974/platform.c | 3 |
3 files changed, 11 insertions, 5 deletions
diff --git a/hal/audio_hw.c b/hal/audio_hw.c index 9b5a0950..2e954d67 100644 --- a/hal/audio_hw.c +++ b/hal/audio_hw.c @@ -643,7 +643,8 @@ int select_devices(struct audio_device *adev, usecase->stream.out->devices); if (usecase->stream.out == adev->primary_output && adev->active_input && - adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION && + (adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION || + adev->mode == AUDIO_MODE_IN_COMMUNICATION) && out_snd_device != usecase->out_snd_device) { select_devices(adev, adev->active_input->usecase); } @@ -653,7 +654,9 @@ int select_devices(struct audio_device *adev, out_snd_device = SND_DEVICE_NONE; if (in_snd_device == SND_DEVICE_NONE) { audio_devices_t out_device = AUDIO_DEVICE_NONE; - if (adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION) { + if (adev->active_input && + (adev->active_input->source == AUDIO_SOURCE_VOICE_COMMUNICATION || + adev->mode == AUDIO_MODE_IN_COMMUNICATION)) { platform_set_echo_reference(adev, false, AUDIO_DEVICE_NONE); if (usecase->id == USECASE_AUDIO_RECORD_AFE_PROXY) { out_device = AUDIO_DEVICE_OUT_TELEPHONY_TX; @@ -2058,7 +2061,8 @@ static int add_remove_audio_effect(const struct audio_stream *stream, lock_input_stream(in); pthread_mutex_lock(&in->dev->lock); - if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) && + if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION || + adev->mode == AUDIO_MODE_IN_COMMUNICATION) && in->enable_aec != enable && (memcmp(&desc.type, FX_IID_AEC, sizeof(effect_uuid_t)) == 0)) { in->enable_aec = enable; diff --git a/hal/msm8960/platform.c b/hal/msm8960/platform.c index c78d9434..0ffe8a98 100644 --- a/hal/msm8960/platform.c +++ b/hal/msm8960/platform.c @@ -794,7 +794,8 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d snd_device = SND_DEVICE_IN_VOICE_REC_MIC; } } - } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) { + } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION || + mode == AUDIO_MODE_IN_COMMUNICATION) { if (out_device & AUDIO_DEVICE_OUT_SPEAKER) in_device = AUDIO_DEVICE_IN_BACK_MIC; if (adev->active_input) { diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c index 66da2498..c856bb0a 100644 --- a/hal/msm8974/platform.c +++ b/hal/msm8974/platform.c @@ -1940,7 +1940,8 @@ snd_device_t platform_get_input_snd_device(void *platform, audio_devices_t out_d } else if (in_device & AUDIO_DEVICE_IN_WIRED_HEADSET) { snd_device = SND_DEVICE_IN_VOICE_REC_HEADSET_MIC; } - } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION) { + } else if (source == AUDIO_SOURCE_VOICE_COMMUNICATION || + mode == AUDIO_MODE_IN_COMMUNICATION) { if (out_device & (AUDIO_DEVICE_OUT_SPEAKER | AUDIO_DEVICE_OUT_SPEAKER_SAFE)) in_device = AUDIO_DEVICE_IN_BACK_MIC; if (adev->active_input) { |