AGC2 adaptive digital controller config: new params

This CL adds and wires up the following parameters:
- VAD probability attack used in `VadLevelAnalyzer`
- Adjacent spech frames threshold used in `AdaptiveModeLevelEstimator`
- Initial saturation margin used in `AdaptiveModeLevelEstimator`

The deprecated ctor in `AdaptiveModeLevelEstimator` is removed.

Tested: bit-exactness verified with audioproc_f

Bug: webrtc:7494
Change-Id: Idf94aaadba1476757f845e696bfb47ff6252d5f0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/186048
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32265}
This commit is contained in:
Alessio Bazzica
2020-09-30 22:54:00 +02:00
committed by Commit Bot
parent 1309c77a48
commit 59f1d1e36d
6 changed files with 14 additions and 26 deletions

View File

@ -65,6 +65,7 @@ rtc_library("adaptive_digital") {
"../../../api:array_view", "../../../api:array_view",
"../../../common_audio", "../../../common_audio",
"../../../rtc_base:checks", "../../../rtc_base:checks",
"../../../rtc_base:logging",
"../../../rtc_base:rtc_base_approved", "../../../rtc_base:rtc_base_approved",
"../../../rtc_base:safe_compare", "../../../rtc_base:safe_compare",
"../../../rtc_base:safe_minmax", "../../../rtc_base:safe_minmax",

View File

@ -14,6 +14,7 @@
#include "modules/audio_processing/agc2/vad_with_level.h" #include "modules/audio_processing/agc2/vad_with_level.h"
#include "modules/audio_processing/logging/apm_data_dumper.h" #include "modules/audio_processing/logging/apm_data_dumper.h"
#include "rtc_base/checks.h" #include "rtc_base/checks.h"
#include "rtc_base/logging.h"
namespace webrtc { namespace webrtc {
namespace { namespace {
@ -42,14 +43,20 @@ AdaptiveAgc::AdaptiveAgc(ApmDataDumper* apm_data_dumper,
: speech_level_estimator_( : speech_level_estimator_(
apm_data_dumper, apm_data_dumper,
config.adaptive_digital.level_estimator, config.adaptive_digital.level_estimator,
config.adaptive_digital.use_saturation_protector, config.adaptive_digital
.level_estimator_adjacent_speech_frames_threshold,
config.adaptive_digital.initial_saturation_margin_db,
config.adaptive_digital.extra_saturation_margin_db), config.adaptive_digital.extra_saturation_margin_db),
vad_(config.adaptive_digital.vad_probability_attack),
gain_applier_(apm_data_dumper, gain_applier_(apm_data_dumper,
config.adaptive_digital config.adaptive_digital
.gain_applier_adjacent_speech_frames_threshold), .gain_applier_adjacent_speech_frames_threshold),
apm_data_dumper_(apm_data_dumper), apm_data_dumper_(apm_data_dumper),
noise_level_estimator_(apm_data_dumper) { noise_level_estimator_(apm_data_dumper) {
RTC_DCHECK(apm_data_dumper); RTC_DCHECK(apm_data_dumper);
if (!config.adaptive_digital.use_saturation_protector) {
RTC_LOG(LS_WARNING) << "The saturation protector cannot be disabled.";
}
} }
AdaptiveAgc::~AdaptiveAgc() = default; AdaptiveAgc::~AdaptiveAgc() = default;

View File

@ -68,22 +68,6 @@ AdaptiveModeLevelEstimator::AdaptiveModeLevelEstimator(
kDefaultInitialSaturationMarginDb, kDefaultInitialSaturationMarginDb,
kDefaultExtraSaturationMarginDb) {} kDefaultExtraSaturationMarginDb) {}
AdaptiveModeLevelEstimator::AdaptiveModeLevelEstimator(
ApmDataDumper* apm_data_dumper,
AudioProcessing::Config::GainController2::LevelEstimator level_estimator,
bool use_saturation_protector,
float extra_saturation_margin_db)
: AdaptiveModeLevelEstimator(
apm_data_dumper,
level_estimator,
kDefaultLevelEstimatorAdjacentSpeechFramesThreshold,
kDefaultInitialSaturationMarginDb,
extra_saturation_margin_db) {
if (!use_saturation_protector) {
RTC_LOG(LS_WARNING) << "The saturation protector cannot be disabled.";
}
}
AdaptiveModeLevelEstimator::AdaptiveModeLevelEstimator( AdaptiveModeLevelEstimator::AdaptiveModeLevelEstimator(
ApmDataDumper* apm_data_dumper, ApmDataDumper* apm_data_dumper,
AudioProcessing::Config::GainController2::LevelEstimator level_estimator, AudioProcessing::Config::GainController2::LevelEstimator level_estimator,

View File

@ -29,14 +29,6 @@ class AdaptiveModeLevelEstimator {
AdaptiveModeLevelEstimator(const AdaptiveModeLevelEstimator&) = delete; AdaptiveModeLevelEstimator(const AdaptiveModeLevelEstimator&) = delete;
AdaptiveModeLevelEstimator& operator=(const AdaptiveModeLevelEstimator&) = AdaptiveModeLevelEstimator& operator=(const AdaptiveModeLevelEstimator&) =
delete; delete;
// Deprecated ctor. `use_saturation_protector` is ignored and the saturation
// protector will be used regardless of what is passed.
AdaptiveModeLevelEstimator(
ApmDataDumper* apm_data_dumper,
AudioProcessing::Config::GainController2::LevelEstimator level_estimator,
bool use_saturation_protector,
float extra_saturation_margin_db);
// TODO(crbug.com/webrtc/7494): Replace ctor above with the one below.
AdaptiveModeLevelEstimator( AdaptiveModeLevelEstimator(
ApmDataDumper* apm_data_dumper, ApmDataDumper* apm_data_dumper,
AudioProcessing::Config::GainController2::LevelEstimator level_estimator, AudioProcessing::Config::GainController2::LevelEstimator level_estimator,

View File

@ -49,7 +49,7 @@ struct TestLevelEstimator {
estimator(std::make_unique<AdaptiveModeLevelEstimator>( estimator(std::make_unique<AdaptiveModeLevelEstimator>(
&data_dumper, &data_dumper,
AudioProcessing::Config::GainController2::LevelEstimator::kRms, AudioProcessing::Config::GainController2::LevelEstimator::kRms,
/*min_consecutive_speech_frames=*/1, /*adjacent_speech_frames_threshold=*/1,
kInitialSaturationMarginDb, kInitialSaturationMarginDb,
kExtraSaturationMarginDb)) {} kExtraSaturationMarginDb)) {}
ApmDataDumper data_dumper; ApmDataDumper data_dumper;

View File

@ -345,8 +345,12 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
} fixed_digital; } fixed_digital;
struct { struct {
bool enabled = false; bool enabled = false;
float vad_probability_attack = 1.f;
LevelEstimator level_estimator = kRms; LevelEstimator level_estimator = kRms;
int level_estimator_adjacent_speech_frames_threshold = 1;
// TODO(crbug.com/webrtc/7494): Remove `use_saturation_protector`.
bool use_saturation_protector = true; bool use_saturation_protector = true;
float initial_saturation_margin_db = 20.f;
float extra_saturation_margin_db = 2.f; float extra_saturation_margin_db = 2.f;
int gain_applier_adjacent_speech_frames_threshold = 1; int gain_applier_adjacent_speech_frames_threshold = 1;
} adaptive_digital; } adaptive_digital;