Gain metrics for digital adaptive AGC.
We add 2 metrics for measuring applied digital gain to AgcManagerDirect. We also add an applied gain and an estimated noise metric to Agc2. Chromium histogram CL is https://chromium-review.googlesource.com/c/chromium/src/+/1170833 Bug: webrtc:7494 Change-Id: Ie40873f9e43bc7d34d8f5473cd73bd47eb84e855 Reviewed-on: https://webrtc-review.googlesource.com/93468 Reviewed-by: Ivo Creusen <ivoc@webrtc.org> Commit-Queue: Alex Loiko <aleloi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#24290}
This commit is contained in:
@ -454,6 +454,13 @@ void AgcManagerDirect::UpdateGain() {
|
||||
}
|
||||
|
||||
void AgcManagerDirect::UpdateCompressor() {
|
||||
calls_since_last_gain_log_++;
|
||||
if (calls_since_last_gain_log_ == 100) {
|
||||
calls_since_last_gain_log_ = 0;
|
||||
RTC_HISTOGRAM_COUNTS_LINEAR("WebRTC.Audio.Agc.DigitalGainApplied",
|
||||
compression_, 0, kMaxCompressionGain,
|
||||
kMaxCompressionGain + 1);
|
||||
}
|
||||
if (compression_ == target_compression_) {
|
||||
return;
|
||||
}
|
||||
@ -478,6 +485,9 @@ void AgcManagerDirect::UpdateCompressor() {
|
||||
|
||||
// Set the new compression gain.
|
||||
if (new_compression != compression_) {
|
||||
RTC_HISTOGRAM_COUNTS_LINEAR("WebRTC.Audio.Agc.DigitalGainUpdated",
|
||||
new_compression, 0, kMaxCompressionGain,
|
||||
kMaxCompressionGain + 1);
|
||||
compression_ = new_compression;
|
||||
compression_accumulator_ = new_compression;
|
||||
if (gctrl_->set_compression_gain_db(compression_) != 0) {
|
||||
|
||||
@ -126,6 +126,7 @@ class AgcManagerDirect final {
|
||||
const bool disable_digital_adaptive_;
|
||||
int startup_min_level_;
|
||||
const int clipped_level_min_;
|
||||
int calls_since_last_gain_log_ = 0;
|
||||
|
||||
std::unique_ptr<DebugFile> file_preproc_;
|
||||
std::unique_ptr<DebugFile> file_postproc_;
|
||||
|
||||
@ -65,6 +65,7 @@ rtc_source_set("adaptive_digital") {
|
||||
"../../../rtc_base:checks",
|
||||
"../../../rtc_base:rtc_base_approved",
|
||||
"../../../rtc_base:safe_minmax",
|
||||
"../../../system_wrappers:metrics_api",
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
#include "modules/audio_processing/agc2/agc2_common.h"
|
||||
#include "modules/audio_processing/logging/apm_data_dumper.h"
|
||||
#include "rtc_base/numerics/safe_minmax.h"
|
||||
#include "system_wrappers/include/metrics.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
@ -76,6 +77,15 @@ void AdaptiveDigitalGainApplier::Process(
|
||||
float input_noise_level_dbfs,
|
||||
const VadWithLevel::LevelAndProbability vad_result,
|
||||
AudioFrameView<float> float_frame) {
|
||||
calls_since_last_gain_log_++;
|
||||
if (calls_since_last_gain_log_ == 100) {
|
||||
calls_since_last_gain_log_ = 0;
|
||||
RTC_HISTOGRAM_COUNTS_LINEAR("WebRTC.Audio.Agc2.DigitalGainApplied",
|
||||
last_gain_db_, 0, kMaxGainDb, kMaxGainDb + 1);
|
||||
RTC_HISTOGRAM_COUNTS_LINEAR("WebRTC.Audio.Agc2.EstimatedNoiseLevel",
|
||||
input_noise_level_dbfs, 0, 100, 101);
|
||||
}
|
||||
|
||||
input_level_dbfs = std::min(input_level_dbfs, 0.f);
|
||||
|
||||
RTC_DCHECK_GE(input_level_dbfs, -150.f);
|
||||
|
||||
@ -32,6 +32,7 @@ class AdaptiveDigitalGainApplier {
|
||||
private:
|
||||
float last_gain_db_ = kInitialAdaptiveDigitalGainDb;
|
||||
GainApplier gain_applier_;
|
||||
int calls_since_last_gain_log_ = 0;
|
||||
|
||||
// For some combinations of noise and speech probability, increasing
|
||||
// the level is not allowed. Since we may get VAD results in bursts,
|
||||
|
||||
Reference in New Issue
Block a user