diff --git a/api/audio/echo_canceller3_config.h b/api/audio/echo_canceller3_config.h index 51feccb700..63847f2acb 100644 --- a/api/audio/echo_canceller3_config.h +++ b/api/audio/echo_canceller3_config.h @@ -28,7 +28,7 @@ struct EchoCanceller3Config { size_t delay_headroom_blocks = 2; size_t hysteresis_limit_1_blocks = 1; size_t hysteresis_limit_2_blocks = 1; - size_t skew_hysteresis_blocks = 1; + size_t skew_hysteresis_blocks = 3; } delay; struct Filter { diff --git a/modules/audio_processing/aec3/render_delay_controller.cc b/modules/audio_processing/aec3/render_delay_controller.cc index fc9110899d..7a40c46db6 100644 --- a/modules/audio_processing/aec3/render_delay_controller.cc +++ b/modules/audio_processing/aec3/render_delay_controller.cc @@ -23,11 +23,23 @@ #include "rtc_base/atomicops.h" #include "rtc_base/constructormagic.h" #include "rtc_base/logging.h" +#include "system_wrappers/include/field_trial.h" namespace webrtc { namespace { +int GetSkewHysteresis(const EchoCanceller3Config& config) { + if (field_trial::IsEnabled("WebRTC-Aec3EnforceSkewHysteresis1")) { + return 1; + } + if (field_trial::IsEnabled("WebRTC-Aec3EnforceSkewHysteresis2")) { + return 2; + } + + return static_cast(config.delay.skew_hysteresis_blocks); +} + constexpr int kSkewHistorySizeLog2 = 8; class RenderDelayControllerImpl final : public RenderDelayController { @@ -118,8 +130,7 @@ RenderDelayControllerImpl::RenderDelayControllerImpl( static_cast(config.delay.hysteresis_limit_1_blocks)), hysteresis_limit_2_blocks_( static_cast(config.delay.hysteresis_limit_2_blocks)), - skew_hysteresis_blocks_( - static_cast(config.delay.skew_hysteresis_blocks)), + skew_hysteresis_blocks_(GetSkewHysteresis(config)), delay_estimator_(data_dumper_.get(), config), delay_buf_(kBlockSize * non_causal_offset, 0.f), skew_estimator_(kSkewHistorySizeLog2) {