Loading hal/voice.c +1 −0 Original line number Diff line number Diff line Loading @@ -424,6 +424,7 @@ void voice_init(struct audio_device *adev) adev->voice.tty_mode = TTY_MODE_OFF; adev->voice.volume = 1.0f; adev->voice.mic_mute = false; adev->voice.voice_device_set = false; for (i = 0; i < MAX_VOICE_SESSIONS; i++) { adev->voice.session[i].pcm_rx = NULL; adev->voice.session[i].pcm_tx = NULL; Loading hal/voice.h +2 −1 Original line number Diff line number Diff line /* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. * Not a contribution. * * Copyright (C) 2013 The Android Open Source Project Loading Loading @@ -60,6 +60,7 @@ struct voice { int tty_mode; bool mic_mute; float volume; bool voice_device_set; }; enum { Loading hal/voice_extn/voice_extn.c +21 −4 Original line number Diff line number Diff line Loading @@ -143,6 +143,7 @@ static int update_calls(struct audio_device *adev) struct voice_session *session = NULL; int fd = 0; int ret = 0; bool is_in_call = false; ALOGD("%s: enter:", __func__); Loading Loading @@ -202,6 +203,10 @@ static int update_calls(struct audio_device *adev) ALOGE("%s: voice_end_call() failed for usecase: %d\n", __func__, usecase_id); } else { voice_extn_is_in_call(adev, &is_in_call); if (!is_in_call) { adev->voice.voice_device_set = false; } session->state.current = session->state.new; } break; Loading Loading @@ -274,6 +279,7 @@ static int update_call_states(struct audio_device *adev, struct voice_session *session = NULL; int i = 0; bool is_in_call; int no_of_calls_active = 0; for (i = 0; i < MAX_VOICE_SESSIONS; i++) { if (vsid == adev->voice.session[i].vsid) { Loading @@ -282,17 +288,27 @@ static int update_call_states(struct audio_device *adev, } } for (i = 0; i < MAX_VOICE_SESSIONS; i++) { if (CALL_INACTIVE != adev->voice.session[i].state.current) no_of_calls_active++; } /* When there is only one call active, wait for audio policy manager to set * the mode to AUDIO_MODE_NORMAL and trigger routing to end the last call. */ if (no_of_calls_active == 1 && call_state == CALL_INACTIVE) return 0; if (session) { session->state.new = call_state; voice_extn_is_in_call(adev, &is_in_call); ALOGD("%s is_in_call:%d mode:%d\n", __func__, is_in_call, adev->mode); ALOGD("%s is_in_call:%d voice_device_set:%d, mode:%d\n", __func__, is_in_call, adev->voice.voice_device_set, adev->mode); /* Dont start voice call before device routing for voice usescases has * occured, otherwise voice calls will be started unintendedly on * speaker. */ if (is_in_call || (adev->mode == AUDIO_MODE_IN_CALL && adev->primary_output->devices != AUDIO_DEVICE_OUT_SPEAKER)) { if (is_in_call || adev->voice.voice_device_set) { /* Device routing is not triggered for voice calls on the subsequent * subs, Hence update the call states if voice call is already * active on other sub. Loading Loading @@ -377,6 +393,7 @@ int voice_extn_start_call(struct audio_device *adev) * udpated. */ ALOGV("%s: enter:", __func__); adev->voice.voice_device_set = true; return update_calls(adev); } Loading Loading
hal/voice.c +1 −0 Original line number Diff line number Diff line Loading @@ -424,6 +424,7 @@ void voice_init(struct audio_device *adev) adev->voice.tty_mode = TTY_MODE_OFF; adev->voice.volume = 1.0f; adev->voice.mic_mute = false; adev->voice.voice_device_set = false; for (i = 0; i < MAX_VOICE_SESSIONS; i++) { adev->voice.session[i].pcm_rx = NULL; adev->voice.session[i].pcm_tx = NULL; Loading
hal/voice.h +2 −1 Original line number Diff line number Diff line /* * Copyright (c) 2013, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. * Not a contribution. * * Copyright (C) 2013 The Android Open Source Project Loading Loading @@ -60,6 +60,7 @@ struct voice { int tty_mode; bool mic_mute; float volume; bool voice_device_set; }; enum { Loading
hal/voice_extn/voice_extn.c +21 −4 Original line number Diff line number Diff line Loading @@ -143,6 +143,7 @@ static int update_calls(struct audio_device *adev) struct voice_session *session = NULL; int fd = 0; int ret = 0; bool is_in_call = false; ALOGD("%s: enter:", __func__); Loading Loading @@ -202,6 +203,10 @@ static int update_calls(struct audio_device *adev) ALOGE("%s: voice_end_call() failed for usecase: %d\n", __func__, usecase_id); } else { voice_extn_is_in_call(adev, &is_in_call); if (!is_in_call) { adev->voice.voice_device_set = false; } session->state.current = session->state.new; } break; Loading Loading @@ -274,6 +279,7 @@ static int update_call_states(struct audio_device *adev, struct voice_session *session = NULL; int i = 0; bool is_in_call; int no_of_calls_active = 0; for (i = 0; i < MAX_VOICE_SESSIONS; i++) { if (vsid == adev->voice.session[i].vsid) { Loading @@ -282,17 +288,27 @@ static int update_call_states(struct audio_device *adev, } } for (i = 0; i < MAX_VOICE_SESSIONS; i++) { if (CALL_INACTIVE != adev->voice.session[i].state.current) no_of_calls_active++; } /* When there is only one call active, wait for audio policy manager to set * the mode to AUDIO_MODE_NORMAL and trigger routing to end the last call. */ if (no_of_calls_active == 1 && call_state == CALL_INACTIVE) return 0; if (session) { session->state.new = call_state; voice_extn_is_in_call(adev, &is_in_call); ALOGD("%s is_in_call:%d mode:%d\n", __func__, is_in_call, adev->mode); ALOGD("%s is_in_call:%d voice_device_set:%d, mode:%d\n", __func__, is_in_call, adev->voice.voice_device_set, adev->mode); /* Dont start voice call before device routing for voice usescases has * occured, otherwise voice calls will be started unintendedly on * speaker. */ if (is_in_call || (adev->mode == AUDIO_MODE_IN_CALL && adev->primary_output->devices != AUDIO_DEVICE_OUT_SPEAKER)) { if (is_in_call || adev->voice.voice_device_set) { /* Device routing is not triggered for voice calls on the subsequent * subs, Hence update the call states if voice call is already * active on other sub. Loading Loading @@ -377,6 +393,7 @@ int voice_extn_start_call(struct audio_device *adev) * udpated. */ ALOGV("%s: enter:", __func__); adev->voice.voice_device_set = true; return update_calls(adev); } Loading