AEC3: Ensure that the high-pass filter effect is on when AEC3 is active

This CL ensures that the high-pass filter is on whenever the echo
controller is on. This is important as the echo controller code assumes
that the external high-pass filter is active.

The CL also corrects the ToggleAec unit test (which started failing
after this code change).

Bug: webrtc:11159,chromium:1030179
Change-Id: Ie29db74bf3de6279a08564398d32d67d5e1569db
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161222
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29979}
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index 3e49c0c..6bd03a5 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -247,7 +247,8 @@
 
 bool AudioProcessingImpl::SubmoduleStates::HighPassFilteringRequired() const {
   return high_pass_filter_enabled_ || echo_canceller_enabled_ ||
-         mobile_echo_controller_enabled_ || noise_suppressor_enabled_;
+         mobile_echo_controller_enabled_ || noise_suppressor_enabled_ ||
+         echo_controller_enabled_;
 }
 
 AudioProcessingBuilder::AudioProcessingBuilder() = default;
@@ -513,7 +514,7 @@
     submodules_.agc_manager->SetCaptureMuted(capture_.output_will_be_muted);
   }
   InitializeTransient();
-  InitializeHighPassFilter();
+  InitializeHighPassFilter(false);
   InitializeVoiceDetector();
   InitializeResidualEchoDetector();
   InitializeEchoController();
@@ -676,7 +677,8 @@
     InitializeNoiseSuppressor();
   }
 
-  InitializeHighPassFilter();
+  InitializeHighPassFilter(config_.echo_canceller.enabled &&
+                           !config.echo_canceller.mobile_mode);
 
   if (agc1_config_changed) {
     ApplyAgc1Config(config_.gain_controller1);
@@ -1788,7 +1790,7 @@
 
 bool AudioProcessingImpl::UpdateActiveSubmoduleStates() {
   return submodule_states_.Update(
-      config_.high_pass_filter.enabled, !!submodules_.echo_cancellation,
+      config_.high_pass_filter.enabled, config_.echo_canceller.enabled,
       !!submodules_.echo_control_mobile, config_.residual_echo_detector.enabled,
       !!submodules_.legacy_noise_suppressor || !!submodules_.noise_suppressor,
       submodules_.gain_control->is_enabled(), config_.gain_controller2.enabled,
@@ -1807,8 +1809,8 @@
   }
 }
 
-void AudioProcessingImpl::InitializeHighPassFilter() {
-  if (submodule_states_.HighPassFilteringRequired()) {
+void AudioProcessingImpl::InitializeHighPassFilter(bool force_activation) {
+  if (force_activation || submodule_states_.HighPassFilteringRequired()) {
     submodules_.high_pass_filter.reset(new HighPassFilter(num_proc_channels()));
   } else {
     submodules_.high_pass_filter.reset();
diff --git a/modules/audio_processing/audio_processing_impl.h b/modules/audio_processing/audio_processing_impl.h
index e5d0573..f83e550 100644
--- a/modules/audio_processing/audio_processing_impl.h
+++ b/modules/audio_processing/audio_processing_impl.h
@@ -232,7 +232,8 @@
       RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
   void InitializeResidualEchoDetector()
       RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
-  void InitializeHighPassFilter() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
+  void InitializeHighPassFilter(bool force_activation)
+      RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
   void InitializeVoiceDetector() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
   void InitializeEchoController()
       RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
diff --git a/modules/audio_processing/test/debug_dump_test.cc b/modules/audio_processing/test/debug_dump_test.cc
index b769a66..1d3451d 100644
--- a/modules/audio_processing/test/debug_dump_test.cc
+++ b/modules/audio_processing/test/debug_dump_test.cc
@@ -51,8 +51,8 @@
                      bool enable_pre_amplifier);
 
   // Constructor that uses default input files.
-  explicit DebugDumpGenerator(const Config& config,
-                              const AudioProcessing::Config& apm_config);
+  DebugDumpGenerator(const Config& config,
+                     const AudioProcessing::Config& apm_config);
 
   ~DebugDumpGenerator();
 
@@ -346,7 +346,7 @@
   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);