Further AGC refactoring in preparation for adding multichannel support

Bug: webrtc:10859
Change-Id: If7d58a615a365a0b0f7b49e0cc2392b9bd5e2a0c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159028
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29736}
diff --git a/modules/audio_processing/agc/agc_manager_direct.cc b/modules/audio_processing/agc/agc_manager_direct.cc
index 9551d0b..13b902f 100644
--- a/modules/audio_processing/agc/agc_manager_direct.cc
+++ b/modules/audio_processing/agc/agc_manager_direct.cc
@@ -163,46 +163,28 @@
 
 }  // namespace
 
-AgcManagerDirect::AgcManagerDirect(GainControl* gctrl,
-                                   VolumeCallbacks* volume_callbacks,
-                                   int startup_min_level,
-                                   int clipped_level_min,
-                                   bool use_agc2_level_estimation,
-                                   bool disable_digital_adaptive)
-    : AgcManagerDirect(use_agc2_level_estimation ? nullptr : new Agc(),
-                       gctrl,
-                       volume_callbacks,
-                       startup_min_level,
-                       clipped_level_min,
-                       use_agc2_level_estimation,
-                       disable_digital_adaptive) {
-  RTC_DCHECK(agc_);
-}
-
 AgcManagerDirect::AgcManagerDirect(Agc* agc,
                                    GainControl* gctrl,
                                    VolumeCallbacks* volume_callbacks,
                                    int startup_min_level,
                                    int clipped_level_min)
-    : AgcManagerDirect(agc,
-                       gctrl,
+    : AgcManagerDirect(gctrl,
                        volume_callbacks,
                        startup_min_level,
                        clipped_level_min,
                        false,
                        false) {
   RTC_DCHECK(agc_);
+  agc_.reset(agc);
 }
 
-AgcManagerDirect::AgcManagerDirect(Agc* agc,
-                                   GainControl* gctrl,
+AgcManagerDirect::AgcManagerDirect(GainControl* gctrl,
                                    VolumeCallbacks* volume_callbacks,
                                    int startup_min_level,
                                    int clipped_level_min,
                                    bool use_agc2_level_estimation,
                                    bool disable_digital_adaptive)
     : data_dumper_(new ApmDataDumper(instance_counter_)),
-      agc_(agc),
       gctrl_(gctrl),
       volume_callbacks_(volume_callbacks),
       frames_since_clipped_(kClippedWaitFrames),
@@ -216,16 +198,14 @@
       check_volume_on_next_process_(true),  // Check at startup.
       startup_(true),
       min_mic_level_(GetMinMicLevel()),
-      use_agc2_level_estimation_(use_agc2_level_estimation),
       disable_digital_adaptive_(disable_digital_adaptive),
       startup_min_level_(ClampLevel(startup_min_level, min_mic_level_)),
       clipped_level_min_(clipped_level_min) {
   instance_counter_++;
-  if (use_agc2_level_estimation_) {
-    RTC_DCHECK(!agc);
-    agc_.reset(new AdaptiveModeLevelEstimatorAgc(data_dumper_.get()));
+  if (use_agc2_level_estimation) {
+    agc_ = std::make_unique<AdaptiveModeLevelEstimatorAgc>(data_dumper_.get());
   } else {
-    RTC_DCHECK(agc);
+    agc_ = std::make_unique<Agc>();
   }
 }
 
diff --git a/modules/audio_processing/agc/agc_manager_direct.h b/modules/audio_processing/agc/agc_manager_direct.h
index 34024be..505ad15 100644
--- a/modules/audio_processing/agc/agc_manager_direct.h
+++ b/modules/audio_processing/agc/agc_manager_direct.h
@@ -84,15 +84,6 @@
                    int startup_min_level,
                    int clipped_level_min);
 
-  // Most general c-tor.
-  AgcManagerDirect(Agc* agc,
-                   GainControl* gctrl,
-                   VolumeCallbacks* volume_callbacks,
-                   int startup_min_level,
-                   int clipped_level_min,
-                   bool use_agc2_level_estimation,
-                   bool disable_digital_adaptive);
-
   int min_mic_level() const { return min_mic_level_; }
   int startup_min_level() const { return startup_min_level_; }
 
@@ -127,7 +118,6 @@
   bool check_volume_on_next_process_;
   bool startup_;
   const int min_mic_level_;
-  const bool use_agc2_level_estimation_;
   const bool disable_digital_adaptive_;
   int startup_min_level_;
   const int clipped_level_min_;
diff --git a/modules/audio_processing/agc/agc_manager_direct_unittest.cc b/modules/audio_processing/agc/agc_manager_direct_unittest.cc
index 7c261d4..bc8309e 100644
--- a/modules/audio_processing/agc/agc_manager_direct_unittest.cc
+++ b/modules/audio_processing/agc/agc_manager_direct_unittest.cc
@@ -695,8 +695,7 @@
   MockGainControl gctrl;
   TestVolumeCallbacks volume;
 
-  AgcManagerDirect manager(agc.release(), &gctrl, &volume, kInitialVolume,
-                           kClippedMin,
+  AgcManagerDirect manager(&gctrl, &volume, kInitialVolume, kClippedMin,
                            /* use agc2 level estimation */ false,
                            /* disable digital adaptive */ true);
 
@@ -710,14 +709,14 @@
 
 TEST(AgcManagerDirectStandaloneTest, AgcMinMicLevelExperiment) {
   auto agc_man = std::unique_ptr<AgcManagerDirect>(new AgcManagerDirect(
-      nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+      nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
   EXPECT_EQ(agc_man->min_mic_level(), kMinMicLevel);
   EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
   {
     test::ScopedFieldTrials field_trial(
         "WebRTC-Audio-AgcMinMicLevelExperiment/Disabled/");
-    agc_man.reset(new AgcManagerDirect(
-        nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+    agc_man.reset(new AgcManagerDirect(nullptr, nullptr, kInitialVolume,
+                                       kClippedMin, true, true));
     EXPECT_EQ(agc_man->min_mic_level(), kMinMicLevel);
     EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
   }
@@ -725,16 +724,16 @@
     // Valid range of field-trial parameter is [0,255].
     test::ScopedFieldTrials field_trial(
         "WebRTC-Audio-AgcMinMicLevelExperiment/Enabled-256/");
-    agc_man.reset(new AgcManagerDirect(
-        nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+    agc_man.reset(new AgcManagerDirect(nullptr, nullptr, kInitialVolume,
+                                       kClippedMin, true, true));
     EXPECT_EQ(agc_man->min_mic_level(), kMinMicLevel);
     EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
   }
   {
     test::ScopedFieldTrials field_trial(
         "WebRTC-Audio-AgcMinMicLevelExperiment/Enabled--1/");
-    agc_man.reset(new AgcManagerDirect(
-        nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+    agc_man.reset(new AgcManagerDirect(nullptr, nullptr, kInitialVolume,
+                                       kClippedMin, true, true));
     EXPECT_EQ(agc_man->min_mic_level(), kMinMicLevel);
     EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
   }
@@ -744,8 +743,8 @@
     // be changed.
     test::ScopedFieldTrials field_trial(
         "WebRTC-Audio-AgcMinMicLevelExperiment/Enabled-50/");
-    agc_man.reset(new AgcManagerDirect(
-        nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+    agc_man.reset(new AgcManagerDirect(nullptr, nullptr, kInitialVolume,
+                                       kClippedMin, true, true));
     EXPECT_EQ(agc_man->min_mic_level(), 50);
     EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
   }
@@ -755,8 +754,8 @@
     // level set by the experiment.
     test::ScopedFieldTrials field_trial(
         "WebRTC-Audio-AgcMinMicLevelExperiment/Enabled-50/");
-    agc_man.reset(new AgcManagerDirect(nullptr, nullptr, nullptr, 30,
-                                       kClippedMin, true, true));
+    agc_man.reset(
+        new AgcManagerDirect(nullptr, nullptr, 30, kClippedMin, true, true));
     EXPECT_EQ(agc_man->min_mic_level(), 50);
     EXPECT_EQ(agc_man->startup_min_level(), 50);
   }
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index c718838..abfcc05 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -330,12 +330,10 @@
                  /* enabled= */ false,
                  /* enabled_agc2_level_estimator= */ false,
                  /* digital_adaptive_disabled= */ false,
-                 /* analyze_before_aec= */ false,
 #else
                  config.Get<ExperimentalAgc>().enabled,
                  config.Get<ExperimentalAgc>().enabled_agc2_level_estimator,
                  config.Get<ExperimentalAgc>().digital_adaptive_disabled,
-                 config.Get<ExperimentalAgc>().analyze_before_aec,
 #endif
                  !field_trial::IsEnabled(
                      "WebRTC-ApmExperimentalMultiChannelRenderKillSwitch"),
@@ -1288,13 +1286,6 @@
     submodules_.agc_manager->AnalyzePreProcess(
         capture_buffer->channels_const(), capture_buffer->num_channels(),
         capture_nonlocked_.capture_processing_format.num_frames());
-
-    if (constants_.use_experimental_agc_process_before_aec) {
-      submodules_.agc_manager->Process(
-          capture_buffer->channels_const()[0],
-          capture_nonlocked_.capture_processing_format.num_frames(),
-          capture_nonlocked_.capture_processing_format.sample_rate_hz());
-    }
   }
 
   if (submodule_states_.CaptureMultiBandSubModulesActive() &&
@@ -1379,8 +1370,7 @@
   }
 
   if (constants_.use_experimental_agc &&
-      submodules_.gain_control->is_enabled() &&
-      !constants_.use_experimental_agc_process_before_aec) {
+      submodules_.gain_control->is_enabled()) {
     submodules_.agc_manager->Process(
         capture_buffer->split_bands_const_f(0)[kBand0To8kHz],
         capture_buffer->num_frames_per_band(), capture_nonlocked_.split_rate);
diff --git a/modules/audio_processing/audio_processing_impl.h b/modules/audio_processing/audio_processing_impl.h
index 3e1b466..e13034f 100644
--- a/modules/audio_processing/audio_processing_impl.h
+++ b/modules/audio_processing/audio_processing_impl.h
@@ -380,7 +380,6 @@
                  bool use_experimental_agc,
                  bool use_experimental_agc_agc2_level_estimation,
                  bool use_experimental_agc_agc2_digital_adaptive,
-                 bool use_experimental_agc_process_before_aec,
                  bool experimental_multi_channel_render_support,
                  bool experimental_multi_channel_capture_support)
         : agc_startup_min_volume(agc_startup_min_volume),
@@ -390,8 +389,6 @@
               use_experimental_agc_agc2_level_estimation),
           use_experimental_agc_agc2_digital_adaptive(
               use_experimental_agc_agc2_digital_adaptive),
-          use_experimental_agc_process_before_aec(
-              use_experimental_agc_process_before_aec),
           experimental_multi_channel_render_support(
               experimental_multi_channel_render_support),
           experimental_multi_channel_capture_support(
@@ -401,7 +398,6 @@
     bool use_experimental_agc;
     bool use_experimental_agc_agc2_level_estimation;
     bool use_experimental_agc_agc2_digital_adaptive;
-    bool use_experimental_agc_process_before_aec;
     bool experimental_multi_channel_render_support;
     bool experimental_multi_channel_capture_support;
   } constants_;
diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h
index 52fbaba..80474f8 100644
--- a/modules/audio_processing/include/audio_processing.h
+++ b/modules/audio_processing/include/audio_processing.h
@@ -114,13 +114,18 @@
   explicit ExperimentalAgc(bool enabled) : enabled(enabled) {}
   ExperimentalAgc(bool enabled,
                   bool enabled_agc2_level_estimator,
+                  bool digital_adaptive_disabled)
+      : enabled(enabled),
+        enabled_agc2_level_estimator(enabled_agc2_level_estimator),
+        digital_adaptive_disabled(digital_adaptive_disabled) {}
+  // Deprecated constructor: will be removed.
+  ExperimentalAgc(bool enabled,
+                  bool enabled_agc2_level_estimator,
                   bool digital_adaptive_disabled,
                   bool analyze_before_aec)
       : enabled(enabled),
         enabled_agc2_level_estimator(enabled_agc2_level_estimator),
-        digital_adaptive_disabled(digital_adaptive_disabled),
-        analyze_before_aec(analyze_before_aec) {}
-
+        digital_adaptive_disabled(digital_adaptive_disabled) {}
   ExperimentalAgc(bool enabled, int startup_min_volume)
       : enabled(enabled), startup_min_volume(startup_min_volume) {}
   ExperimentalAgc(bool enabled, int startup_min_volume, int clipped_level_min)
@@ -134,9 +139,6 @@
   int clipped_level_min = kClippedLevelMin;
   bool enabled_agc2_level_estimator = false;
   bool digital_adaptive_disabled = false;
-  // 'analyze_before_aec' is an experimental flag. It is intended to be removed
-  // at some point.
-  bool analyze_before_aec = false;
 };
 
 // Use to enable experimental noise suppression. It can be set in the