diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index 3e49c0cb76..97a8379452 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -1808,7 +1808,12 @@ void AudioProcessingImpl::InitializeTransient() { } void AudioProcessingImpl::InitializeHighPassFilter() { - if (submodule_states_.HighPassFilteringRequired()) { + bool high_pass_filter_needed_by_aec = + config_.echo_canceller.enabled && + config_.echo_canceller.enforce_high_pass_filtering && + !config_.echo_canceller.mobile_mode; + if (submodule_states_.HighPassFilteringRequired() || + high_pass_filter_needed_by_aec) { submodules_.high_pass_filter.reset(new HighPassFilter(num_proc_channels())); } else { submodules_.high_pass_filter.reset(); diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h index 8b0dce982b..2ec336719c 100644 --- a/modules/audio_processing/include/audio_processing.h +++ b/modules/audio_processing/include/audio_processing.h @@ -283,6 +283,8 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface { // Recommended not to use. Will be removed in the future. bool use_legacy_aec = false; bool export_linear_aec_output = false; + // Enforce the highpass filter to be on (has no effect for the mobile + // mode). bool enforce_high_pass_filtering = true; } echo_canceller; diff --git a/modules/audio_processing/test/debug_dump_test.cc b/modules/audio_processing/test/debug_dump_test.cc index b769a6659a..956109148c 100644 --- a/modules/audio_processing/test/debug_dump_test.cc +++ b/modules/audio_processing/test/debug_dump_test.cc @@ -346,7 +346,7 @@ TEST_F(DebugDumpTest, ToggleAec) { generator.StartRecording(); generator.Process(100); - apm_config.echo_canceller.enabled = true; + apm_config.echo_canceller.enabled = false; generator.apm()->ApplyConfig(apm_config); generator.Process(100);