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",
|
"../../../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",
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user