summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRios Kao <rioskao@google.com>2019-07-11 16:56:37 -0700
committerRios Kao <rioskao@google.com>2019-07-17 11:46:08 -0700
commit4620ced9eb0d1536cecde63d1e0e3ff9ee90ece7 (patch)
tree98cc22b631db235f7f7bb55c9f34e2ec02010656
parente25f90ddc5a18519e946e686791e9fd21c0eb3e1 (diff)
downloadandroid_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.c142
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");
+ }
}
}