Further AGC refactoring in preparation for adding multichannel support
Bug: webrtc:10859
Change-Id: If7d58a615a365a0b0f7b49e0cc2392b9bd5e2a0c
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159028
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29736}
diff --git a/modules/audio_processing/agc/agc_manager_direct.cc b/modules/audio_processing/agc/agc_manager_direct.cc
index 9551d0b..13b902f 100644
--- a/modules/audio_processing/agc/agc_manager_direct.cc
+++ b/modules/audio_processing/agc/agc_manager_direct.cc
@@ -163,46 +163,28 @@
} // namespace
-AgcManagerDirect::AgcManagerDirect(GainControl* gctrl,
- VolumeCallbacks* volume_callbacks,
- int startup_min_level,
- int clipped_level_min,
- bool use_agc2_level_estimation,
- bool disable_digital_adaptive)
- : AgcManagerDirect(use_agc2_level_estimation ? nullptr : new Agc(),
- gctrl,
- volume_callbacks,
- startup_min_level,
- clipped_level_min,
- use_agc2_level_estimation,
- disable_digital_adaptive) {
- RTC_DCHECK(agc_);
-}
-
AgcManagerDirect::AgcManagerDirect(Agc* agc,
GainControl* gctrl,
VolumeCallbacks* volume_callbacks,
int startup_min_level,
int clipped_level_min)
- : AgcManagerDirect(agc,
- gctrl,
+ : AgcManagerDirect(gctrl,
volume_callbacks,
startup_min_level,
clipped_level_min,
false,
false) {
RTC_DCHECK(agc_);
+ agc_.reset(agc);
}
-AgcManagerDirect::AgcManagerDirect(Agc* agc,
- GainControl* gctrl,
+AgcManagerDirect::AgcManagerDirect(GainControl* gctrl,
VolumeCallbacks* volume_callbacks,
int startup_min_level,
int clipped_level_min,
bool use_agc2_level_estimation,
bool disable_digital_adaptive)
: data_dumper_(new ApmDataDumper(instance_counter_)),
- agc_(agc),
gctrl_(gctrl),
volume_callbacks_(volume_callbacks),
frames_since_clipped_(kClippedWaitFrames),
@@ -216,16 +198,14 @@
check_volume_on_next_process_(true), // Check at startup.
startup_(true),
min_mic_level_(GetMinMicLevel()),
- use_agc2_level_estimation_(use_agc2_level_estimation),
disable_digital_adaptive_(disable_digital_adaptive),
startup_min_level_(ClampLevel(startup_min_level, min_mic_level_)),
clipped_level_min_(clipped_level_min) {
instance_counter_++;
- if (use_agc2_level_estimation_) {
- RTC_DCHECK(!agc);
- agc_.reset(new AdaptiveModeLevelEstimatorAgc(data_dumper_.get()));
+ if (use_agc2_level_estimation) {
+ agc_ = std::make_unique<AdaptiveModeLevelEstimatorAgc>(data_dumper_.get());
} else {
- RTC_DCHECK(agc);
+ agc_ = std::make_unique<Agc>();
}
}
diff --git a/modules/audio_processing/agc/agc_manager_direct.h b/modules/audio_processing/agc/agc_manager_direct.h
index 34024be..505ad15 100644
--- a/modules/audio_processing/agc/agc_manager_direct.h
+++ b/modules/audio_processing/agc/agc_manager_direct.h
@@ -84,15 +84,6 @@
int startup_min_level,
int clipped_level_min);
- // Most general c-tor.
- AgcManagerDirect(Agc* agc,
- GainControl* gctrl,
- VolumeCallbacks* volume_callbacks,
- int startup_min_level,
- int clipped_level_min,
- bool use_agc2_level_estimation,
- bool disable_digital_adaptive);
-
int min_mic_level() const { return min_mic_level_; }
int startup_min_level() const { return startup_min_level_; }
@@ -127,7 +118,6 @@
bool check_volume_on_next_process_;
bool startup_;
const int min_mic_level_;
- const bool use_agc2_level_estimation_;
const bool disable_digital_adaptive_;
int startup_min_level_;
const int clipped_level_min_;
diff --git a/modules/audio_processing/agc/agc_manager_direct_unittest.cc b/modules/audio_processing/agc/agc_manager_direct_unittest.cc
index 7c261d4..bc8309e 100644
--- a/modules/audio_processing/agc/agc_manager_direct_unittest.cc
+++ b/modules/audio_processing/agc/agc_manager_direct_unittest.cc
@@ -695,8 +695,7 @@
MockGainControl gctrl;
TestVolumeCallbacks volume;
- AgcManagerDirect manager(agc.release(), &gctrl, &volume, kInitialVolume,
- kClippedMin,
+ AgcManagerDirect manager(&gctrl, &volume, kInitialVolume, kClippedMin,
/* use agc2 level estimation */ false,
/* disable digital adaptive */ true);
@@ -710,14 +709,14 @@
TEST(AgcManagerDirectStandaloneTest, AgcMinMicLevelExperiment) {
auto agc_man = std::unique_ptr<AgcManagerDirect>(new AgcManagerDirect(
- nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+ nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
EXPECT_EQ(agc_man->min_mic_level(), kMinMicLevel);
EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
{
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-AgcMinMicLevelExperiment/Disabled/");
- agc_man.reset(new AgcManagerDirect(
- nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+ agc_man.reset(new AgcManagerDirect(nullptr, nullptr, kInitialVolume,
+ kClippedMin, true, true));
EXPECT_EQ(agc_man->min_mic_level(), kMinMicLevel);
EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
}
@@ -725,16 +724,16 @@
// Valid range of field-trial parameter is [0,255].
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-AgcMinMicLevelExperiment/Enabled-256/");
- agc_man.reset(new AgcManagerDirect(
- nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+ agc_man.reset(new AgcManagerDirect(nullptr, nullptr, kInitialVolume,
+ kClippedMin, true, true));
EXPECT_EQ(agc_man->min_mic_level(), kMinMicLevel);
EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
}
{
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-AgcMinMicLevelExperiment/Enabled--1/");
- agc_man.reset(new AgcManagerDirect(
- nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+ agc_man.reset(new AgcManagerDirect(nullptr, nullptr, kInitialVolume,
+ kClippedMin, true, true));
EXPECT_EQ(agc_man->min_mic_level(), kMinMicLevel);
EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
}
@@ -744,8 +743,8 @@
// be changed.
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-AgcMinMicLevelExperiment/Enabled-50/");
- agc_man.reset(new AgcManagerDirect(
- nullptr, nullptr, nullptr, kInitialVolume, kClippedMin, true, true));
+ agc_man.reset(new AgcManagerDirect(nullptr, nullptr, kInitialVolume,
+ kClippedMin, true, true));
EXPECT_EQ(agc_man->min_mic_level(), 50);
EXPECT_EQ(agc_man->startup_min_level(), kInitialVolume);
}
@@ -755,8 +754,8 @@
// level set by the experiment.
test::ScopedFieldTrials field_trial(
"WebRTC-Audio-AgcMinMicLevelExperiment/Enabled-50/");
- agc_man.reset(new AgcManagerDirect(nullptr, nullptr, nullptr, 30,
- kClippedMin, true, true));
+ agc_man.reset(
+ new AgcManagerDirect(nullptr, nullptr, 30, kClippedMin, true, true));
EXPECT_EQ(agc_man->min_mic_level(), 50);
EXPECT_EQ(agc_man->startup_min_level(), 50);
}
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index c718838..abfcc05 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -330,12 +330,10 @@
/* enabled= */ false,
/* enabled_agc2_level_estimator= */ false,
/* digital_adaptive_disabled= */ false,
- /* analyze_before_aec= */ false,
#else
config.Get<ExperimentalAgc>().enabled,
config.Get<ExperimentalAgc>().enabled_agc2_level_estimator,
config.Get<ExperimentalAgc>().digital_adaptive_disabled,
- config.Get<ExperimentalAgc>().analyze_before_aec,
#endif
!field_trial::IsEnabled(
"WebRTC-ApmExperimentalMultiChannelRenderKillSwitch"),
@@ -1288,13 +1286,6 @@
submodules_.agc_manager->AnalyzePreProcess(
capture_buffer->channels_const(), capture_buffer->num_channels(),
capture_nonlocked_.capture_processing_format.num_frames());
-
- if (constants_.use_experimental_agc_process_before_aec) {
- submodules_.agc_manager->Process(
- capture_buffer->channels_const()[0],
- capture_nonlocked_.capture_processing_format.num_frames(),
- capture_nonlocked_.capture_processing_format.sample_rate_hz());
- }
}
if (submodule_states_.CaptureMultiBandSubModulesActive() &&
@@ -1379,8 +1370,7 @@
}
if (constants_.use_experimental_agc &&
- submodules_.gain_control->is_enabled() &&
- !constants_.use_experimental_agc_process_before_aec) {
+ submodules_.gain_control->is_enabled()) {
submodules_.agc_manager->Process(
capture_buffer->split_bands_const_f(0)[kBand0To8kHz],
capture_buffer->num_frames_per_band(), capture_nonlocked_.split_rate);
diff --git a/modules/audio_processing/audio_processing_impl.h b/modules/audio_processing/audio_processing_impl.h
index 3e1b466..e13034f 100644
--- a/modules/audio_processing/audio_processing_impl.h
+++ b/modules/audio_processing/audio_processing_impl.h
@@ -380,7 +380,6 @@
bool use_experimental_agc,
bool use_experimental_agc_agc2_level_estimation,
bool use_experimental_agc_agc2_digital_adaptive,
- bool use_experimental_agc_process_before_aec,
bool experimental_multi_channel_render_support,
bool experimental_multi_channel_capture_support)
: agc_startup_min_volume(agc_startup_min_volume),
@@ -390,8 +389,6 @@
use_experimental_agc_agc2_level_estimation),
use_experimental_agc_agc2_digital_adaptive(
use_experimental_agc_agc2_digital_adaptive),
- use_experimental_agc_process_before_aec(
- use_experimental_agc_process_before_aec),
experimental_multi_channel_render_support(
experimental_multi_channel_render_support),
experimental_multi_channel_capture_support(
@@ -401,7 +398,6 @@
bool use_experimental_agc;
bool use_experimental_agc_agc2_level_estimation;
bool use_experimental_agc_agc2_digital_adaptive;
- bool use_experimental_agc_process_before_aec;
bool experimental_multi_channel_render_support;
bool experimental_multi_channel_capture_support;
} constants_;
diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h
index 52fbaba..80474f8 100644
--- a/modules/audio_processing/include/audio_processing.h
+++ b/modules/audio_processing/include/audio_processing.h
@@ -114,13 +114,18 @@
explicit ExperimentalAgc(bool enabled) : enabled(enabled) {}
ExperimentalAgc(bool enabled,
bool enabled_agc2_level_estimator,
+ bool digital_adaptive_disabled)
+ : enabled(enabled),
+ enabled_agc2_level_estimator(enabled_agc2_level_estimator),
+ digital_adaptive_disabled(digital_adaptive_disabled) {}
+ // Deprecated constructor: will be removed.
+ ExperimentalAgc(bool enabled,
+ bool enabled_agc2_level_estimator,
bool digital_adaptive_disabled,
bool analyze_before_aec)
: enabled(enabled),
enabled_agc2_level_estimator(enabled_agc2_level_estimator),
- digital_adaptive_disabled(digital_adaptive_disabled),
- analyze_before_aec(analyze_before_aec) {}
-
+ digital_adaptive_disabled(digital_adaptive_disabled) {}
ExperimentalAgc(bool enabled, int startup_min_volume)
: enabled(enabled), startup_min_volume(startup_min_volume) {}
ExperimentalAgc(bool enabled, int startup_min_volume, int clipped_level_min)
@@ -134,9 +139,6 @@
int clipped_level_min = kClippedLevelMin;
bool enabled_agc2_level_estimator = false;
bool digital_adaptive_disabled = false;
- // 'analyze_before_aec' is an experimental flag. It is intended to be removed
- // at some point.
- bool analyze_before_aec = false;
};
// Use to enable experimental noise suppression. It can be set in the