diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn
index 9eafd02..e790bbb 100644
--- a/modules/audio_processing/BUILD.gn
+++ b/modules/audio_processing/BUILD.gn
@@ -180,8 +180,8 @@
     "aec3",
     "aecm:aecm_core",
     "agc",
-    "agc:agc_legacy_c",
     "agc:gain_control_interface",
+    "agc:legacy_agc",
     "agc2:adaptive_digital",
     "agc2:fixed_digital",
     "agc2:gain_applier",
diff --git a/modules/audio_processing/agc/BUILD.gn b/modules/audio_processing/agc/BUILD.gn
index 947d886..41c2ad3 100644
--- a/modules/audio_processing/agc/BUILD.gn
+++ b/modules/audio_processing/agc/BUILD.gn
@@ -56,7 +56,7 @@
   ]
 }
 
-rtc_library("agc_legacy_c") {
+rtc_library("legacy_agc") {
   visibility = [
     ":*",
     "..:*",
@@ -65,9 +65,9 @@
      # this.
 
   sources = [
-    "legacy/analog_agc.c",
+    "legacy/analog_agc.cc",
     "legacy/analog_agc.h",
-    "legacy/digital_agc.c",
+    "legacy/digital_agc.cc",
     "legacy/digital_agc.h",
     "legacy/gain_control.h",
   ]
diff --git a/modules/audio_processing/agc/legacy/analog_agc.c b/modules/audio_processing/agc/legacy/analog_agc.cc
similarity index 89%
rename from modules/audio_processing/agc/legacy/analog_agc.c
rename to modules/audio_processing/agc/legacy/analog_agc.cc
index 6b75728..b53e3f9 100644
--- a/modules/audio_processing/agc/legacy/analog_agc.c
+++ b/modules/audio_processing/agc/legacy/analog_agc.cc
@@ -8,7 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-/* analog_agc.c
+/*
  *
  * Using a feedback system, determines an appropriate analog volume level
  * given an input signal and current volume level. Targets a conservative
@@ -23,6 +23,16 @@
 
 #include "rtc_base/checks.h"
 
+namespace webrtc {
+
+namespace {
+
+// Errors
+#define AGC_UNSPECIFIED_ERROR 18000
+#define AGC_UNINITIALIZED_ERROR 18002
+#define AGC_NULL_POINTER_ERROR 18003
+#define AGC_BAD_PARAMETER_ERROR 18004
+
 /* The slope of in Q13*/
 static const int16_t kSlope1[8] = {21793, 12517, 7189, 4129,
                                    2372,  1362,  472,  78};
@@ -69,9 +79,6 @@
  */
 #define DIFF_REF_TO_ANALOG 5
 
-#ifdef MIC_LEVEL_FEEDBACK
-#define NUM_BLOCKS_IN_SAT_BEFORE_CHANGE_TARGET 7
-#endif
 /* Size of analog gain table */
 #define GAIN_TBL_LEN 32
 /* Matlab code:
@@ -125,6 +132,8 @@
     337,       268,       213,      169,      134,      107,      85,
     67};
 
+}  // namespace
+
 int WebRtcAgc_AddMic(void* state,
                      int16_t* const* in_mic,
                      size_t num_bands,
@@ -135,7 +144,7 @@
   size_t i;
   int16_t n, L, tmp16, tmp_speech[16];
   LegacyAgc* stt;
-  stt = (LegacyAgc*)state;
+  stt = reinterpret_cast<LegacyAgc*>(state);
 
   if (stt->fs == 8000) {
     L = 8;
@@ -222,7 +231,7 @@
       WebRtcSpl_DownsampleBy2(&in_mic[0][i * 32], 32, tmp_speech,
                               stt->filterState);
     } else {
-      memcpy(tmp_speech, &in_mic[0][i * 16], 16 * sizeof(short));
+      memcpy(tmp_speech, &in_mic[0][i * 16], 16 * sizeof(int16_t));
     }
     /* Compute energy in blocks of 16 samples */
     ptr[i] = WebRtcSpl_DotProductWithScale(tmp_speech, tmp_speech, 16, 4);
@@ -242,7 +251,7 @@
 }
 
 int WebRtcAgc_AddFarend(void* state, const int16_t* in_far, size_t samples) {
-  LegacyAgc* stt = (LegacyAgc*)state;
+  LegacyAgc* stt = reinterpret_cast<LegacyAgc*>(state);
 
   int err = WebRtcAgc_GetAddFarendError(state, samples);
 
@@ -254,7 +263,7 @@
 
 int WebRtcAgc_GetAddFarendError(void* state, size_t samples) {
   LegacyAgc* stt;
-  stt = (LegacyAgc*)state;
+  stt = reinterpret_cast<LegacyAgc*>(state);
 
   if (stt == NULL)
     return -1;
@@ -291,7 +300,7 @@
   const int16_t kZeroCrossingLowLim = 15;
   const int16_t kZeroCrossingHighLim = 20;
 
-  stt = (LegacyAgc*)agcInst;
+  stt = reinterpret_cast<LegacyAgc*>(agcInst);
 
   /*
    *  Before applying gain decide if this is a low-level signal.
@@ -394,15 +403,6 @@
 
 void WebRtcAgc_UpdateAgcThresholds(LegacyAgc* stt) {
   int16_t tmp16;
-#ifdef MIC_LEVEL_FEEDBACK
-  int zeros;
-
-  if (stt->micLvlSat) {
-    /* Lower the analog target level since we have reached its maximum */
-    zeros = WebRtcSpl_NormW32(stt->Rxx160_LPw32);
-    stt->targetIdxOffset = (3 * zeros - stt->targetIdx - 2) / 4;
-  }
-#endif
 
   /* Set analog target level in envelope dBOv scale */
   tmp16 = (DIFF_REF_TO_ANALOG * stt->compressionGaindB) + ANALOG_TARGET_LEVEL_2;
@@ -415,9 +415,6 @@
     /* Adjust for different parameter interpretation in FixedDigital mode */
     stt->analogTarget = stt->compressionGaindB;
   }
-#ifdef MIC_LEVEL_FEEDBACK
-  stt->analogTarget += stt->targetIdxOffset;
-#endif
   /* Since the offset between RMS and ENV is not constant, we should make this
    * into a
    * table, but for now, we'll stick with a constant, tuned for the chosen
@@ -425,25 +422,22 @@
    * target level.
    */
   stt->targetIdx = ANALOG_TARGET_LEVEL + OFFSET_ENV_TO_RMS;
-#ifdef MIC_LEVEL_FEEDBACK
-  stt->targetIdx += stt->targetIdxOffset;
-#endif
   /* Analog adaptation limits */
   /* analogTargetLevel = round((32767*10^(-targetIdx/20))^2*16/2^7) */
   stt->analogTargetLevel =
-      RXX_BUFFER_LEN * kTargetLevelTable[stt->targetIdx]; /* ex. -20 dBov */
+      kRxxBufferLen * kTargetLevelTable[stt->targetIdx]; /* ex. -20 dBov */
   stt->startUpperLimit =
-      RXX_BUFFER_LEN * kTargetLevelTable[stt->targetIdx - 1]; /* -19 dBov */
+      kRxxBufferLen * kTargetLevelTable[stt->targetIdx - 1]; /* -19 dBov */
   stt->startLowerLimit =
-      RXX_BUFFER_LEN * kTargetLevelTable[stt->targetIdx + 1]; /* -21 dBov */
+      kRxxBufferLen * kTargetLevelTable[stt->targetIdx + 1]; /* -21 dBov */
   stt->upperPrimaryLimit =
-      RXX_BUFFER_LEN * kTargetLevelTable[stt->targetIdx - 2]; /* -18 dBov */
+      kRxxBufferLen * kTargetLevelTable[stt->targetIdx - 2]; /* -18 dBov */
   stt->lowerPrimaryLimit =
-      RXX_BUFFER_LEN * kTargetLevelTable[stt->targetIdx + 2]; /* -22 dBov */
+      kRxxBufferLen * kTargetLevelTable[stt->targetIdx + 2]; /* -22 dBov */
   stt->upperSecondaryLimit =
-      RXX_BUFFER_LEN * kTargetLevelTable[stt->targetIdx - 5]; /* -15 dBov */
+      kRxxBufferLen * kTargetLevelTable[stt->targetIdx - 5]; /* -15 dBov */
   stt->lowerSecondaryLimit =
-      RXX_BUFFER_LEN * kTargetLevelTable[stt->targetIdx + 5]; /* -25 dBov */
+      kRxxBufferLen * kTargetLevelTable[stt->targetIdx + 5]; /* -25 dBov */
   stt->upperLimit = stt->startUpperLimit;
   stt->lowerLimit = stt->startLowerLimit;
 }
@@ -507,7 +501,6 @@
       stt->micVol = *inMicLevel;
     }
 
-
     stt->activeSpeech = 0;
     stt->Rxx16_LPw32Max = 0;
 
@@ -592,7 +585,7 @@
   uint8_t saturated = 0;
   LegacyAgc* stt;
 
-  stt = (LegacyAgc*)state;
+  stt = reinterpret_cast<LegacyAgc*>(state);
   inMicLevelTmp = inMicLevel << stt->scale;
 
   if (inMicLevelTmp > stt->maxAnalog) {
@@ -625,9 +618,6 @@
     tmp32 = ((stt->maxLevel - stt->minLevel) * 51) >> 9;
     inMicLevelTmp = (stt->minLevel + tmp32);
     stt->micVol = inMicLevelTmp;
-#ifdef MIC_LEVEL_FEEDBACK
-// stt->numBlocksMicLvlSat = 0;
-#endif
   }
 
   if (inMicLevelTmp != stt->micVol) {
@@ -676,7 +666,6 @@
     }
     inMicLevelTmp = stt->micVol;
 
-
     if (stt->micVol < stt->minOutput) {
       *saturationWarning = 1;
     }
@@ -701,9 +690,6 @@
 
     stt->upperLimit = stt->startUpperLimit;
     stt->lowerLimit = stt->startLowerLimit;
-#ifdef MIC_LEVEL_FEEDBACK
-// stt->numBlocksMicLvlSat = 0;
-#endif
   }
 
   /* Check if the input speech is zero. If so the mic volume
@@ -731,7 +717,7 @@
 
     /* Circular buffer */
     stt->Rxx16pos++;
-    if (stt->Rxx16pos == RXX_BUFFER_LEN) {
+    if (stt->Rxx16pos == kRxxBufferLen) {
       stt->Rxx16pos = 0;
     }
 
@@ -755,7 +741,7 @@
       } else if (stt->activeSpeech == 250) {
         stt->activeSpeech += 2;
         tmp32 = stt->Rxx16_LPw32Max >> 3;
-        stt->Rxx160_LPw32 = tmp32 * RXX_BUFFER_LEN;
+        stt->Rxx160_LPw32 = tmp32 * kRxxBufferLen;
       }
 
       tmp32 = (stt->Rxx160w32 - stt->Rxx160_LPw32) >> kAlphaLongTerm;
@@ -796,9 +782,6 @@
            */
           stt->activeSpeech = 0;
           stt->Rxx16_LPw32Max = 0;
-#ifdef MIC_LEVEL_FEEDBACK
-// stt->numBlocksMicLvlSat = 0;
-#endif
         }
       } else if (stt->Rxx160_LPw32 > stt->upperLimit) {
         stt->msTooHigh += 2;
@@ -828,10 +811,6 @@
             stt->micVol = lastMicVol - 1;
           }
           inMicLevelTmp = stt->micVol;
-
-#ifdef MIC_LEVEL_FEEDBACK
-// stt->numBlocksMicLvlSat = 0;
-#endif
         }
       } else if (stt->Rxx160_LPw32 < stt->lowerSecondaryLimit) {
         stt->msTooHigh = 0;
@@ -871,16 +850,6 @@
           }
 
           inMicLevelTmp = stt->micVol;
-
-#ifdef MIC_LEVEL_FEEDBACK
-          /* Count ms in level saturation */
-          // if (stt->micVol > stt->maxAnalog) {
-          if (stt->micVol > 150) {
-            /* mic level is saturated */
-            stt->numBlocksMicLvlSat++;
-            fprintf(stderr, "Sat mic Level: %d\n", stt->numBlocksMicLvlSat);
-          }
-#endif
         }
       } else if (stt->Rxx160_LPw32 < stt->lowerLimit) {
         stt->msTooHigh = 0;
@@ -920,16 +889,6 @@
           }
 
           inMicLevelTmp = stt->micVol;
-
-#ifdef MIC_LEVEL_FEEDBACK
-          /* Count ms in level saturation */
-          // if (stt->micVol > stt->maxAnalog) {
-          if (stt->micVol > 150) {
-            /* mic level is saturated */
-            stt->numBlocksMicLvlSat++;
-            fprintf(stderr, "Sat mic Level: %d\n", stt->numBlocksMicLvlSat);
-          }
-#endif
         }
       } else {
         /* The signal is inside the desired range which is:
@@ -948,22 +907,6 @@
 
         stt->micVol = inMicLevelTmp;
       }
-#ifdef MIC_LEVEL_FEEDBACK
-      if (stt->numBlocksMicLvlSat > NUM_BLOCKS_IN_SAT_BEFORE_CHANGE_TARGET) {
-        stt->micLvlSat = 1;
-        fprintf(stderr, "target before = %d (%d)\n", stt->analogTargetLevel,
-                stt->targetIdx);
-        WebRtcAgc_UpdateAgcThresholds(stt);
-        WebRtcAgc_CalculateGainTable(
-            &(stt->digitalAgc.gainTable[0]), stt->compressionGaindB,
-            stt->targetLevelDbfs, stt->limiterEnable, stt->analogTarget);
-        stt->numBlocksMicLvlSat = 0;
-        stt->micLvlSat = 0;
-        fprintf(stderr, "target offset = %d\n", stt->targetIdxOffset);
-        fprintf(stderr, "target after  = %d (%d)\n", stt->analogTargetLevel,
-                stt->targetIdx);
-      }
-#endif
     }
   }
 
@@ -998,7 +941,7 @@
                       int16_t echo,
                       uint8_t* saturationWarning,
                       int32_t gains[11]) {
-  LegacyAgc* stt = (LegacyAgc*)agcInst;
+  LegacyAgc* stt = reinterpret_cast<LegacyAgc*>(agcInst);
 
   if (stt == NULL) {
     return -1;
@@ -1020,7 +963,6 @@
   // TODO(minyue): PUT IN RANGE CHECKING FOR INPUT LEVELS
   *outMicLevel = inMicLevel;
 
-
   int32_t error =
       WebRtcAgc_ComputeDigitalGains(&stt->digitalAgc, in_near, num_bands,
                                     stt->fs, stt->lowLevelSignal, gains);
@@ -1051,17 +993,17 @@
 }
 
 int WebRtcAgc_Process(const void* agcInst,
-                       const int32_t gains[11],
+                      const int32_t gains[11],
                       const int16_t* const* in_near,
                       size_t num_bands,
-                       int16_t* const* out) {
+                      int16_t* const* out) {
   const LegacyAgc* stt = (const LegacyAgc*)agcInst;
   return WebRtcAgc_ApplyDigitalGains(gains, num_bands, stt->fs, in_near, out);
 }
 
 int WebRtcAgc_set_config(void* agcInst, WebRtcAgcConfig agcConfig) {
   LegacyAgc* stt;
-  stt = (LegacyAgc*)agcInst;
+  stt = reinterpret_cast<LegacyAgc*>(agcInst);
 
   if (stt == NULL) {
     return -1;
@@ -1109,7 +1051,7 @@
 
 int WebRtcAgc_get_config(void* agcInst, WebRtcAgcConfig* config) {
   LegacyAgc* stt;
-  stt = (LegacyAgc*)agcInst;
+  stt = reinterpret_cast<LegacyAgc*>(agcInst);
 
   if (stt == NULL) {
     return -1;
@@ -1133,7 +1075,7 @@
 }
 
 void* WebRtcAgc_Create() {
-  LegacyAgc* stt = malloc(sizeof(LegacyAgc));
+  LegacyAgc* stt = static_cast<LegacyAgc*>(malloc(sizeof(LegacyAgc)));
 
   stt->initFlag = 0;
   stt->lastError = 0;
@@ -1144,7 +1086,7 @@
 void WebRtcAgc_Free(void* state) {
   LegacyAgc* stt;
 
-  stt = (LegacyAgc*)state;
+  stt = reinterpret_cast<LegacyAgc*>(state);
   free(stt);
 }
 
@@ -1162,7 +1104,7 @@
   LegacyAgc* stt;
 
   /* typecast state pointer */
-  stt = (LegacyAgc*)agcInst;
+  stt = reinterpret_cast<LegacyAgc*>(agcInst);
 
   if (WebRtcAgc_InitDigital(&stt->digitalAgc, agcMode) != 0) {
     stt->lastError = AGC_UNINITIALIZED_ERROR;
@@ -1172,13 +1114,13 @@
   /* Analog AGC variables */
   stt->envSum = 0;
 
-/* mode     = 0 - Only saturation protection
- *            1 - Analog Automatic Gain Control [-targetLevelDbfs (default -3
- * dBOv)]
- *            2 - Digital Automatic Gain Control [-targetLevelDbfs (default -3
- * dBOv)]
- *            3 - Fixed Digital Gain [compressionGaindB (default 8 dB)]
- */
+  /* mode     = 0 - Only saturation protection
+   *            1 - Analog Automatic Gain Control [-targetLevelDbfs (default -3
+   * dBOv)]
+   *            2 - Digital Automatic Gain Control [-targetLevelDbfs (default -3
+   * dBOv)]
+   *            3 - Fixed Digital Gain [compressionGaindB (default 8 dB)]
+   */
   if (agcMode < kAgcModeUnchanged || agcMode > kAgcModeFixedDigital) {
     return -1;
   }
@@ -1229,10 +1171,6 @@
   }
   stt->micRef = stt->micVol;
   stt->micGainIdx = 127;
-#ifdef MIC_LEVEL_FEEDBACK
-  stt->numBlocksMicLvlSat = 0;
-  stt->micLvlSat = 0;
-#endif
 
   /* Minimum output volume is 4% higher than the available lowest volume level
    */
@@ -1256,11 +1194,10 @@
   stt->vadThreshold = kNormalVadThreshold;
   stt->inActive = 0;
 
-  for (i = 0; i < RXX_BUFFER_LEN; i++) {
+  for (i = 0; i < kRxxBufferLen; i++) {
     stt->Rxx16_vectorw32[i] = (int32_t)1000; /* -54dBm0 */
   }
-  stt->Rxx160w32 =
-      125 * RXX_BUFFER_LEN; /* (stt->Rxx16_vectorw32[0]>>3) = 125 */
+  stt->Rxx160w32 = 125 * kRxxBufferLen; /* (stt->Rxx16_vectorw32[0]>>3) = 125 */
 
   stt->Rxx16pos = 0;
   stt->Rxx16_LPw32 = (int32_t)16284; /* Q(-4) */
@@ -1274,10 +1211,6 @@
   }
   stt->inQueue = 0;
 
-#ifdef MIC_LEVEL_FEEDBACK
-  stt->targetIdxOffset = 0;
-#endif
-
   WebRtcSpl_MemSetW32(stt->filterState, 0, 8);
 
   stt->initFlag = kInitCheck;
@@ -1301,3 +1234,5 @@
     return 0;
   }
 }
+
+}  // namespace webrtc
diff --git a/modules/audio_processing/agc/legacy/analog_agc.h b/modules/audio_processing/agc/legacy/analog_agc.h
index b36edfe..22cd924 100644
--- a/modules/audio_processing/agc/legacy/analog_agc.h
+++ b/modules/audio_processing/agc/legacy/analog_agc.h
@@ -11,11 +11,12 @@
 #ifndef MODULES_AUDIO_PROCESSING_AGC_LEGACY_ANALOG_AGC_H_
 #define MODULES_AUDIO_PROCESSING_AGC_LEGACY_ANALOG_AGC_H_
 
-//#define MIC_LEVEL_FEEDBACK
 
 #include "modules/audio_processing/agc/legacy/digital_agc.h"
 #include "modules/audio_processing/agc/legacy/gain_control.h"
 
+namespace webrtc {
+
 /* Analog Automatic Gain Control variables:
  * Constant declarations (inner limits inside which no changes are done)
  * In the beginning the range is narrower to widen as soon as the measure
@@ -28,7 +29,7 @@
  * of our measure Rxx160_LP. Remember that the levels are in blocks of 16 in
  * Q(-7). (Example matlab code: round(db2pow(-21.2)*16/2^7) )
  */
-#define RXX_BUFFER_LEN 10
+constexpr int16_t kRxxBufferLen = 10;
 
 static const int16_t kMsecSpeechInner = 520;
 static const int16_t kMsecSpeechOuter = 340;
@@ -54,17 +55,14 @@
 
   // Target level parameters
   // Based on the above: analogTargetLevel = round((32767*10^(-22/20))^2*16/2^7)
-  int32_t analogTargetLevel;    // = RXX_BUFFER_LEN * 846805;       -22 dBfs
-  int32_t startUpperLimit;      // = RXX_BUFFER_LEN * 1066064;      -21 dBfs
-  int32_t startLowerLimit;      // = RXX_BUFFER_LEN * 672641;       -23 dBfs
-  int32_t upperPrimaryLimit;    // = RXX_BUFFER_LEN * 1342095;      -20 dBfs
-  int32_t lowerPrimaryLimit;    // = RXX_BUFFER_LEN * 534298;       -24 dBfs
-  int32_t upperSecondaryLimit;  // = RXX_BUFFER_LEN * 2677832;      -17 dBfs
-  int32_t lowerSecondaryLimit;  // = RXX_BUFFER_LEN * 267783;       -27 dBfs
+  int32_t analogTargetLevel;    // = kRxxBufferLen * 846805;       -22 dBfs
+  int32_t startUpperLimit;      // = kRxxBufferLen * 1066064;      -21 dBfs
+  int32_t startLowerLimit;      // = kRxxBufferLen * 672641;       -23 dBfs
+  int32_t upperPrimaryLimit;    // = kRxxBufferLen * 1342095;      -20 dBfs
+  int32_t lowerPrimaryLimit;    // = kRxxBufferLen * 534298;       -24 dBfs
+  int32_t upperSecondaryLimit;  // = kRxxBufferLen * 2677832;      -17 dBfs
+  int32_t lowerSecondaryLimit;  // = kRxxBufferLen * 267783;       -27 dBfs
   uint16_t targetIdx;           // Table index for corresponding target level
-#ifdef MIC_LEVEL_FEEDBACK
-  uint16_t targetIdxOffset;  // Table index offset for level compensation
-#endif
   int16_t analogTarget;  // Digital reference level in ENV scale
 
   // Analog AGC specific variables
@@ -75,7 +73,7 @@
   int32_t Rxx16_LPw32;     // Low pass filtered subframe energies
   int32_t Rxx160_LPw32;    // Low pass filtered frame energies
   int32_t Rxx16_LPw32Max;  // Keeps track of largest energy subframe
-  int32_t Rxx16_vectorw32[RXX_BUFFER_LEN];  // Array with subframe energies
+  int32_t Rxx16_vectorw32[kRxxBufferLen];  // Array with subframe energies
   int32_t Rxx16w32_array[2][5];  // Energy values of microphone signal
   int32_t env[2][10];            // Envelope values of subframes
 
@@ -108,10 +106,6 @@
   int32_t lastInMicLevel;
 
   int16_t scale;  // Scale factor for internal volume levels
-#ifdef MIC_LEVEL_FEEDBACK
-  int16_t numBlocksMicLvlSat;
-  uint8_t micLvlSat;
-#endif
   // Structs for VAD and digital_agc
   AgcVad vadMic;
   DigitalAgc digitalAgc;
@@ -119,4 +113,6 @@
   int16_t lowLevelSignal;
 } LegacyAgc;
 
+}  // namespace webrtc
+
 #endif  // MODULES_AUDIO_PROCESSING_AGC_LEGACY_ANALOG_AGC_H_
diff --git a/modules/audio_processing/agc/legacy/digital_agc.c b/modules/audio_processing/agc/legacy/digital_agc.cc
similarity index 94%
rename from modules/audio_processing/agc/legacy/digital_agc.c
rename to modules/audio_processing/agc/legacy/digital_agc.cc
index e408b15..185e849 100644
--- a/modules/audio_processing/agc/legacy/digital_agc.c
+++ b/modules/audio_processing/agc/legacy/digital_agc.cc
@@ -8,16 +8,16 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-/* digital_agc.c
- *
- */
-
 #include "modules/audio_processing/agc/legacy/digital_agc.h"
 
 #include <string.h>
 
-#include "rtc_base/checks.h"
 #include "modules/audio_processing/agc/legacy/gain_control.h"
+#include "rtc_base/checks.h"
+
+namespace webrtc {
+
+namespace {
 
 // To generate the gaintable, copy&paste the following lines to a Matlab window:
 // MaxGain = 6; MinGain = 0; CompRatio = 3; Knee = 1;
@@ -55,12 +55,19 @@
 
 static const int16_t kAvgDecayTime = 250;  // frames; < 3000
 
+// the 32 most significant bits of A(19) * B(26) >> 13
+#define AGC_MUL32(A, B) (((B) >> 13) * (A) + (((0x00001FFF & (B)) * (A)) >> 13))
+// C + the 32 most significant bits of A * B
+#define AGC_SCALEDIFF32(A, B, C) \
+  ((C) + ((B) >> 16) * (A) + (((0x0000FFFF & (B)) * (A)) >> 16))
+
+}  // namespace
+
 int32_t WebRtcAgc_CalculateGainTable(int32_t* gainTable,       // Q16
                                      int16_t digCompGaindB,    // Q0
                                      int16_t targetLevelDbfs,  // Q0
                                      uint8_t limiterEnable,
-                                     int16_t analogTarget)  // Q0
-{
+                                     int16_t analogTarget) {  // Q0
   // This function generates the compressor gain table used in the fixed digital
   // part.
   uint32_t tmpU32no1, tmpU32no2, absInLevel, logApprox;
@@ -186,8 +193,7 @@
     // Calculate ratio
     // Shift |numFIX| as much as possible.
     // Ensure we avoid wrap-around in |den| as well.
-    if (numFIX > (den >> 8) || -numFIX > (den >> 8))  // |den| is Q8.
-    {
+    if (numFIX > (den >> 8) || -numFIX > (den >> 8)) {  // |den| is Q8.
       zeros = WebRtcSpl_NormW32(numFIX);
     } else {
       zeros = WebRtcSpl_NormW32(den) + 8;
@@ -196,7 +202,7 @@
 
     // Shift den so we end up in Qy1
     tmp32no1 = WEBRTC_SPL_SHIFT_W32(den, zeros - 9);  // Q(zeros - 1)
-    y32 = numFIX / tmp32no1;  // in Q15
+    y32 = numFIX / tmp32no1;                          // in Q15
     // This is to do rounding in Q14.
     y32 = y32 >= 0 ? (y32 + 1) >> 1 : -((-y32 + 1) >> 1);
 
@@ -394,8 +400,9 @@
     tmp32 = ((uint32_t)cur_level << zeros) & 0x7FFFFFFF;
     frac = (int16_t)(tmp32 >> 19);  // Q12.
     // Interpolate between gainTable[zeros] and gainTable[zeros-1].
-    tmp32 = ((stt->gainTable[zeros - 1] - stt->gainTable[zeros]) *
-             (int64_t)frac) >> 12;
+    tmp32 =
+        ((stt->gainTable[zeros - 1] - stt->gainTable[zeros]) * (int64_t)frac) >>
+        12;
     gains[k + 1] = stt->gainTable[zeros] + tmp32;
   }
 
@@ -476,8 +483,10 @@
   return 0;
 }
 
-int32_t WebRtcAgc_ApplyDigitalGains(const int32_t gains[11], size_t num_bands,
-                                    uint32_t FS, const int16_t* const* in_near,
+int32_t WebRtcAgc_ApplyDigitalGains(const int32_t gains[11],
+                                    size_t num_bands,
+                                    uint32_t FS,
+                                    const int16_t* const* in_near,
                                     int16_t* const* out) {
   // Apply gain
   // handle first sub frame separately
@@ -531,11 +540,9 @@
         tmp64 = tmp64 >> 16;
         if (tmp64 > 32767) {
           out[i][k * L + n] = 32767;
-        }
-        else if (tmp64 < -32768) {
+        } else if (tmp64 < -32768) {
           out[i][k * L + n] = -32768;
-        }
-        else {
+        } else {
           out[i][k * L + n] = (int16_t)(tmp64);
         }
       }
@@ -572,10 +579,9 @@
   }
 }
 
-int16_t WebRtcAgc_ProcessVad(AgcVad* state,      // (i) VAD state
-                             const int16_t* in,  // (i) Speech signal
-                             size_t nrSamples)   // (i) number of samples
-{
+int16_t WebRtcAgc_ProcessVad(AgcVad* state,       // (i) VAD state
+                             const int16_t* in,   // (i) Speech signal
+                             size_t nrSamples) {  // (i) number of samples
   uint32_t nrg;
   int32_t out, tmp32, tmp32b;
   uint16_t tmpU16;
@@ -704,3 +710,5 @@
 
   return state->logRatio;  // Q10
 }
+
+}  // namespace webrtc
diff --git a/modules/audio_processing/agc/legacy/digital_agc.h b/modules/audio_processing/agc/legacy/digital_agc.h
index 5a2bbfe..223c74b 100644
--- a/modules/audio_processing/agc/legacy/digital_agc.h
+++ b/modules/audio_processing/agc/legacy/digital_agc.h
@@ -13,11 +13,7 @@
 
 #include "common_audio/signal_processing/include/signal_processing_library.h"
 
-// the 32 most significant bits of A(19) * B(26) >> 13
-#define AGC_MUL32(A, B) (((B) >> 13) * (A) + (((0x00001FFF & (B)) * (A)) >> 13))
-// C + the 32 most significant bits of A * B
-#define AGC_SCALEDIFF32(A, B, C) \
-  ((C) + ((B) >> 16) * (A) + (((0x0000FFFF & (B)) * (A)) >> 16))
+namespace webrtc {
 
 typedef struct {
   int32_t downState[8];
@@ -74,4 +70,6 @@
                                      uint8_t limiterEnable,
                                      int16_t analogTarget);
 
+}  // namespace webrtc
+
 #endif  // MODULES_AUDIO_PROCESSING_AGC_LEGACY_DIGITAL_AGC_H_
diff --git a/modules/audio_processing/agc/legacy/gain_control.h b/modules/audio_processing/agc/legacy/gain_control.h
index 588874b..abb8e63 100644
--- a/modules/audio_processing/agc/legacy/gain_control.h
+++ b/modules/audio_processing/agc/legacy/gain_control.h
@@ -11,15 +11,7 @@
 #ifndef MODULES_AUDIO_PROCESSING_AGC_LEGACY_GAIN_CONTROL_H_
 #define MODULES_AUDIO_PROCESSING_AGC_LEGACY_GAIN_CONTROL_H_
 
-// Errors
-#define AGC_UNSPECIFIED_ERROR 18000
-#define AGC_UNSUPPORTED_FUNCTION_ERROR 18001
-#define AGC_UNINITIALIZED_ERROR 18002
-#define AGC_NULL_POINTER_ERROR 18003
-#define AGC_BAD_PARAMETER_ERROR 18004
-
-// Warnings
-#define AGC_BAD_PARAMETER_WARNING 18050
+namespace webrtc {
 
 enum {
   kAgcModeUnchanged,
@@ -36,10 +28,6 @@
   uint8_t limiterEnable;      // default kAgcTrue (on)
 } WebRtcAgcConfig;
 
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
 /*
  * This function analyses the number of samples passed to
  * farend and produces any error code that could arise.
@@ -260,8 +248,6 @@
                    int16_t agcMode,
                    uint32_t fs);
 
-#if defined(__cplusplus)
-}
-#endif
+}  // namespace webrtc
 
 #endif  // MODULES_AUDIO_PROCESSING_AGC_LEGACY_GAIN_CONTROL_H_
