Removes usage of AGC APIs in the ADM.

Bug: webrtc:8598
Change-Id: I5ebc2e3549eba039797e40d2f8aea48341f3fe46
Reviewed-on: https://webrtc-review.googlesource.com/31520
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Commit-Queue: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21254}
diff --git a/media/engine/apm_helpers.cc b/media/engine/apm_helpers.cc
index 5c12faa..eca3e20 100644
--- a/media/engine/apm_helpers.cc
+++ b/media/engine/apm_helpers.cc
@@ -64,10 +64,8 @@
 }
 
 void SetAgcStatus(AudioProcessing* apm,
-                  AudioDeviceModule* adm,
                   bool enable) {
   RTC_DCHECK(apm);
-  RTC_DCHECK(adm);
 #if defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
   GainControl::Mode agc_mode = GainControl::kFixedDigital;
 #else
@@ -82,11 +80,6 @@
     RTC_LOG(LS_ERROR) << "Failed to enable/disable AGC: " << enable;
     return;
   }
-  // Set AGC state in the ADM when adaptive AGC mode has been selected.
-  if (adm->SetAGC(enable && agc_mode == GainControl::kAdaptiveAnalog) != 0) {
-    RTC_LOG(LS_ERROR) << "Failed to set AGC mode in ADM: " << enable;
-    return;
-  }
   RTC_LOG(LS_INFO) << "AGC set to " << enable << " with mode " << agc_mode;
 }
 
diff --git a/media/engine/apm_helpers.h b/media/engine/apm_helpers.h
index caa485f..42465fce 100644
--- a/media/engine/apm_helpers.h
+++ b/media/engine/apm_helpers.h
@@ -16,7 +16,6 @@
 namespace webrtc {
 
 class AudioProcessing;
-class AudioDeviceModule;
 
 enum EcModes {
   kEcConference,     // Conferencing default (aggressive AEC).
@@ -36,7 +35,6 @@
 void SetAgcConfig(AudioProcessing* apm,
                   const AgcConfig& config);
 void SetAgcStatus(AudioProcessing* apm,
-                  AudioDeviceModule* adm,
                   bool enable);
 void SetEcStatus(AudioProcessing* apm,
                  bool enable,
diff --git a/media/engine/apm_helpers_unittest.cc b/media/engine/apm_helpers_unittest.cc
index c20eb6f..70edce2 100644
--- a/media/engine/apm_helpers_unittest.cc
+++ b/media/engine/apm_helpers_unittest.cc
@@ -39,10 +39,6 @@
 
   const AudioProcessing* apm() const { return apm_.get(); }
 
-  test::MockAudioDeviceModule* adm() {
-    return &mock_audio_device_;
-  }
-
   voe::TransmitMixer* transmit_mixer() {
     return voe_wrapper_.base()->transmit_mixer();
   }
@@ -117,21 +113,18 @@
   TestHelper helper;
   GainControl* gc = helper.apm()->gain_control();
 #if defined(WEBRTC_IOS) || defined(WEBRTC_ANDROID)
-  apm_helpers::SetAgcStatus(helper.apm(), helper.adm(), false);
+  apm_helpers::SetAgcStatus(helper.apm(), false);
   EXPECT_FALSE(gc->is_enabled());
   EXPECT_EQ(GainControl::kFixedDigital, gc->mode());
 
-  apm_helpers::SetAgcStatus(helper.apm(), helper.adm(), true);
+  apm_helpers::SetAgcStatus(helper.apm(), true);
   EXPECT_TRUE(gc->is_enabled());
   EXPECT_EQ(GainControl::kFixedDigital, gc->mode());
 #else
-  EXPECT_CALL(*helper.adm(), SetAGC(false)).WillOnce(testing::Return(0));
-  apm_helpers::SetAgcStatus(helper.apm(), helper.adm(), false);
+  apm_helpers::SetAgcStatus(helper.apm(), false);
   EXPECT_FALSE(gc->is_enabled());
   EXPECT_EQ(GainControl::kAdaptiveAnalog, gc->mode());
-
-  EXPECT_CALL(*helper.adm(), SetAGC(true)).WillOnce(testing::Return(0));
-  apm_helpers::SetAgcStatus(helper.apm(), helper.adm(), true);
+  apm_helpers::SetAgcStatus(helper.apm(), true);
   EXPECT_TRUE(gc->is_enabled());
   EXPECT_EQ(GainControl::kAdaptiveAnalog, gc->mode());
 #endif
diff --git a/media/engine/webrtcvoiceengine.cc b/media/engine/webrtcvoiceengine.cc
index 18cc324..1ebbb0f 100644
--- a/media/engine/webrtcvoiceengine.cc
+++ b/media/engine/webrtcvoiceengine.cc
@@ -485,7 +485,7 @@
             << "Disabling AGC since built-in AGC will be used instead";
       }
     }
-    webrtc::apm_helpers::SetAgcStatus(apm(), adm(), *options.auto_gain_control);
+    webrtc::apm_helpers::SetAgcStatus(apm(), *options.auto_gain_control);
   }
 
   if (options.tx_agc_target_dbov || options.tx_agc_digital_compression_gain ||
diff --git a/media/engine/webrtcvoiceengine_unittest.cc b/media/engine/webrtcvoiceengine_unittest.cc
index b65241f..5546f1b 100644
--- a/media/engine/webrtcvoiceengine_unittest.cc
+++ b/media/engine/webrtcvoiceengine_unittest.cc
@@ -124,7 +124,6 @@
   EXPECT_CALL(*adm, BuiltInAECIsAvailable()).WillOnce(Return(false));
   EXPECT_CALL(*adm, BuiltInAGCIsAvailable()).WillOnce(Return(false));
   EXPECT_CALL(*adm, BuiltInNSIsAvailable()).WillOnce(Return(false));
-  EXPECT_CALL(*adm, SetAGC(true)).WillOnce(Return(0));
 
   // Teardown.
   EXPECT_CALL(*adm, StopPlayout()).WillOnce(Return(0));
@@ -2221,7 +2220,6 @@
   EXPECT_CALL(adm_, BuiltInAGCIsAvailable())
       .Times(1)
       .WillRepeatedly(Return(false));
-  EXPECT_CALL(adm_, SetAGC(true)).Times(1).WillRepeatedly(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).Times(1).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, Enable(true)).Times(1).WillOnce(Return(0));
   send_parameters_.options.tx_agc_target_dbov = 3;
@@ -2768,7 +2766,6 @@
   SetSendParameters(send_parameters_);
 
   // Turn off AGC
-  EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2777,7 +2774,6 @@
   SetSendParameters(send_parameters_);
 
   // Turn AGC back on
-  EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2786,7 +2782,6 @@
   SetSendParameters(send_parameters_);
 
   // Turn off other options (and stereo swapping on).
-  EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2803,7 +2798,6 @@
   EXPECT_FALSE(IsHighPassFilterEnabled());
 
   // Set options again to ensure it has no impact.
-  EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2856,7 +2850,6 @@
   parameters_options_all.options.echo_cancellation = true;
   parameters_options_all.options.auto_gain_control = true;
   parameters_options_all.options.noise_suppression = true;
-  EXPECT_CALL(adm_, SetAGC(true)).Times(2).WillRepeatedly(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).Times(2).WillRepeatedly(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).Times(2).WillRepeatedly(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).Times(2).WillOnce(Return(0));
@@ -2871,7 +2864,6 @@
   // unset NS
   cricket::AudioSendParameters parameters_options_no_ns = send_parameters_;
   parameters_options_no_ns.options.noise_suppression = false;
-  EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2888,7 +2880,6 @@
   // unset AGC
   cricket::AudioSendParameters parameters_options_no_agc = send_parameters_;
   parameters_options_no_agc.options.auto_gain_control = false;
-  EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2901,7 +2892,6 @@
   expected_options.noise_suppression = true;
   EXPECT_EQ(expected_options, channel2->options());
 
-  EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2910,7 +2900,6 @@
   EXPECT_CALL(apm_ns_, Enable(true)).WillOnce(Return(0));
   EXPECT_TRUE(channel_->SetSendParameters(parameters_options_all));
 
-  EXPECT_CALL(adm_, SetAGC(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2919,7 +2908,6 @@
   EXPECT_CALL(apm_ns_, Enable(false)).WillOnce(Return(0));
   channel1->SetSend(true);
 
-  EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
@@ -2933,7 +2921,6 @@
       send_parameters_;
   parameters_options_no_agc_nor_ns.options.auto_gain_control = false;
   parameters_options_no_agc_nor_ns.options.noise_suppression = false;
-  EXPECT_CALL(adm_, SetAGC(false)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, Enable(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_ec_, enable_metrics(true)).WillOnce(Return(0));
   EXPECT_CALL(apm_gc_, set_mode(kDefaultAgcMode)).WillOnce(Return(0));
diff --git a/modules/audio_device/android/audio_device_template.h b/modules/audio_device/android/audio_device_template.h
index 75dbaf3..9fb72bd 100644
--- a/modules/audio_device/android/audio_device_template.h
+++ b/modules/audio_device/android/audio_device_template.h
@@ -215,18 +215,6 @@
 
   bool Recording() const override { return input_.Recording(); }
 
-  int32_t SetAGC(bool enable) override {
-    if (enable) {
-      FATAL() << "Should never be called";
-    }
-    return -1;
-  }
-
-  bool AGC() const override {
-    RTC_LOG(INFO) << __FUNCTION__;
-    return false;
-  }
-
   int32_t InitSpeaker() override {
     RTC_LOG(INFO) << __FUNCTION__;
     return 0;
diff --git a/modules/audio_device/audio_device_data_observer.cc b/modules/audio_device/audio_device_data_observer.cc
index 823fbfe..5f7259d 100644
--- a/modules/audio_device/audio_device_data_observer.cc
+++ b/modules/audio_device/audio_device_data_observer.cc
@@ -165,8 +165,6 @@
   int32_t StartRecording() override { return impl_->StartRecording(); }
   int32_t StopRecording() override { return impl_->StopRecording(); }
   bool Recording() const override { return impl_->Recording(); }
-  int32_t SetAGC(bool enable) override { return impl_->SetAGC(enable); }
-  bool AGC() const override { return impl_->AGC(); }
   int32_t InitSpeaker() override { return impl_->InitSpeaker(); }
   bool SpeakerIsInitialized() const override {
     return impl_->SpeakerIsInitialized();
diff --git a/modules/audio_device/audio_device_generic.h b/modules/audio_device/audio_device_generic.h
index 2cd8874..e7abcb3 100644
--- a/modules/audio_device/audio_device_generic.h
+++ b/modules/audio_device/audio_device_generic.h
@@ -71,10 +71,6 @@
   virtual int32_t StopRecording() = 0;
   virtual bool Recording() const = 0;
 
-  // Microphone Automatic Gain Control (AGC)
-  virtual int32_t SetAGC(bool enable) = 0;
-  virtual bool AGC() const = 0;
-
   // Audio mixer initialization
   virtual int32_t InitSpeaker() = 0;
   virtual bool SpeakerIsInitialized() const = 0;
diff --git a/modules/audio_device/audio_device_impl.cc b/modules/audio_device/audio_device_impl.cc
index f3aceff..ff651d4 100644
--- a/modules/audio_device/audio_device_impl.cc
+++ b/modules/audio_device/audio_device_impl.cc
@@ -568,18 +568,6 @@
   return 0;
 }
 
-int32_t AudioDeviceModuleImpl::SetAGC(bool enable) {
-  RTC_LOG(INFO) << __FUNCTION__ << "(" << enable << ")";
-  CHECKinitialized_();
-  return (audio_device_->SetAGC(enable));
-}
-
-bool AudioDeviceModuleImpl::AGC() const {
-  RTC_LOG(INFO) << __FUNCTION__;
-  CHECKinitialized__BOOL();
-  return audio_device_->AGC();
-}
-
 int32_t AudioDeviceModuleImpl::PlayoutIsAvailable(bool* available) {
   RTC_LOG(INFO) << __FUNCTION__;
   CHECKinitialized_();
diff --git a/modules/audio_device/audio_device_impl.h b/modules/audio_device/audio_device_impl.h
index dce6b0c..9ccb415 100644
--- a/modules/audio_device/audio_device_impl.h
+++ b/modules/audio_device/audio_device_impl.h
@@ -87,10 +87,6 @@
   int32_t StopRecording() override;
   bool Recording() const override;
 
-  // Microphone Automatic Gain Control (AGC)
-  int32_t SetAGC(bool enable) override;
-  bool AGC() const override;
-
   // Audio mixer initialization
   int32_t InitSpeaker() override;
   bool SpeakerIsInitialized() const override;
diff --git a/modules/audio_device/audio_device_unittest.cc b/modules/audio_device/audio_device_unittest.cc
index d7df357..60acbbc 100644
--- a/modules/audio_device/audio_device_unittest.cc
+++ b/modules/audio_device/audio_device_unittest.cc
@@ -496,8 +496,6 @@
       // See https://bugs.chromium.org/p/webrtc/issues/detail?id=7397 for
       // details.
       EXPECT_EQ(0, audio_device_->SetStereoRecording(false));
-      EXPECT_EQ(0, audio_device_->SetAGC(false));
-      EXPECT_FALSE(audio_device_->AGC());
     }
   }
 
diff --git a/modules/audio_device/dummy/audio_device_dummy.cc b/modules/audio_device/dummy/audio_device_dummy.cc
index 67ad572..b7b61a7 100644
--- a/modules/audio_device/dummy/audio_device_dummy.cc
+++ b/modules/audio_device/dummy/audio_device_dummy.cc
@@ -79,10 +79,6 @@
 
 bool AudioDeviceDummy::Recording() const { return false; }
 
-int32_t AudioDeviceDummy::SetAGC(bool enable) { return -1; }
-
-bool AudioDeviceDummy::AGC() const { return false; }
-
 int32_t AudioDeviceDummy::InitSpeaker() { return -1; }
 
 bool AudioDeviceDummy::SpeakerIsInitialized() const { return false; }
diff --git a/modules/audio_device/dummy/audio_device_dummy.h b/modules/audio_device/dummy/audio_device_dummy.h
index 18c94fc..d709f77 100644
--- a/modules/audio_device/dummy/audio_device_dummy.h
+++ b/modules/audio_device/dummy/audio_device_dummy.h
@@ -65,10 +65,6 @@
   int32_t StopRecording() override;
   bool Recording() const override;
 
-  // Microphone Automatic Gain Control (AGC)
-  int32_t SetAGC(bool enable) override;
-  bool AGC() const override;
-
   // Audio mixer initialization
   int32_t InitSpeaker() override;
   bool SpeakerIsInitialized() const override;
diff --git a/modules/audio_device/dummy/file_audio_device.cc b/modules/audio_device/dummy/file_audio_device.cc
index e02ec6c..b9aeaa1 100644
--- a/modules/audio_device/dummy/file_audio_device.cc
+++ b/modules/audio_device/dummy/file_audio_device.cc
@@ -310,14 +310,6 @@
   return _recording;
 }
 
-int32_t FileAudioDevice::SetAGC(bool enable) {
-  return -1;
-}
-
-bool FileAudioDevice::AGC() const {
-  return false;
-}
-
 int32_t FileAudioDevice::InitSpeaker() {
   return -1;
 }
diff --git a/modules/audio_device/dummy/file_audio_device.h b/modules/audio_device/dummy/file_audio_device.h
index f735d00..1a7c78a 100644
--- a/modules/audio_device/dummy/file_audio_device.h
+++ b/modules/audio_device/dummy/file_audio_device.h
@@ -85,10 +85,6 @@
   int32_t StopRecording() override;
   bool Recording() const override;
 
-  // Microphone Automatic Gain Control (AGC)
-  int32_t SetAGC(bool enable) override;
-  bool AGC() const override;
-
   // Audio mixer initialization
   int32_t InitSpeaker() override;
   bool SpeakerIsInitialized() const override;
diff --git a/modules/audio_device/include/audio_device.h b/modules/audio_device/include/audio_device.h
index 377a64c..62b929f 100644
--- a/modules/audio_device/include/audio_device.h
+++ b/modules/audio_device/include/audio_device.h
@@ -101,9 +101,9 @@
   virtual int32_t StopRecording() = 0;
   virtual bool Recording() const = 0;
 
-  // Microphone Automatic Gain Control (AGC)
-  virtual int32_t SetAGC(bool enable) = 0;
-  virtual bool AGC() const = 0;
+  // TODO(bugs.webrtc.org/7306): deprecated (to be removed).
+  virtual int32_t SetAGC(bool enable) { return -1; }
+  virtual bool AGC() const { return false; }
 
   // Audio mixer initialization
   virtual int32_t InitSpeaker() = 0;
diff --git a/modules/audio_device/include/fake_audio_device.h b/modules/audio_device/include/fake_audio_device.h
index e8e3f2c..834b3b7 100644
--- a/modules/audio_device/include/fake_audio_device.h
+++ b/modules/audio_device/include/fake_audio_device.h
@@ -41,7 +41,6 @@
   int32_t SetRecordingDevice(uint16_t index) override { return 0; }
   int32_t SetRecordingDevice(WindowsDeviceType device) override { return 0; }
   int32_t SetStereoRecording(bool enable) override { return 0; }
-  int32_t SetAGC(bool enable) override { return 0; }
   int32_t StopRecording() override { return 0; }
 
   int32_t Terminate() override { return 0; }
diff --git a/modules/audio_device/ios/audio_device_ios.h b/modules/audio_device/ios/audio_device_ios.h
index 8f30889..d97e124 100644
--- a/modules/audio_device/ios/audio_device_ios.h
+++ b/modules/audio_device/ios/audio_device_ios.h
@@ -93,8 +93,6 @@
       AudioDeviceModule::AudioLayer& audioLayer) const override;
   int32_t PlayoutIsAvailable(bool& available) override;
   int32_t RecordingIsAvailable(bool& available) override;
-  int32_t SetAGC(bool enable) override;
-  bool AGC() const override;
   int16_t PlayoutDevices() override;
   int16_t RecordingDevices() override;
   int32_t PlayoutDeviceName(uint16_t index,
diff --git a/modules/audio_device/ios/audio_device_not_implemented_ios.mm b/modules/audio_device/ios/audio_device_not_implemented_ios.mm
index 2022ddd..2e99aea 100644
--- a/modules/audio_device/ios/audio_device_not_implemented_ios.mm
+++ b/modules/audio_device/ios/audio_device_not_implemented_ios.mm
@@ -143,17 +143,6 @@
   return 0;
 }
 
-int32_t AudioDeviceIOS::SetAGC(bool enable) {
-  if (enable) {
-    RTC_NOTREACHED() << "Should never be called";
-  }
-  return -1;
-}
-
-bool AudioDeviceIOS::AGC() const {
-  return false;
-}
-
 int32_t AudioDeviceIOS::MicrophoneVolumeIsAvailable(bool& available) {
   available = false;
   return 0;
diff --git a/modules/audio_device/linux/audio_device_alsa_linux.cc b/modules/audio_device/linux/audio_device_alsa_linux.cc
index 1e4d1f5..68d3311 100644
--- a/modules/audio_device/linux/audio_device_alsa_linux.cc
+++ b/modules/audio_device/linux/audio_device_alsa_linux.cc
@@ -90,7 +90,6 @@
       _playing(false),
       _recIsInitialized(false),
       _playIsInitialized(false),
-      _AGC(false),
       _recordingDelay(0),
       _playoutDelay(0) {
   memset(_oldKeyState, 0, sizeof(_oldKeyState));
@@ -519,16 +518,6 @@
   return 0;
 }
 
-int32_t AudioDeviceLinuxALSA::SetAGC(bool enable) {
-  _AGC = enable;
-
-  return 0;
-}
-
-bool AudioDeviceLinuxALSA::AGC() const {
-  return _AGC;
-}
-
 int32_t AudioDeviceLinuxALSA::MicrophoneVolumeIsAvailable(bool& available) {
   bool wasInitialized = _mixerManager.MicrophoneIsInitialized();
 
@@ -1593,19 +1582,6 @@
       _ptrAudioBuffer->SetRecordedBuffer(_recordingBuffer,
                                          _recordingFramesIn10MS);
 
-      uint32_t currentMicLevel = 0;
-      uint32_t newMicLevel = 0;
-
-      if (AGC()) {
-        // store current mic level in the audio buffer if AGC is enabled
-        if (MicrophoneVolume(currentMicLevel) == 0) {
-          if (currentMicLevel == 0xffffffff)
-            currentMicLevel = 100;
-          // this call does not affect the actual microphone volume
-          _ptrAudioBuffer->SetCurrentMicLevel(currentMicLevel);
-        }
-      }
-
       // calculate delay
       _playoutDelay = 0;
       _recordingDelay = 0;
@@ -1640,18 +1616,6 @@
       UnLock();
       _ptrAudioBuffer->DeliverRecordedData();
       Lock();
-
-      if (AGC()) {
-        newMicLevel = _ptrAudioBuffer->NewMicLevel();
-        if (newMicLevel != 0) {
-          // The VQE will only deliver non-zero microphone levels when a
-          // change is needed. Set this new mic level (received from the
-          // observer as return value in the callback).
-          if (SetMicrophoneVolume(newMicLevel) == -1)
-            RTC_LOG(LS_WARNING)
-                << "the required modification of the microphone volume failed";
-        }
-      }
     }
   }
 
diff --git a/modules/audio_device/linux/audio_device_alsa_linux.h b/modules/audio_device/linux/audio_device_alsa_linux.h
index f05547b..602da01 100644
--- a/modules/audio_device/linux/audio_device_alsa_linux.h
+++ b/modules/audio_device/linux/audio_device_alsa_linux.h
@@ -79,10 +79,6 @@
     int32_t StopRecording() override;
     bool Recording() const override;
 
-    // Microphone Automatic Gain Control (AGC)
-    int32_t SetAGC(bool enable) override;
-    bool AGC() const override;
-
     // Audio mixer initialization
     int32_t InitSpeaker() override;
     bool SpeakerIsInitialized() const override;
@@ -191,7 +187,6 @@
     bool _playing;
     bool _recIsInitialized;
     bool _playIsInitialized;
-    bool _AGC;
 
     snd_pcm_sframes_t _recordingDelay;
     snd_pcm_sframes_t _playoutDelay;
diff --git a/modules/audio_device/linux/audio_device_pulse_linux.cc b/modules/audio_device/linux/audio_device_pulse_linux.cc
index 9d3b80b..ee3ea72 100644
--- a/modules/audio_device/linux/audio_device_pulse_linux.cc
+++ b/modules/audio_device/linux/audio_device_pulse_linux.cc
@@ -49,7 +49,6 @@
       _stopRec(false),
       _startPlay(false),
       _stopPlay(false),
-      _AGC(false),
       update_speaker_volume_at_startup_(false),
       _sndCardPlayDelay(0),
       _sndCardRecDelay(0),
@@ -579,18 +578,6 @@
   return 0;
 }
 
-int32_t AudioDeviceLinuxPulse::SetAGC(bool enable) {
-  rtc::CritScope lock(&_critSect);
-  _AGC = enable;
-
-  return 0;
-}
-
-bool AudioDeviceLinuxPulse::AGC() const {
-  rtc::CritScope lock(&_critSect);
-  return _AGC;
-}
-
 int32_t AudioDeviceLinuxPulse::MicrophoneVolumeIsAvailable(bool& available) {
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
   bool wasInitialized = _mixerManager.MicrophoneIsInitialized();
@@ -1964,20 +1951,10 @@
 int32_t AudioDeviceLinuxPulse::ProcessRecordedData(int8_t* bufferData,
                                                    uint32_t bufferSizeInSamples,
                                                    uint32_t recDelay)
-    RTC_EXCLUSIVE_LOCKS_REQUIRED(_critSect) {
-  uint32_t currentMicLevel(0);
-  uint32_t newMicLevel(0);
+  RTC_EXCLUSIVE_LOCKS_REQUIRED(_critSect) {
 
   _ptrAudioBuffer->SetRecordedBuffer(bufferData, bufferSizeInSamples);
 
-  if (AGC()) {
-    // Store current mic level in the audio buffer if AGC is enabled
-    if (MicrophoneVolume(currentMicLevel) == 0) {
-      // This call does not affect the actual microphone volume
-      _ptrAudioBuffer->SetCurrentMicLevel(currentMicLevel);
-    }
-  }
-
   const uint32_t clockDrift(0);
   // TODO(andrew): this is a temporary hack, to avoid non-causal far- and
   // near-end signals at the AEC for PulseAudio. I think the system delay is
@@ -2001,22 +1978,6 @@
     return -1;
   }
 
-  if (AGC()) {
-    newMicLevel = _ptrAudioBuffer->NewMicLevel();
-    if (newMicLevel != 0) {
-      // The VQE will only deliver non-zero microphone levels when a
-      // change is needed.
-      // Set this new mic level (received from the observer as return
-      // value in the callback).
-      RTC_LOG(LS_VERBOSE) << "AGC change of volume: old=" << currentMicLevel
-                          << " => new=" << newMicLevel;
-      if (SetMicrophoneVolume(newMicLevel) == -1) {
-        RTC_LOG(LS_WARNING)
-            << "the required modification of the microphone volume failed";
-      }
-    }
-  }
-
   return 0;
 }
 
diff --git a/modules/audio_device/linux/audio_device_pulse_linux.h b/modules/audio_device/linux/audio_device_pulse_linux.h
index 73195c7..9aadfbe 100644
--- a/modules/audio_device/linux/audio_device_pulse_linux.h
+++ b/modules/audio_device/linux/audio_device_pulse_linux.h
@@ -141,10 +141,6 @@
     int32_t StopRecording() override;
     bool Recording() const override;
 
-    // Microphone Automatic Gain Control (AGC)
-    int32_t SetAGC(bool enable) override;
-    bool AGC() const override;
-
     // Audio mixer initialization
     int32_t InitSpeaker() override;
     bool SpeakerIsInitialized() const override;
@@ -289,7 +285,6 @@
  bool _stopRec;
  bool _startPlay;
  bool _stopPlay;
- bool _AGC;
  bool update_speaker_volume_at_startup_;
 
  uint32_t _sndCardPlayDelay;
diff --git a/modules/audio_device/mac/audio_device_mac.cc b/modules/audio_device/mac/audio_device_mac.cc
index 110bfcd..2fbe878 100644
--- a/modules/audio_device/mac/audio_device_mac.cc
+++ b/modules/audio_device/mac/audio_device_mac.cc
@@ -132,7 +132,6 @@
       _playing(false),
       _recIsInitialized(false),
       _playIsInitialized(false),
-      _AGC(false),
       _renderDeviceIsAlive(1),
       _captureDeviceIsAlive(1),
       _twoDevices(true),
@@ -149,8 +148,7 @@
       _paRenderBuffer(NULL),
       _captureBufSizeSamples(0),
       _renderBufSizeSamples(0),
-      prev_key_state_(),
-      get_mic_volume_counter_ms_(0) {
+      prev_key_state_() {
   RTC_LOG(LS_INFO) << __FUNCTION__ << " created";
 
   RTC_DCHECK(&_stopEvent != NULL);
@@ -337,8 +335,6 @@
     }
   }
 
-  get_mic_volume_counter_ms_ = 0;
-
   _initialized = true;
 
   return InitStatus::OK;
@@ -733,16 +729,6 @@
   return 0;
 }
 
-int32_t AudioDeviceMac::SetAGC(bool enable) {
-  _AGC = enable;
-
-  return 0;
-}
-
-bool AudioDeviceMac::AGC() const {
-  return _AGC;
-}
-
 int32_t AudioDeviceMac::MicrophoneVolumeIsAvailable(bool& available) {
   bool wasInitialized = _mixerManager.MicrophoneIsInitialized();
 
@@ -2494,8 +2480,6 @@
 
   // TODO(xians): what if the returned size is incorrect?
   if (size == ENGINE_REC_BUF_SIZE_IN_SAMPLES) {
-    uint32_t currentMicLevel(0);
-    uint32_t newMicLevel(0);
     int32_t msecOnPlaySide;
     int32_t msecOnRecordSide;
 
@@ -2515,43 +2499,12 @@
     // store the recorded buffer (no action will be taken if the
     // #recorded samples is not a full buffer)
     _ptrAudioBuffer->SetRecordedBuffer((int8_t*)&recordBuffer, (uint32_t)size);
-
-    if (AGC()) {
-      // Use mod to ensure we check the volume on the first pass.
-      if (get_mic_volume_counter_ms_ % kGetMicVolumeIntervalMs == 0) {
-        get_mic_volume_counter_ms_ = 0;
-        // store current mic level in the audio buffer if AGC is enabled
-        if (MicrophoneVolume(currentMicLevel) == 0) {
-          // this call does not affect the actual microphone volume
-          _ptrAudioBuffer->SetCurrentMicLevel(currentMicLevel);
-        }
-      }
-      get_mic_volume_counter_ms_ += kBufferSizeMs;
-    }
-
     _ptrAudioBuffer->SetVQEData(msecOnPlaySide, msecOnRecordSide, 0);
-
     _ptrAudioBuffer->SetTypingStatus(KeyPressed());
 
     // deliver recorded samples at specified sample rate, mic level etc.
     // to the observer using callback
     _ptrAudioBuffer->DeliverRecordedData();
-
-    if (AGC()) {
-      newMicLevel = _ptrAudioBuffer->NewMicLevel();
-      if (newMicLevel != 0) {
-        // The VQE will only deliver non-zero microphone levels when
-        // a change is needed.
-        // Set this new mic level (received from the observer as return
-        // value in the callback).
-        RTC_LOG(LS_VERBOSE) << "AGC change of volume: old=" << currentMicLevel
-                            << " => new=" << newMicLevel;
-        if (SetMicrophoneVolume(newMicLevel) == -1) {
-          RTC_LOG(LS_WARNING)
-              << "the required modification of the microphone volume failed";
-        }
-      }
-    }
   }
 
   return true;
diff --git a/modules/audio_device/mac/audio_device_mac.h b/modules/audio_device/mac/audio_device_mac.h
index 8dece72..5cbdae2 100644
--- a/modules/audio_device/mac/audio_device_mac.h
+++ b/modules/audio_device/mac/audio_device_mac.h
@@ -107,10 +107,6 @@
   virtual int32_t StopRecording();
   virtual bool Recording() const;
 
-  // Microphone Automatic Gain Control (AGC)
-  virtual int32_t SetAGC(bool enable);
-  virtual bool AGC() const;
-
   // Audio mixer initialization
   virtual int32_t InitSpeaker();
   virtual bool SpeakerIsInitialized() const;
@@ -294,7 +290,6 @@
   bool _playing;
   bool _recIsInitialized;
   bool _playIsInitialized;
-  bool _AGC;
 
   // Atomically set varaibles
   int32_t _renderDeviceIsAlive;
@@ -335,8 +330,6 @@
   // Typing detection
   // 0x5c is key "9", after that comes function keys.
   bool prev_key_state_[0x5d];
-
-  int get_mic_volume_counter_ms_;
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_device/win/audio_device_core_win.cc b/modules/audio_device/win/audio_device_core_win.cc
index cf7df4b..526d41c 100644
--- a/modules/audio_device/win/audio_device_core_win.cc
+++ b/modules/audio_device/win/audio_device_core_win.cc
@@ -417,9 +417,6 @@
       _hShutdownCaptureEvent(NULL),
       _hRenderStartedEvent(NULL),
       _hCaptureStartedEvent(NULL),
-      _hGetCaptureVolumeThread(NULL),
-      _hSetCaptureVolumeThread(NULL),
-      _hSetCaptureVolumeEvent(NULL),
       _hMmTask(NULL),
       _initialized(false),
       _recording(false),
@@ -428,15 +425,13 @@
       _playIsInitialized(false),
       _speakerIsInitialized(false),
       _microphoneIsInitialized(false),
-      _AGC(false),
       _playBufDelay(80),
       _usingInputDeviceIndex(false),
       _usingOutputDeviceIndex(false),
       _inputDevice(AudioDeviceModule::kDefaultCommunicationDevice),
       _outputDevice(AudioDeviceModule::kDefaultCommunicationDevice),
       _inputDeviceIndex(0),
-      _outputDeviceIndex(0),
-      _newMicLevel(0) {
+      _outputDeviceIndex(0) {
   RTC_LOG(LS_INFO) << __FUNCTION__ << " created";
   assert(_comInit.succeeded());
 
@@ -487,7 +482,6 @@
   _hShutdownCaptureEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
   _hRenderStartedEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
   _hCaptureStartedEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
-  _hSetCaptureVolumeEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 
   _perfCounterFreq.QuadPart = 1;
   _perfCounterFactor = 0.0;
@@ -575,11 +569,6 @@
     _hShutdownCaptureEvent = NULL;
   }
 
-  if (NULL != _hSetCaptureVolumeEvent) {
-    CloseHandle(_hSetCaptureVolumeEvent);
-    _hSetCaptureVolumeEvent = NULL;
-  }
-
   if (_avrtLibrary) {
     BOOL freeOK = FreeLibrary(_avrtLibrary);
     if (!freeOK) {
@@ -1271,25 +1260,6 @@
 }
 
 // ----------------------------------------------------------------------------
-//  SetAGC
-// ----------------------------------------------------------------------------
-
-int32_t AudioDeviceWindowsCore::SetAGC(bool enable) {
-  rtc::CritScope lock(&_critSect);
-  _AGC = enable;
-  return 0;
-}
-
-// ----------------------------------------------------------------------------
-//  AGC
-// ----------------------------------------------------------------------------
-
-bool AudioDeviceWindowsCore::AGC() const {
-  rtc::CritScope lock(&_critSect);
-  return _AGC;
-}
-
-// ----------------------------------------------------------------------------
 //  MicrophoneVolumeIsAvailable
 // ----------------------------------------------------------------------------
 
@@ -2423,21 +2393,6 @@
     // Set thread priority to highest possible
     SetThreadPriority(_hRecThread, THREAD_PRIORITY_TIME_CRITICAL);
 
-    assert(_hGetCaptureVolumeThread == NULL);
-    _hGetCaptureVolumeThread =
-        CreateThread(NULL, 0, GetCaptureVolumeThread, this, 0, NULL);
-    if (_hGetCaptureVolumeThread == NULL) {
-      RTC_LOG(LS_ERROR) << "failed to create the volume getter thread";
-      return -1;
-    }
-
-    assert(_hSetCaptureVolumeThread == NULL);
-    _hSetCaptureVolumeThread =
-        CreateThread(NULL, 0, SetCaptureVolumeThread, this, 0, NULL);
-    if (_hSetCaptureVolumeThread == NULL) {
-      RTC_LOG(LS_ERROR) << "failed to create the volume setter thread";
-      return -1;
-    }
   }  // critScoped
 
   DWORD ret = WaitForSingleObject(_hCaptureStartedEvent, 1000);
@@ -2490,24 +2445,6 @@
   } else {
     RTC_LOG(LS_VERBOSE) << "webrtc_core_audio_capture_thread is now closed";
   }
-
-  ret = WaitForSingleObject(_hGetCaptureVolumeThread, 2000);
-  if (ret != WAIT_OBJECT_0) {
-    // the thread did not stop as it should
-    RTC_LOG(LS_ERROR) << "failed to close down volume getter thread";
-    err = -1;
-  } else {
-    RTC_LOG(LS_VERBOSE) << "volume getter thread is now closed";
-  }
-
-  ret = WaitForSingleObject(_hSetCaptureVolumeThread, 2000);
-  if (ret != WAIT_OBJECT_0) {
-    // the thread did not stop as it should
-    RTC_LOG(LS_ERROR) << "failed to close down volume setter thread";
-    err = -1;
-  } else {
-    RTC_LOG(LS_VERBOSE) << "volume setter thread is now closed";
-  }
   _Lock();
 
   ResetEvent(_hShutdownCaptureEvent);  // Must be manually reset.
@@ -2523,12 +2460,6 @@
   CloseHandle(_hRecThread);
   _hRecThread = NULL;
 
-  CloseHandle(_hGetCaptureVolumeThread);
-  _hGetCaptureVolumeThread = NULL;
-
-  CloseHandle(_hSetCaptureVolumeThread);
-  _hSetCaptureVolumeThread = NULL;
-
   if (_builtInAecEnabled) {
     assert(_dmo != NULL);
     // This is necessary. Otherwise the DMO can generate garbage render
@@ -2736,72 +2667,6 @@
       ->DoCaptureThreadPollDMO();
 }
 
-DWORD WINAPI AudioDeviceWindowsCore::GetCaptureVolumeThread(LPVOID context) {
-  return reinterpret_cast<AudioDeviceWindowsCore*>(context)
-      ->DoGetCaptureVolumeThread();
-}
-
-DWORD WINAPI AudioDeviceWindowsCore::SetCaptureVolumeThread(LPVOID context) {
-  return reinterpret_cast<AudioDeviceWindowsCore*>(context)
-      ->DoSetCaptureVolumeThread();
-}
-
-DWORD AudioDeviceWindowsCore::DoGetCaptureVolumeThread() {
-  HANDLE waitObject = _hShutdownCaptureEvent;
-
-  while (1) {
-    if (AGC()) {
-      uint32_t currentMicLevel = 0;
-      if (MicrophoneVolume(currentMicLevel) == 0) {
-        // This doesn't set the system volume, just stores it.
-        _Lock();
-        if (_ptrAudioBuffer) {
-          _ptrAudioBuffer->SetCurrentMicLevel(currentMicLevel);
-        }
-        _UnLock();
-      }
-    }
-
-    DWORD waitResult =
-        WaitForSingleObject(waitObject, GET_MIC_VOLUME_INTERVAL_MS);
-    switch (waitResult) {
-      case WAIT_OBJECT_0:  // _hShutdownCaptureEvent
-        return 0;
-      case WAIT_TIMEOUT:  // timeout notification
-        break;
-      default:  // unexpected error
-        RTC_LOG(LS_WARNING) << "unknown wait termination on get volume thread";
-        return 1;
-    }
-  }
-}
-
-DWORD AudioDeviceWindowsCore::DoSetCaptureVolumeThread() {
-  HANDLE waitArray[2] = {_hShutdownCaptureEvent, _hSetCaptureVolumeEvent};
-
-  while (1) {
-    DWORD waitResult = WaitForMultipleObjects(2, waitArray, FALSE, INFINITE);
-    switch (waitResult) {
-      case WAIT_OBJECT_0:  // _hShutdownCaptureEvent
-        return 0;
-      case WAIT_OBJECT_0 + 1:  // _hSetCaptureVolumeEvent
-        break;
-      default:  // unexpected error
-        RTC_LOG(LS_WARNING) << "unknown wait termination on set volume thread";
-        return 1;
-    }
-
-    _Lock();
-    uint32_t newMicLevel = _newMicLevel;
-    _UnLock();
-
-    if (SetMicrophoneVolume(newMicLevel) == -1) {
-      RTC_LOG(LS_WARNING)
-          << "the required modification of the microphone volume failed";
-    }
-  }
-}
-
 // ----------------------------------------------------------------------------
 //  DoRenderThread
 // ----------------------------------------------------------------------------
@@ -3188,8 +3053,6 @@
         break;
       }
 
-      // TODO(andrew): handle AGC.
-
       if (bytesProduced > 0) {
         const int kSamplesProduced = bytesProduced / _recAudioFrameSize;
         // TODO(andrew): verify that this is always satisfied. It might
@@ -3451,20 +3314,6 @@
           syncBufIndex -= _recBlockSize;
           sndCardRecDelay -= 10;
         }
-
-        if (_AGC) {
-          uint32_t newMicLevel = _ptrAudioBuffer->NewMicLevel();
-          if (newMicLevel != 0) {
-            // The VQE will only deliver non-zero microphone levels when a
-            // change is needed. Set this new mic level (received from the
-            // observer as return value in the callback).
-            RTC_LOG(LS_VERBOSE) << "AGC change of volume: new=" << newMicLevel;
-            // We store this outside of the audio buffer to avoid
-            // having it overwritten by the getter thread.
-            _newMicLevel = newMicLevel;
-            SetEvent(_hSetCaptureVolumeEvent);
-          }
-        }
       } else {
         // If GetBuffer returns AUDCLNT_E_BUFFER_ERROR, the thread consuming the
         // audio samples must wait for the next processing pass. The client
diff --git a/modules/audio_device/win/audio_device_core_win.h b/modules/audio_device/win/audio_device_core_win.h
index 30e767b..b5c2b72 100644
--- a/modules/audio_device/win/audio_device_core_win.h
+++ b/modules/audio_device/win/audio_device_core_win.h
@@ -129,10 +129,6 @@
     virtual int32_t StopRecording();
     virtual bool Recording() const;
 
-    // Microphone Automatic Gain Control (AGC)
-    virtual int32_t SetAGC(bool enable);
-    virtual bool AGC() const;
-
     // Audio mixer initialization
     virtual int32_t InitSpeaker();
     virtual bool SpeakerIsInitialized() const;
@@ -201,12 +197,6 @@
     static DWORD WINAPI WSAPIRenderThread(LPVOID context);
     DWORD DoRenderThread();
 
-    static DWORD WINAPI GetCaptureVolumeThread(LPVOID context);
-    DWORD DoGetCaptureVolumeThread();
-
-    static DWORD WINAPI SetCaptureVolumeThread(LPVOID context);
-    DWORD DoSetCaptureVolumeThread();
-
     void _Lock() { _critSect.Enter(); };
     void _UnLock() { _critSect.Leave(); };
 
@@ -274,10 +264,6 @@
     HANDLE                                  _hCaptureStartedEvent;
     HANDLE                                  _hShutdownCaptureEvent;
 
-    HANDLE                                  _hGetCaptureVolumeThread;
-    HANDLE                                  _hSetCaptureVolumeThread;
-    HANDLE                                  _hSetCaptureVolumeEvent;
-
     HANDLE                                  _hMmTask;
 
     UINT                                    _playAudioFrameSize;
@@ -318,12 +304,8 @@
     uint16_t                          _inputDeviceIndex;
     uint16_t                          _outputDeviceIndex;
 
-    bool                                    _AGC;
-
     uint16_t                          _playBufDelay;
 
-    uint16_t                          _newMicLevel;
-
     mutable char                            _str[512];
 };
 
diff --git a/pc/test/fakeaudiocapturemodule.cc b/pc/test/fakeaudiocapturemodule.cc
index b54fc4b..a129ae5 100644
--- a/pc/test/fakeaudiocapturemodule.cc
+++ b/pc/test/fakeaudiocapturemodule.cc
@@ -233,16 +233,6 @@
   return recording_;
 }
 
-int32_t FakeAudioCaptureModule::SetAGC(bool /*enable*/) {
-  // No AGC but not needed since audio is pregenerated. Return success.
-  return 0;
-}
-
-bool FakeAudioCaptureModule::AGC() const {
-  RTC_NOTREACHED();
-  return 0;
-}
-
 int32_t FakeAudioCaptureModule::InitSpeaker() {
   // No speaker, just playing from file. Return success.
   return 0;
diff --git a/pc/test/fakeaudiocapturemodule.h b/pc/test/fakeaudiocapturemodule.h
index 7c89919..db346d0 100644
--- a/pc/test/fakeaudiocapturemodule.h
+++ b/pc/test/fakeaudiocapturemodule.h
@@ -90,9 +90,6 @@
   int32_t StopRecording() override;
   bool Recording() const override;
 
-  int32_t SetAGC(bool enable) override;
-  bool AGC() const override;
-
   int32_t InitSpeaker() override;
   bool SpeakerIsInitialized() const override;
   int32_t InitMicrophone() override;