diff options
author | Rios Kao <rioskao@google.com> | 2019-07-11 16:56:37 -0700 |
---|---|---|
committer | Rios Kao <rioskao@google.com> | 2019-07-17 11:46:08 -0700 |
commit | 4620ced9eb0d1536cecde63d1e0e3ff9ee90ece7 (patch) | |
tree | 98cc22b631db235f7f7bb55c9f34e2ec02010656 | |
parent | e25f90ddc5a18519e946e686791e9fd21c0eb3e1 (diff) | |
download | android_hardware_knowles_athletico_sound_trigger_hal-4620ced9eb0d1536cecde63d1e0e3ff9ee90ece7.tar.gz android_hardware_knowles_athletico_sound_trigger_hal-4620ced9eb0d1536cecde63d1e0e3ff9ee90ece7.tar.bz2 android_hardware_knowles_athletico_sound_trigger_hal-4620ced9eb0d1536cecde63d1e0e3ff9ee90ece7.zip |
sthal: refine bargein sequence
note: In old sequence, strm will process a little bit faster than plugin enabling.
That randomly caused the incoming frame is not aligned for AEC algorithm.
Test: stress test AEC sequence.
Bug: 136098551
Change-Id: I760d28d611aadf0ec81d2cfa697f9cbfc63dd64c
-rw-r--r-- | sound_trigger_hw_iaxxx.c | 142 |
1 files changed, 72 insertions, 70 deletions
diff --git a/sound_trigger_hw_iaxxx.c b/sound_trigger_hw_iaxxx.c index 2898f8d..4a88600 100644 --- a/sound_trigger_hw_iaxxx.c +++ b/sound_trigger_hw_iaxxx.c @@ -1050,24 +1050,6 @@ static int async_setup_aec(struct knowles_sound_trigger_device *stdev) ALOGE("Failed to disable mic route with INT OSC"); goto exit; } - ret = enable_mic_route(stdev->route_hdl, true, - EXTERNAL_OSCILLATOR); - if (ret != 0) { - ALOGE("Failed to enable mic route with EXT OSC"); - goto exit; - } - ret = enable_amp_ref_route(stdev->route_hdl, true, STRM_16K); - if (ret != 0) { - ALOGE("Failed to enable amp-ref route"); - goto exit; - } - } else { - // main mic is turned by media recording - ret = enable_amp_ref_route(stdev->route_hdl, true, STRM_48K); - if (ret != 0) { - ALOGE("Failed to enable amp-ref route"); - goto exit; - } } ret = setup_src_plugin(stdev->odsp_hdl, SRC_AMP_REF); if (ret != 0) { @@ -1090,6 +1072,27 @@ static int async_setup_aec(struct knowles_sound_trigger_device *stdev) ALOGE("Failed to enable buffer route"); goto exit; } + + if (is_mic_controlled_by_audhal(stdev) == false) { + ret = enable_amp_ref_route(stdev->route_hdl, true, STRM_16K); + if (ret != 0) { + ALOGE("Failed to enable amp-ref route"); + goto exit; + } + ret = enable_mic_route(stdev->route_hdl, true, + EXTERNAL_OSCILLATOR); + if (ret != 0) { + ALOGE("Failed to enable mic route with EXT OSC"); + goto exit; + } + } else { + // main mic is turned by media recording + ret = enable_amp_ref_route(stdev->route_hdl, true, STRM_48K); + if (ret != 0) { + ALOGE("Failed to enable amp-ref route"); + goto exit; + } + } stdev->is_bargein_route_enabled = true; if (stdev->hotword_buffer_enable) { @@ -1175,13 +1178,6 @@ static int handle_input_source(struct knowles_sound_trigger_device *stdev, ALOGE("Fail to setup src Package"); goto exit; } - if (is_mic_controlled_by_audhal(stdev) == false) { - err = enable_mic_route(stdev->route_hdl, true, ct); - if (err != 0) { - ALOGE("Failed to enable mic route"); - goto exit; - } - } err = setup_src_plugin(stdev->odsp_hdl, SRC_MIC); if (err != 0) { ALOGE("Failed to load SRC package"); @@ -1192,17 +1188,9 @@ static int handle_input_source(struct knowles_sound_trigger_device *stdev, ALOGE("Failed to enable SRC-mic route"); goto exit; } - - stdev->is_mic_route_enabled = true; } if (stdev->is_music_playing == true && stdev->is_bargein_route_enabled == false) { - - err = enable_amp_ref_route(stdev->route_hdl, true, strmt); - if (err != 0) { - ALOGE("Failed to amp-ref route"); - goto exit; - } err = setup_src_plugin(stdev->odsp_hdl, SRC_AMP_REF); if (err != 0) { ALOGE("Failed to load SRC-amp package"); @@ -1227,8 +1215,23 @@ static int handle_input_source(struct knowles_sound_trigger_device *stdev, ALOGE("Failed to enable buffer route"); goto exit; } + err = enable_amp_ref_route(stdev->route_hdl, true, strmt); + if (err != 0) { + ALOGE("Failed to amp-ref route"); + goto exit; + } stdev->is_bargein_route_enabled = true; } + if (stdev->is_mic_route_enabled == false) { + if (is_mic_controlled_by_audhal(stdev) == false) { + err = enable_mic_route(stdev->route_hdl, true, ct); + if (err != 0) { + ALOGE("Failed to enable mic route"); + goto exit; + } + } + stdev->is_mic_route_enabled = true; + } } else { if (!is_any_model_active(stdev)) { ALOGD("None of keywords are active"); @@ -1513,7 +1516,7 @@ static int restart_recognition(struct knowles_sound_trigger_device *stdev) } err = enable_src_route(stdev->route_hdl, false, SRC_AMP_REF); if (err != 0) { - ALOGE("Failed to tear SRC-mic route"); + ALOGE("Failed to tear SRC-amp route"); } err = enable_bargein_route(stdev->route_hdl, false); if (err != 0) { @@ -1544,37 +1547,35 @@ static int restart_recognition(struct knowles_sound_trigger_device *stdev) * If sound trigger recording isn't active, then we don't need to * recover src package. */ - if (stdev->is_mic_route_enabled == true) { - if (is_mic_controlled_by_audhal(stdev) == false) { - err = enable_mic_route(stdev->route_hdl, false, ct); - if (err != 0) { - ALOGE("failed to tear mic route"); - } - err = enable_mic_route(stdev->route_hdl, true, ct); - if (err != 0) { - ALOGE("failed to restart mic route"); - } + if (stdev->is_music_playing == true && + stdev->is_bargein_route_enabled == true) { + if (is_mic_controlled_by_audhal(stdev) == true) { + strmt = STRM_48K; } - - // recover src package if sound trigger recording is active - err = setup_src_plugin(stdev->odsp_hdl, SRC_MIC); + err = setup_src_plugin(stdev->odsp_hdl, SRC_AMP_REF); if (err != 0) { ALOGE("failed to load SRC package"); } - err = enable_src_route(stdev->route_hdl, false, SRC_MIC); + err = enable_src_route(stdev->route_hdl, false, SRC_AMP_REF); if (err != 0) { - ALOGE("Failed to tear SRC-mic route"); + ALOGE("Failed to tear SRC-amp route"); } - err = enable_src_route(stdev->route_hdl, true, SRC_MIC); + err = enable_src_route(stdev->route_hdl, true, SRC_AMP_REF); if (err != 0) { - ALOGE("Failed to restart SRC-mic route"); + ALOGE("Failed to restart SRC-amp route"); } - } - if (stdev->is_music_playing == true && - stdev->is_bargein_route_enabled == true) { - if (is_mic_controlled_by_audhal(stdev) == true) { - strmt = STRM_48K; + err = setup_aec_package(stdev->odsp_hdl); + if (err != 0) { + ALOGE("Failed to restart AEC package"); + } + err = enable_bargein_route(stdev->route_hdl, false); + if (err != 0) { + ALOGE("Failed to tear bargein route"); + } + err = enable_bargein_route(stdev->route_hdl, true); + if (err != 0) { + ALOGE("Failed to restart bargein route"); } err = enable_amp_ref_route(stdev->route_hdl, false, strmt); if (err != 0) { @@ -1584,31 +1585,32 @@ static int restart_recognition(struct knowles_sound_trigger_device *stdev) if (err != 0) { ALOGE("Failed to restart amp-ref route"); } + } - err = setup_src_plugin(stdev->odsp_hdl, SRC_AMP_REF); + if (stdev->is_mic_route_enabled == true) { + // recover src package if sound trigger recording is active + err = setup_src_plugin(stdev->odsp_hdl, SRC_MIC); if (err != 0) { ALOGE("failed to load SRC package"); } - err = enable_src_route(stdev->route_hdl, false, SRC_AMP_REF); + err = enable_src_route(stdev->route_hdl, false, SRC_MIC); if (err != 0) { ALOGE("Failed to tear SRC-mic route"); } - err = enable_src_route(stdev->route_hdl, true, SRC_AMP_REF); + err = enable_src_route(stdev->route_hdl, true, SRC_MIC); if (err != 0) { ALOGE("Failed to restart SRC-mic route"); } - err = setup_aec_package(stdev->odsp_hdl); - if (err != 0) { - ALOGE("Failed to restart AEC package"); - } - err = enable_bargein_route(stdev->route_hdl, false); - if (err != 0) { - ALOGE("Failed to tear bargein route"); - } - err = enable_bargein_route(stdev->route_hdl, true); - if (err != 0) { - ALOGE("Failed to restart bargein route"); + if (is_mic_controlled_by_audhal(stdev) == false) { + err = enable_mic_route(stdev->route_hdl, false, ct); + if (err != 0) { + ALOGE("failed to tear mic route"); + } + err = enable_mic_route(stdev->route_hdl, true, ct); + if (err != 0) { + ALOGE("failed to restart mic route"); + } } } |