AGC2 adaptive digital controller config clean-up
- Remove dry-run option
- Hard-code `adjacent_speech_frames_threshold` and
`vad_reset_period_ms`
- Expose `initial_gain_db` via field trial
Tested: adaptive digital controller bit-exactness verified
Bug: webrtc:7494
Change-Id: I6166611f91320b6c37de3f8e553c06c2ed95b772
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/287222
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Reviewed-by: Hanna Silen <silen@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38862}
diff --git a/modules/audio_processing/audio_processing_impl_unittest.cc b/modules/audio_processing/audio_processing_impl_unittest.cc
index b394e93..10c11a2 100644
--- a/modules/audio_processing/audio_processing_impl_unittest.cc
+++ b/modules/audio_processing/audio_processing_impl_unittest.cc
@@ -1235,6 +1235,70 @@
EXPECT_EQ(ProcessInputVolume(*apm, kOneFrame, /*initial_volume=*/135), 135);
}
+class GainController2FieldTrialParametrizedTest
+ : public ::testing::TestWithParam<AudioProcessing::Config> {};
+
+TEST_P(GainController2FieldTrialParametrizedTest,
+ CheckAgc2AdaptiveDigitalOverridesApplied) {
+ webrtc::test::ScopedFieldTrials field_trials(
+ "WebRTC-Audio-GainController2/"
+ "Enabled,"
+ "enable_clipping_predictor:true,"
+ "clipped_level_min:20,"
+ "clipped_level_step:30,"
+ "clipped_ratio_threshold:0.4,"
+ "clipped_wait_frames:50,"
+ "target_range_max_dbfs:-6,"
+ "target_range_min_dbfs:-70,"
+ "update_input_volume_wait_frames:80,"
+ "speech_probability_threshold:0.9,"
+ "speech_ratio_threshold:1.0,"
+ "headroom_db:10,"
+ "max_gain_db:20,"
+ "initial_gain_db:7,"
+ "max_gain_change_db_per_second:5,"
+ "max_output_noise_level_dbfs:-40/");
+
+ auto adjusted_config =
+ AudioProcessingBuilder().SetConfig(GetParam()).Create()->GetConfig();
+
+ EXPECT_FALSE(adjusted_config.gain_controller1.enabled);
+ EXPECT_TRUE(adjusted_config.gain_controller2.enabled);
+ EXPECT_TRUE(adjusted_config.gain_controller2.adaptive_digital.enabled);
+ EXPECT_TRUE(adjusted_config.gain_controller2.input_volume_controller.enabled);
+
+ EXPECT_EQ(adjusted_config.gain_controller2.adaptive_digital.headroom_db, 10);
+ EXPECT_EQ(adjusted_config.gain_controller2.adaptive_digital.max_gain_db, 20);
+ EXPECT_EQ(adjusted_config.gain_controller2.adaptive_digital.initial_gain_db,
+ 7);
+ EXPECT_EQ(adjusted_config.gain_controller2.adaptive_digital
+ .max_gain_change_db_per_second,
+ 5);
+ EXPECT_EQ(adjusted_config.gain_controller2.adaptive_digital
+ .max_output_noise_level_dbfs,
+ -40);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+ AudioProcessingImplTest,
+ GainController2FieldTrialParametrizedTest,
+ ::testing::Values(
+ // Full AGC1.
+ AudioProcessing::Config{
+ .gain_controller1 =
+ {.enabled = true,
+ .analog_gain_controller = {.enabled = true,
+ .enable_digital_adaptive = true}},
+ .gain_controller2 = {.enabled = false}},
+ // Hybrid AGC.
+ AudioProcessing::Config{
+ .gain_controller1 =
+ {.enabled = true,
+ .analog_gain_controller = {.enabled = true,
+ .enable_digital_adaptive = false}},
+ .gain_controller2 = {.enabled = true,
+ .adaptive_digital = {.enabled = true}}}));
+
TEST(AudioProcessingImplGainController2FieldTrialTest,
ConfigAdjustedWhenExperimentEnabledAndAgc1AnalogEnabled) {
constexpr AudioProcessing::Config::GainController2::AdaptiveDigital
@@ -1254,6 +1318,7 @@
"speech_ratio_threshold:1.0,"
"headroom_db:10,"
"max_gain_db:20,"
+ "initial_gain_db:7,"
"max_gain_change_db_per_second:3,"
"max_output_noise_level_dbfs:-40/");
@@ -1318,6 +1383,7 @@
"speech_ratio_threshold:1.0,"
"headroom_db:10,"
"max_gain_db:20,"
+ "initial_gain_db:7,"
"max_gain_change_db_per_second:3,"
"max_output_noise_level_dbfs:-40/");
@@ -1382,6 +1448,7 @@
"speech_ratio_threshold:1.0,"
"headroom_db:10,"
"max_gain_db:20,"
+ "initial_gain_db:7,"
"max_gain_change_db_per_second:3,"
"max_output_noise_level_dbfs:-40/");
@@ -1434,6 +1501,7 @@
"speech_ratio_threshold:1.0,"
"headroom_db:10,"
"max_gain_db:20,"
+ "initial_gain_db:7,"
"max_gain_change_db_per_second:3,"
"max_output_noise_level_dbfs:-40/");