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:

committed by
Commit Bot

parent
1309c77a48
commit
59f1d1e36d
@ -65,6 +65,7 @@ rtc_library("adaptive_digital") {
|
||||
"../../../api:array_view",
|
||||
"../../../common_audio",
|
||||
"../../../rtc_base:checks",
|
||||
"../../../rtc_base:logging",
|
||||
"../../../rtc_base:rtc_base_approved",
|
||||
"../../../rtc_base:safe_compare",
|
||||
"../../../rtc_base:safe_minmax",
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "modules/audio_processing/agc2/vad_with_level.h"
|
||||
#include "modules/audio_processing/logging/apm_data_dumper.h"
|
||||
#include "rtc_base/checks.h"
|
||||
#include "rtc_base/logging.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
@ -42,14 +43,20 @@ AdaptiveAgc::AdaptiveAgc(ApmDataDumper* apm_data_dumper,
|
||||
: speech_level_estimator_(
|
||||
apm_data_dumper,
|
||||
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),
|
||||
vad_(config.adaptive_digital.vad_probability_attack),
|
||||
gain_applier_(apm_data_dumper,
|
||||
config.adaptive_digital
|
||||
.gain_applier_adjacent_speech_frames_threshold),
|
||||
apm_data_dumper_(apm_data_dumper),
|
||||
noise_level_estimator_(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;
|
||||
|
@ -68,22 +68,6 @@ AdaptiveModeLevelEstimator::AdaptiveModeLevelEstimator(
|
||||
kDefaultInitialSaturationMarginDb,
|
||||
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(
|
||||
ApmDataDumper* apm_data_dumper,
|
||||
AudioProcessing::Config::GainController2::LevelEstimator level_estimator,
|
||||
|
@ -29,14 +29,6 @@ class AdaptiveModeLevelEstimator {
|
||||
AdaptiveModeLevelEstimator(const AdaptiveModeLevelEstimator&) = delete;
|
||||
AdaptiveModeLevelEstimator& operator=(const AdaptiveModeLevelEstimator&) =
|
||||
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(
|
||||
ApmDataDumper* apm_data_dumper,
|
||||
AudioProcessing::Config::GainController2::LevelEstimator level_estimator,
|
||||
|
@ -49,7 +49,7 @@ struct TestLevelEstimator {
|
||||
estimator(std::make_unique<AdaptiveModeLevelEstimator>(
|
||||
&data_dumper,
|
||||
AudioProcessing::Config::GainController2::LevelEstimator::kRms,
|
||||
/*min_consecutive_speech_frames=*/1,
|
||||
/*adjacent_speech_frames_threshold=*/1,
|
||||
kInitialSaturationMarginDb,
|
||||
kExtraSaturationMarginDb)) {}
|
||||
ApmDataDumper data_dumper;
|
||||
|
@ -345,8 +345,12 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface {
|
||||
} fixed_digital;
|
||||
struct {
|
||||
bool enabled = false;
|
||||
float vad_probability_attack = 1.f;
|
||||
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;
|
||||
float initial_saturation_margin_db = 20.f;
|
||||
float extra_saturation_margin_db = 2.f;
|
||||
int gain_applier_adjacent_speech_frames_threshold = 1;
|
||||
} adaptive_digital;
|
||||
|
Reference in New Issue
Block a user