diff --git a/modules/audio_processing/gain_controller2.cc b/modules/audio_processing/gain_controller2.cc index cdfcffa9d5..fd4b411bc7 100644 --- a/modules/audio_processing/gain_controller2.cc +++ b/modules/audio_processing/gain_controller2.cc @@ -41,12 +41,14 @@ void GainController2::Initialize(int sample_rate_hz) { void GainController2::Process(AudioBuffer* audio) { AudioFrameView float_frame(audio->channels_f(), audio->num_channels(), audio->num_frames()); - adaptive_agc_.Process(float_frame); + if (adaptive_digital_mode_) { + adaptive_agc_.Process(float_frame); + } fixed_gain_controller_.Process(float_frame); } void GainController2::NotifyAnalogLevel(int level) { - if (analog_level_ != level) { + if (analog_level_ != level && adaptive_digital_mode_) { adaptive_agc_.Reset(); } analog_level_ = level; @@ -57,6 +59,7 @@ void GainController2::ApplyConfig( RTC_DCHECK(Validate(config)); config_ = config; fixed_gain_controller_.SetGain(config_.fixed_gain_db); + adaptive_digital_mode_ = config_.adaptive_digital_mode; } bool GainController2::Validate( diff --git a/modules/audio_processing/gain_controller2.h b/modules/audio_processing/gain_controller2.h index 41b7b6919e..b4727d0e77 100644 --- a/modules/audio_processing/gain_controller2.h +++ b/modules/audio_processing/gain_controller2.h @@ -47,6 +47,7 @@ class GainController2 { AudioProcessing::Config::GainController2 config_; AdaptiveAgc adaptive_agc_; int analog_level_ = -1; + bool adaptive_digital_mode_ = true; RTC_DISALLOW_COPY_AND_ASSIGN(GainController2); }; diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h index 9c750f0692..22fa92d943 100644 --- a/modules/audio_processing/include/audio_processing.h +++ b/modules/audio_processing/include/audio_processing.h @@ -273,12 +273,15 @@ class AudioProcessing : public rtc::RefCountInterface { float fixed_gain_factor = 1.f; } pre_amplifier; - // Enables the next generation AGC functionality. This feature - // replaces the standard methods of gain control in the previous - // AGC. This functionality is currently only partially - // implemented. + // Enables the next generation AGC functionality. This feature replaces the + // standard methods of gain control in the previous AGC. Enabling this + // submodule enables an adaptive digital AGC followed by a limiter. By + // setting |fixed_gain_db|, the limiter can be turned into a compressor that + // first applies a fixed gain. The adaptive digital AGC can be turned off by + // setting |adaptive_digital_mode=false|. struct GainController2 { bool enabled = false; + bool adaptive_digital_mode = true; float fixed_gain_db = 0.f; } gain_controller2;