AEC3: Added a mode to properly utilize highly linear setups
Bug: webrtc:9321 Change-Id: I9c1abbd6b1daa1ecff041633318edfb8a011e9c0 Reviewed-on: https://webrtc-review.googlesource.com/79480 Reviewed-by: Jesus de Vicente Pena <devicentepena@webrtc.org> Commit-Queue: Per Åhgren <peah@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23423}
This commit is contained in:
@ -134,6 +134,7 @@ struct EchoCanceller3Config {
|
|||||||
int full_gain_blocks = 312;
|
int full_gain_blocks = 312;
|
||||||
} gain_rampup;
|
} gain_rampup;
|
||||||
bool has_clock_drift = false;
|
bool has_clock_drift = false;
|
||||||
|
bool linear_and_stable_echo_path = false;
|
||||||
} echo_removal_control;
|
} echo_removal_control;
|
||||||
|
|
||||||
struct EchoModel {
|
struct EchoModel {
|
||||||
|
@ -245,10 +245,13 @@ void AecState::Update(
|
|||||||
usable_linear_estimate_ = !echo_saturation_;
|
usable_linear_estimate_ = !echo_saturation_;
|
||||||
usable_linear_estimate_ =
|
usable_linear_estimate_ =
|
||||||
usable_linear_estimate_ && filter_has_had_time_to_converge;
|
usable_linear_estimate_ && filter_has_had_time_to_converge;
|
||||||
|
|
||||||
|
usable_linear_estimate_ = usable_linear_estimate_ && external_delay;
|
||||||
|
if (!config_.echo_removal_control.linear_and_stable_echo_path) {
|
||||||
usable_linear_estimate_ =
|
usable_linear_estimate_ =
|
||||||
usable_linear_estimate_ && recently_converged_filter;
|
usable_linear_estimate_ && recently_converged_filter;
|
||||||
usable_linear_estimate_ = usable_linear_estimate_ && !diverged_filter;
|
usable_linear_estimate_ = usable_linear_estimate_ && !diverged_filter;
|
||||||
usable_linear_estimate_ = usable_linear_estimate_ && external_delay;
|
}
|
||||||
|
|
||||||
use_linear_filter_output_ = usable_linear_estimate_ && !TransparentMode();
|
use_linear_filter_output_ = usable_linear_estimate_ && !TransparentMode();
|
||||||
|
|
||||||
|
@ -266,6 +266,8 @@ EchoCanceller3Config ParseAec3Parameters(const std::string& filename) {
|
|||||||
}
|
}
|
||||||
ReadParam(section, "has_clock_drift",
|
ReadParam(section, "has_clock_drift",
|
||||||
&cfg.echo_removal_control.has_clock_drift);
|
&cfg.echo_removal_control.has_clock_drift);
|
||||||
|
ReadParam(section, "linear_and_stable_echo_path",
|
||||||
|
&cfg.echo_removal_control.linear_and_stable_echo_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rtc::GetValueFromJsonObject(root, "echo_model", §ion)) {
|
if (rtc::GetValueFromJsonObject(root, "echo_model", §ion)) {
|
||||||
|
Reference in New Issue
Block a user