diff --git a/api/audio/echo_canceller3_config.h b/api/audio/echo_canceller3_config.h index a142d52dd5..f4ba8e9a8e 100644 --- a/api/audio/echo_canceller3_config.h +++ b/api/audio/echo_canceller3_config.h @@ -58,6 +58,7 @@ struct EchoCanceller3Config { size_t config_change_duration_blocks = 250; float initial_state_seconds = 2.5f; bool conservative_initial_phase = false; + bool enable_shadow_filter_output_usage = true; } filter; struct Erle { diff --git a/modules/audio_processing/aec3/echo_remover.cc b/modules/audio_processing/aec3/echo_remover.cc index e52bc62586..9b6677ea4b 100644 --- a/modules/audio_processing/aec3/echo_remover.cc +++ b/modules/audio_processing/aec3/echo_remover.cc @@ -162,7 +162,9 @@ EchoRemoverImpl::EchoRemoverImpl(const EchoCanceller3Config& config, new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))), optimization_(DetectOptimization()), sample_rate_hz_(sample_rate_hz), - use_shadow_filter_output_(UseShadowFilterOutput()), + use_shadow_filter_output_( + UseShadowFilterOutput() && + config_.filter.enable_shadow_filter_output_usage), use_smooth_signal_transitions_(UseSmoothSignalTransitions()), subtractor_(config, data_dumper_.get(), optimization_), suppression_gain_(config_, optimization_, sample_rate_hz), diff --git a/modules/audio_processing/test/audio_processing_simulator.cc b/modules/audio_processing/test/audio_processing_simulator.cc index 7ea7660de4..5e092ff9c4 100644 --- a/modules/audio_processing/test/audio_processing_simulator.cc +++ b/modules/audio_processing/test/audio_processing_simulator.cc @@ -235,6 +235,8 @@ class Aec3ParametersParser { &cfg.filter.initial_state_seconds); ReadParam(section, "conservative_initial_phase", &cfg.filter.conservative_initial_phase); + ReadParam(section, "enable_shadow_filter_output_usage", + &cfg.filter.enable_shadow_filter_output_usage); } if (rtc::GetValueFromJsonObject(root, "erle", §ion)) {