diff --git a/modules/audio_processing/gain_controller2.cc b/modules/audio_processing/gain_controller2.cc index 8a22fed97e..92cda69f0a 100644 --- a/modules/audio_processing/gain_controller2.cc +++ b/modules/audio_processing/gain_controller2.cc @@ -20,17 +20,23 @@ #include "rtc_base/strings/string_builder.h" namespace webrtc { +namespace { +constexpr int kLogLimiterStatsPeriodMs = 30'000; +constexpr int kFrameLengthMs = 10; +constexpr int kLogLimiterStatsPeriodNumFrames = + kLogLimiterStatsPeriodMs / kFrameLengthMs; +} // namespace int GainController2::instance_count_ = 0; GainController2::GainController2() : data_dumper_(rtc::AtomicOps::Increment(&instance_count_)), - gain_applier_(/*hard_clip_samples=*/false, - /*initial_gain_factor=*/0.0f), + fixed_gain_applier_(/*hard_clip_samples=*/false, + /*initial_gain_factor=*/0.0f), limiter_(static_cast(48000), &data_dumper_, "Agc2"), calls_since_last_limiter_log_(0) { if (config_.adaptive_digital.enabled) { - adaptive_agc_ = + adaptive_digital_controller_ = std::make_unique(&data_dumper_, config_.adaptive_digital); } } @@ -43,8 +49,8 @@ void GainController2::Initialize(int sample_rate_hz, int num_channels) { sample_rate_hz == AudioProcessing::kSampleRate32kHz || sample_rate_hz == AudioProcessing::kSampleRate48kHz); limiter_.SetSampleRate(sample_rate_hz); - if (adaptive_agc_) { - adaptive_agc_->Initialize(sample_rate_hz, num_channels); + if (adaptive_digital_controller_) { + adaptive_digital_controller_->Initialize(sample_rate_hz, num_channels); } data_dumper_.InitiateNewSetOfRecordings(); data_dumper_.DumpRaw("sample_rate_hz", sample_rate_hz); @@ -55,16 +61,15 @@ void GainController2::Process(AudioBuffer* audio) { data_dumper_.DumpRaw("agc2_notified_analog_level", analog_level_); AudioFrameView float_frame(audio->channels(), audio->num_channels(), audio->num_frames()); - // Apply fixed gain first, then the adaptive one. - gain_applier_.ApplyGain(float_frame); - if (adaptive_agc_) { - adaptive_agc_->Process(float_frame, limiter_.LastAudioLevel()); + fixed_gain_applier_.ApplyGain(float_frame); + if (adaptive_digital_controller_) { + adaptive_digital_controller_->Process(float_frame, + limiter_.LastAudioLevel()); } limiter_.Process(float_frame); - // Log limiter stats every 30 seconds. - ++calls_since_last_limiter_log_; - if (calls_since_last_limiter_log_ == 3000) { + // Periodically log limiter stats. + if (++calls_since_last_limiter_log_ == kLogLimiterStatsPeriodNumFrames) { calls_since_last_limiter_log_ = 0; InterpolatedGainCurve::Stats stats = limiter_.GetGainCurveStats(); RTC_LOG(LS_INFO) << "AGC2 limiter stats" @@ -76,8 +81,8 @@ void GainController2::Process(AudioBuffer* audio) { } void GainController2::NotifyAnalogLevel(int level) { - if (analog_level_ != level && adaptive_agc_) { - adaptive_agc_->HandleInputGainChange(); + if (analog_level_ != level && adaptive_digital_controller_) { + adaptive_digital_controller_->HandleInputGainChange(); } analog_level_ = level; } @@ -92,12 +97,12 @@ void GainController2::ApplyConfig( // large changes of the fixed gain. limiter_.Reset(); } - gain_applier_.SetGainFactor(DbToRatio(config_.fixed_digital.gain_db)); + fixed_gain_applier_.SetGainFactor(DbToRatio(config_.fixed_digital.gain_db)); if (config_.adaptive_digital.enabled) { - adaptive_agc_ = + adaptive_digital_controller_ = std::make_unique(&data_dumper_, config_.adaptive_digital); } else { - adaptive_agc_.reset(); + adaptive_digital_controller_.reset(); } } diff --git a/modules/audio_processing/gain_controller2.h b/modules/audio_processing/gain_controller2.h index ce758c7834..de6b8d8407 100644 --- a/modules/audio_processing/gain_controller2.h +++ b/modules/audio_processing/gain_controller2.h @@ -45,8 +45,8 @@ class GainController2 { static int instance_count_; ApmDataDumper data_dumper_; AudioProcessing::Config::GainController2 config_; - GainApplier gain_applier_; - std::unique_ptr adaptive_agc_; + GainApplier fixed_gain_applier_; + std::unique_ptr adaptive_digital_controller_; Limiter limiter_; int calls_since_last_limiter_log_; int analog_level_ = -1;