audio: Restart the voice call on device change

When we change the device during a phone call we need to completely
restart it. This is required by the modem.

Change-Id: I902c78bf50dfb5dc3da51fca0fb862f872df86ca
tirimbino
Andreas Schneider 8 years ago committed by Christopher N. Hesse
parent 310d1999e5
commit e9a44a2d55
  1. 10
      audio/audio_hw.c
  2. 4
      audio/voice.c

@ -2777,9 +2777,17 @@ static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
(out == adev->primary_output)) { (out == adev->primary_output)) {
/* Turn on bluetooth if needed */ /* Turn on bluetooth if needed */
if ((out->devices & AUDIO_DEVICE_OUT_ALL_SCO) && !bt_sco_active) { if ((out->devices & AUDIO_DEVICE_OUT_ALL_SCO) && !bt_sco_active) {
select_devices(adev, USECASE_VOICE_CALL);
start_voice_session_bt_sco(adev->voice.session); start_voice_session_bt_sco(adev->voice.session);
} else {
/*
* When we select different devices we need to restart the
* voice call. The modem closes the stream on its end and
* we do not get any output.
*/
stop_voice_call(adev);
start_voice_call(adev);
} }
select_devices(adev, USECASE_VOICE_CALL);
} }
} }

@ -365,6 +365,10 @@ static void voice_session_wb_amr_callback(void *data, int wb_amr_type)
/* TODO Handle wb_amr_type=2 */ /* TODO Handle wb_amr_type=2 */
/*
* We need stop the PCM and start with the
* wide band pcm_config.
*/
stop_voice_call(adev); stop_voice_call(adev);
start_voice_call(adev); start_voice_call(adev);
} }

Loading…
Cancel
Save