AGC2 new data dumps

Bug: webrtc:7494
Change-Id: Id288dd426e1c2754805bc548fbffe0eaeaacf3da
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/213420
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33605}
This commit is contained in:
Alessio Bazzica 2021-03-31 15:16:05 +02:00 committed by Commit Bot
parent 841d74ea80
commit 8aaa604375
6 changed files with 24 additions and 15 deletions

View File

@ -136,6 +136,8 @@ void AdaptiveDigitalGainApplier::Process(const FrameInfo& info,
} else if (frames_to_gain_increase_allowed_ > 0) { } else if (frames_to_gain_increase_allowed_ > 0) {
frames_to_gain_increase_allowed_--; frames_to_gain_increase_allowed_--;
} }
apm_data_dumper_->DumpRaw("agc2_frames_to_gain_increase_allowed",
frames_to_gain_increase_allowed_);
const float gain_change_this_frame_db = ComputeGainChangeThisFrameDb( const float gain_change_this_frame_db = ComputeGainChangeThisFrameDb(
target_gain_db, last_gain_db_, target_gain_db, last_gain_db_,

View File

@ -186,7 +186,7 @@ void AdaptiveModeLevelEstimator::ResetLevelEstimatorState(
void AdaptiveModeLevelEstimator::DumpDebugData() const { void AdaptiveModeLevelEstimator::DumpDebugData() const {
apm_data_dumper_->DumpRaw("agc2_adaptive_level_estimate_dbfs", level_dbfs_); apm_data_dumper_->DumpRaw("agc2_adaptive_level_estimate_dbfs", level_dbfs_);
apm_data_dumper_->DumpRaw("agc2_adaptive_num_adjacent_speech_frames_", apm_data_dumper_->DumpRaw("agc2_adaptive_num_adjacent_speech_frames",
num_adjacent_speech_frames_); num_adjacent_speech_frames_);
apm_data_dumper_->DumpRaw("agc2_adaptive_preliminary_level_estimate_num", apm_data_dumper_->DumpRaw("agc2_adaptive_preliminary_level_estimate_num",
preliminary_state_.level_dbfs.numerator); preliminary_state_.level_dbfs.numerator);
@ -194,6 +194,10 @@ void AdaptiveModeLevelEstimator::DumpDebugData() const {
preliminary_state_.level_dbfs.denominator); preliminary_state_.level_dbfs.denominator);
apm_data_dumper_->DumpRaw("agc2_adaptive_preliminary_saturation_margin_db", apm_data_dumper_->DumpRaw("agc2_adaptive_preliminary_saturation_margin_db",
preliminary_state_.saturation_protector.margin_db); preliminary_state_.saturation_protector.margin_db);
apm_data_dumper_->DumpRaw("agc2_adaptive_preliminary_time_to_full_buffer_ms",
preliminary_state_.time_to_full_buffer_ms);
apm_data_dumper_->DumpRaw("agc2_adaptive_reliable_time_to_full_buffer_ms",
reliable_state_.time_to_full_buffer_ms);
} }
} // namespace webrtc } // namespace webrtc

View File

@ -45,6 +45,7 @@ constexpr float kInitialSpeechLevelEstimateDbfs = -30.0f;
// Robust VAD probability and speech decisions. // Robust VAD probability and speech decisions.
constexpr int kDefaultVadRnnResetPeriodMs = 1500; constexpr int kDefaultVadRnnResetPeriodMs = 1500;
static_assert(kDefaultVadRnnResetPeriodMs % kFrameDurationMs == 0, "");
constexpr float kDefaultSmoothedVadProbabilityAttack = 1.0f; constexpr float kDefaultSmoothedVadProbabilityAttack = 1.0f;
constexpr int kDefaultLevelEstimatorAdjacentSpeechFramesThreshold = 1; constexpr int kDefaultLevelEstimatorAdjacentSpeechFramesThreshold = 1;

View File

@ -125,9 +125,11 @@ void Limiter::Process(AudioFrameView<float> signal) {
last_scaling_factor_ = scaling_factors_.back(); last_scaling_factor_ = scaling_factors_.back();
// Dump data for debug. // Dump data for debug.
apm_data_dumper_->DumpRaw("agc2_gain_curve_applier_scaling_factors", apm_data_dumper_->DumpRaw("agc2_limiter_last_scaling_factor",
samples_per_channel, last_scaling_factor_);
per_sample_scaling_factors_.data()); apm_data_dumper_->DumpRaw(
"agc2_limiter_region",
static_cast<int>(interp_gain_curve_.get_stats().region));
} }
InterpolatedGainCurve::Stats Limiter::GetGainCurveStats() const { InterpolatedGainCurve::Stats Limiter::GetGainCurveStats() const {

View File

@ -24,14 +24,13 @@ namespace webrtc {
int GainController2::instance_count_ = 0; int GainController2::instance_count_ = 0;
GainController2::GainController2() GainController2::GainController2()
: data_dumper_( : data_dumper_(rtc::AtomicOps::Increment(&instance_count_)),
new ApmDataDumper(rtc::AtomicOps::Increment(&instance_count_))),
gain_applier_(/*hard_clip_samples=*/false, gain_applier_(/*hard_clip_samples=*/false,
/*initial_gain_factor=*/0.f), /*initial_gain_factor=*/0.f),
limiter_(static_cast<size_t>(48000), data_dumper_.get(), "Agc2"), limiter_(static_cast<size_t>(48000), &data_dumper_, "Agc2"),
calls_since_last_limiter_log_(0) { calls_since_last_limiter_log_(0) {
if (config_.adaptive_digital.enabled) { if (config_.adaptive_digital.enabled) {
adaptive_agc_.reset(new AdaptiveAgc(data_dumper_.get())); adaptive_agc_ = std::make_unique<AdaptiveAgc>(&data_dumper_);
} }
} }
@ -43,12 +42,13 @@ void GainController2::Initialize(int sample_rate_hz) {
sample_rate_hz == AudioProcessing::kSampleRate32kHz || sample_rate_hz == AudioProcessing::kSampleRate32kHz ||
sample_rate_hz == AudioProcessing::kSampleRate48kHz); sample_rate_hz == AudioProcessing::kSampleRate48kHz);
limiter_.SetSampleRate(sample_rate_hz); limiter_.SetSampleRate(sample_rate_hz);
data_dumper_->InitiateNewSetOfRecordings(); data_dumper_.InitiateNewSetOfRecordings();
data_dumper_->DumpRaw("sample_rate_hz", sample_rate_hz); data_dumper_.DumpRaw("sample_rate_hz", sample_rate_hz);
calls_since_last_limiter_log_ = 0; calls_since_last_limiter_log_ = 0;
} }
void GainController2::Process(AudioBuffer* audio) { void GainController2::Process(AudioBuffer* audio) {
data_dumper_.DumpRaw("agc2_notified_analog_level", analog_level_);
AudioFrameView<float> float_frame(audio->channels(), audio->num_channels(), AudioFrameView<float> float_frame(audio->channels(), audio->num_channels(),
audio->num_frames()); audio->num_frames());
// Apply fixed gain first, then the adaptive one. // Apply fixed gain first, then the adaptive one.
@ -90,7 +90,7 @@ void GainController2::ApplyConfig(
} }
gain_applier_.SetGainFactor(DbToRatio(config_.fixed_digital.gain_db)); gain_applier_.SetGainFactor(DbToRatio(config_.fixed_digital.gain_db));
if (config_.adaptive_digital.enabled) { if (config_.adaptive_digital.enabled) {
adaptive_agc_.reset(new AdaptiveAgc(data_dumper_.get(), config_)); adaptive_agc_ = std::make_unique<AdaptiveAgc>(&data_dumper_, config_);
} else { } else {
adaptive_agc_.reset(); adaptive_agc_.reset();
} }

View File

@ -18,11 +18,11 @@
#include "modules/audio_processing/agc2/gain_applier.h" #include "modules/audio_processing/agc2/gain_applier.h"
#include "modules/audio_processing/agc2/limiter.h" #include "modules/audio_processing/agc2/limiter.h"
#include "modules/audio_processing/include/audio_processing.h" #include "modules/audio_processing/include/audio_processing.h"
#include "modules/audio_processing/logging/apm_data_dumper.h"
#include "rtc_base/constructor_magic.h" #include "rtc_base/constructor_magic.h"
namespace webrtc { namespace webrtc {
class ApmDataDumper;
class AudioBuffer; class AudioBuffer;
// Gain Controller 2 aims to automatically adjust levels by acting on the // Gain Controller 2 aims to automatically adjust levels by acting on the
@ -30,6 +30,8 @@ class AudioBuffer;
class GainController2 { class GainController2 {
public: public:
GainController2(); GainController2();
GainController2(const GainController2&) = delete;
GainController2& operator=(const GainController2&) = delete;
~GainController2(); ~GainController2();
void Initialize(int sample_rate_hz); void Initialize(int sample_rate_hz);
@ -41,15 +43,13 @@ class GainController2 {
private: private:
static int instance_count_; static int instance_count_;
std::unique_ptr<ApmDataDumper> data_dumper_; ApmDataDumper data_dumper_;
AudioProcessing::Config::GainController2 config_; AudioProcessing::Config::GainController2 config_;
GainApplier gain_applier_; GainApplier gain_applier_;
std::unique_ptr<AdaptiveAgc> adaptive_agc_; std::unique_ptr<AdaptiveAgc> adaptive_agc_;
Limiter limiter_; Limiter limiter_;
int calls_since_last_limiter_log_; int calls_since_last_limiter_log_;
int analog_level_ = -1; int analog_level_ = -1;
RTC_DISALLOW_COPY_AND_ASSIGN(GainController2);
}; };
} // namespace webrtc } // namespace webrtc