AEC3: Move option for reverb model in nonlinaer mode into AEC3 config
This adds a config parameter for reverb modelling in nonlinear mode. The killswitch is preserved, and will have the same effect before and after this CL. Tested: Bitexact on a large number of aecdumps both with and without WebRTC-Aec3NonlinearModeReverbKillSwitch. Bug: webrtc:8671 Change-Id: I7b2fa92307af5316dbe895392367abb8d15f06bf Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183541 Commit-Queue: Sam Zackrisson <saza@webrtc.org> Reviewed-by: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32298}
This commit is contained in:
parent
d48ff45707
commit
389bf0feb8
@ -143,6 +143,7 @@ struct RTC_EXPORT EchoCanceller3Config {
|
||||
float noise_gate_slope = 0.3f;
|
||||
size_t render_pre_window_size = 1;
|
||||
size_t render_post_window_size = 1;
|
||||
bool model_reverb_in_nonlinear_mode = true;
|
||||
} echo_model;
|
||||
|
||||
struct ComfortNoise {
|
||||
|
||||
@ -302,6 +302,8 @@ void Aec3ConfigFromJsonString(absl::string_view json_string,
|
||||
&cfg.echo_model.render_pre_window_size);
|
||||
ReadParam(section, "render_post_window_size",
|
||||
&cfg.echo_model.render_post_window_size);
|
||||
ReadParam(section, "model_reverb_in_nonlinear_mode",
|
||||
&cfg.echo_model.model_reverb_in_nonlinear_mode);
|
||||
}
|
||||
|
||||
if (rtc::GetValueFromJsonObject(aec3_root, "comfort_noise", §ion)) {
|
||||
@ -585,7 +587,9 @@ std::string Aec3ConfigToJsonString(const EchoCanceller3Config& config) {
|
||||
ost << "\"render_pre_window_size\": "
|
||||
<< config.echo_model.render_pre_window_size << ",";
|
||||
ost << "\"render_post_window_size\": "
|
||||
<< config.echo_model.render_post_window_size;
|
||||
<< config.echo_model.render_post_window_size << ",";
|
||||
ost << "\"model_reverb_in_nonlinear_mode\": "
|
||||
<< (config.echo_model.model_reverb_in_nonlinear_mode ? "true" : "false");
|
||||
ost << "},";
|
||||
|
||||
ost << "\"comfort_noise\": {";
|
||||
|
||||
@ -22,6 +22,7 @@ TEST(EchoCanceller3JsonHelpers, ToStringAndParseJson) {
|
||||
cfg.filter.refined.error_floor = 2.f;
|
||||
cfg.filter.coarse_initial.length_blocks = 3u;
|
||||
cfg.comfort_noise.noise_floor_dbfs = 100.f;
|
||||
cfg.echo_model.model_reverb_in_nonlinear_mode = false;
|
||||
cfg.suppressor.normal_tuning.mask_hf.enr_suppress = .5f;
|
||||
cfg.suppressor.subband_nearend_detection.nearend_average_blocks = 3;
|
||||
cfg.suppressor.subband_nearend_detection.subband1 = {1, 3};
|
||||
@ -48,6 +49,8 @@ TEST(EchoCanceller3JsonHelpers, ToStringAndParseJson) {
|
||||
cfg_transformed.filter.refined.error_floor);
|
||||
EXPECT_EQ(cfg.comfort_noise.noise_floor_dbfs,
|
||||
cfg_transformed.comfort_noise.noise_floor_dbfs);
|
||||
EXPECT_EQ(cfg.echo_model.model_reverb_in_nonlinear_mode,
|
||||
cfg_transformed.echo_model.model_reverb_in_nonlinear_mode);
|
||||
EXPECT_EQ(cfg.suppressor.normal_tuning.mask_hf.enr_suppress,
|
||||
cfg_transformed.suppressor.normal_tuning.mask_hf.enr_suppress);
|
||||
EXPECT_EQ(cfg.suppressor.subband_nearend_detection.nearend_average_blocks,
|
||||
|
||||
@ -378,6 +378,10 @@ EchoCanceller3Config AdjustConfig(const EchoCanceller3Config& config) {
|
||||
adjusted_cfg.render_levels.active_render_limit = 30.f;
|
||||
}
|
||||
|
||||
if (field_trial::IsEnabled("WebRTC-Aec3NonlinearModeReverbKillSwitch")) {
|
||||
adjusted_cfg.echo_model.model_reverb_in_nonlinear_mode = false;
|
||||
}
|
||||
|
||||
// Field-trial based override for the whole suppressor tuning.
|
||||
const std::string suppressor_tuning_override_trial_name =
|
||||
field_trial::FindFullName("WebRTC-Aec3SuppressorTuningOverride");
|
||||
|
||||
@ -23,10 +23,6 @@
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
|
||||
bool ModelReverbInNonlinearMode() {
|
||||
return !field_trial::IsEnabled("WebRTC-Aec3NonlinearModeReverbKillSwitch");
|
||||
}
|
||||
|
||||
constexpr float kDefaultTransparentModeGain = 0.f;
|
||||
|
||||
float GetTransparentModeGain() {
|
||||
@ -181,8 +177,7 @@ ResidualEchoEstimator::ResidualEchoEstimator(const EchoCanceller3Config& config,
|
||||
early_reflections_general_gain_(
|
||||
GetEarlyReflectionsDefaultModeGain(config_.ep_strength)),
|
||||
late_reflections_general_gain_(
|
||||
GetLateReflectionsDefaultModeGain(config_.ep_strength)),
|
||||
model_reverb_in_nonlinear_mode_(ModelReverbInNonlinearMode()) {
|
||||
GetLateReflectionsDefaultModeGain(config_.ep_strength)) {
|
||||
Reset();
|
||||
}
|
||||
|
||||
@ -250,7 +245,8 @@ void ResidualEchoEstimator::Estimate(
|
||||
NonLinearEstimate(echo_path_gain, X2, R2);
|
||||
}
|
||||
|
||||
if (model_reverb_in_nonlinear_mode_ && !aec_state.TransparentModeActive()) {
|
||||
if (config_.echo_model.model_reverb_in_nonlinear_mode &&
|
||||
!aec_state.TransparentModeActive()) {
|
||||
AddReverb(ReverbType::kNonLinear, aec_state, render_buffer, R2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -68,7 +68,6 @@ class ResidualEchoEstimator {
|
||||
const float late_reflections_transparent_mode_gain_;
|
||||
const float early_reflections_general_gain_;
|
||||
const float late_reflections_general_gain_;
|
||||
const bool model_reverb_in_nonlinear_mode_;
|
||||
std::array<float, kFftLengthBy2Plus1> X2_noise_floor_;
|
||||
std::array<int, kFftLengthBy2Plus1> X2_noise_floor_counter_;
|
||||
ReverbModel echo_reverb_;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user