diff --git a/experiments/field_trials.py b/experiments/field_trials.py index 6cb0d530ec..c23d523611 100755 --- a/experiments/field_trials.py +++ b/experiments/field_trials.py @@ -41,6 +41,9 @@ class FieldTrial: # registered in the container below. ACTIVE_FIELD_TRIALS: FrozenSet[FieldTrial] = frozenset([ # keep-sorted start + FieldTrial('WebRTC-Aec3BufferingMaxAllowedExcessRenderBlocksOverride', + 337900458, + date(2024, 9, 1)), FieldTrial('WebRTC-Audio-GainController2', 42232605, date(2024, 4, 1)), diff --git a/modules/audio_processing/aec3/echo_canceller3.cc b/modules/audio_processing/aec3/echo_canceller3.cc index fcd9757ad1..4c500f45dc 100644 --- a/modules/audio_processing/aec3/echo_canceller3.cc +++ b/modules/audio_processing/aec3/echo_canceller3.cc @@ -633,6 +633,13 @@ EchoCanceller3Config AdjustConfig(const EchoCanceller3Config& config) { "WebRTC-Aec3DelayEstimateSmoothingDelayFoundOverride", 0.f, 1.f, &adjusted_cfg.delay.delay_estimate_smoothing_delay_found); + int max_allowed_excess_render_blocks_override = + adjusted_cfg.buffering.max_allowed_excess_render_blocks; + RetrieveFieldTrialValue( + "WebRTC-Aec3BufferingMaxAllowedExcessRenderBlocksOverride", 0, 20, + &max_allowed_excess_render_blocks_override); + adjusted_cfg.buffering.max_allowed_excess_render_blocks = + max_allowed_excess_render_blocks_override; return adjusted_cfg; } diff --git a/modules/audio_processing/aec3/echo_canceller3_unittest.cc b/modules/audio_processing/aec3/echo_canceller3_unittest.cc index ad126af4d3..10957fdd8d 100644 --- a/modules/audio_processing/aec3/echo_canceller3_unittest.cc +++ b/modules/audio_processing/aec3/echo_canceller3_unittest.cc @@ -924,6 +924,16 @@ TEST(EchoCanceller3FieldTrials, Aec3UseNearendReverb) { EXPECT_FLOAT_EQ(adjusted_config.ep_strength.nearend_len, 0.8); } +// Testing the field trial-based that overrides the maximum allowed ecess render +// blocks in the render buffering. +TEST(EchoCanceller3FieldTrials, Aec3BufferingMaxAllowedExcessRenderBlocks) { + webrtc::test::ScopedFieldTrials field_trials( + "WebRTC-Aec3BufferingMaxAllowedExcessRenderBlocksOverride/2/"); + EchoCanceller3Config default_config; + EchoCanceller3Config adjusted_config = AdjustConfig(default_config); + EXPECT_EQ(adjusted_config.buffering.max_allowed_excess_render_blocks, 2ul); +} + TEST(EchoCanceller3, DetectionOfProperStereo) { constexpr int kSampleRateHz = 16000; constexpr int kNumChannels = 2;