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:
parent
841d74ea80
commit
8aaa604375
@ -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_,
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user