From 08d2a703fcea7bfce0230e5fcc1d5d7ad75b7d4a Mon Sep 17 00:00:00 2001 From: Alessio Bazzica Date: Fri, 20 Nov 2020 16:26:24 +0100 Subject: [PATCH] AGC2 limiter stats + config ToString missing param Bug: webrtc:7494 Change-Id: Icb6a164882af5c15c9400eb869dccbfda20b3da7 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/194324 Commit-Queue: Alessio Bazzica Reviewed-by: Jakob Ivarsson Cr-Commit-Position: refs/heads/master@{#32653} --- modules/audio_processing/gain_controller2.cc | 17 ++++++++++++++++- modules/audio_processing/gain_controller2.h | 1 + .../include/audio_processing.cc | 4 +++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/modules/audio_processing/gain_controller2.cc b/modules/audio_processing/gain_controller2.cc index 6561bebc6e..44770653e5 100644 --- a/modules/audio_processing/gain_controller2.cc +++ b/modules/audio_processing/gain_controller2.cc @@ -16,6 +16,7 @@ #include "modules/audio_processing/logging/apm_data_dumper.h" #include "rtc_base/atomic_ops.h" #include "rtc_base/checks.h" +#include "rtc_base/logging.h" #include "rtc_base/strings/string_builder.h" namespace webrtc { @@ -27,7 +28,8 @@ GainController2::GainController2() new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))), gain_applier_(/*hard_clip_samples=*/false, /*initial_gain_factor=*/0.f), - limiter_(static_cast(48000), data_dumper_.get(), "Agc2") { + limiter_(static_cast(48000), data_dumper_.get(), "Agc2"), + calls_since_last_limiter_log_(0) { if (config_.adaptive_digital.enabled) { adaptive_agc_.reset(new AdaptiveAgc(data_dumper_.get())); } @@ -43,6 +45,7 @@ void GainController2::Initialize(int sample_rate_hz) { limiter_.SetSampleRate(sample_rate_hz); data_dumper_->InitiateNewSetOfRecordings(); data_dumper_->DumpRaw("sample_rate_hz", sample_rate_hz); + calls_since_last_limiter_log_ = 0; } void GainController2::Process(AudioBuffer* audio) { @@ -54,6 +57,18 @@ void GainController2::Process(AudioBuffer* audio) { adaptive_agc_->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) { + calls_since_last_limiter_log_ = 0; + InterpolatedGainCurve::Stats stats = limiter_.GetGainCurveStats(); + RTC_LOG(LS_INFO) << "AGC2 limiter stats" + << " | identity: " << stats.look_ups_identity_region + << " | knee: " << stats.look_ups_knee_region + << " | limiter: " << stats.look_ups_limiter_region + << " | saturation: " << stats.look_ups_saturation_region; + } } void GainController2::NotifyAnalogLevel(int level) { diff --git a/modules/audio_processing/gain_controller2.h b/modules/audio_processing/gain_controller2.h index da27fdcc62..31665bdeac 100644 --- a/modules/audio_processing/gain_controller2.h +++ b/modules/audio_processing/gain_controller2.h @@ -46,6 +46,7 @@ class GainController2 { GainApplier gain_applier_; std::unique_ptr adaptive_agc_; Limiter limiter_; + int calls_since_last_limiter_log_; int analog_level_ = -1; RTC_DISALLOW_COPY_AND_ASSIGN(GainController2); diff --git a/modules/audio_processing/include/audio_processing.cc b/modules/audio_processing/include/audio_processing.cc index 04336b6113..fd741d4d2d 100644 --- a/modules/audio_processing/include/audio_processing.cc +++ b/modules/audio_processing/include/audio_processing.cc @@ -153,7 +153,9 @@ std::string AudioProcessing::Config::ToString() const { << gain_controller2.fixed_digital.gain_db << "}, adaptive_digital: { enabled: " << gain_controller2.adaptive_digital.enabled - << ", level_estimator: { type: " + << ", level_estimator: { vad_probability_attack: " + << gain_controller2.adaptive_digital.vad_probability_attack + << ", type: " << GainController2LevelEstimatorToString( gain_controller2.adaptive_digital.level_estimator) << ", adjacent_speech_frames_threshold: "