Index: webrtc/modules/audio_processing/aec3/output_selector.cc |
diff --git a/webrtc/modules/audio_processing/aec3/output_selector.cc b/webrtc/modules/audio_processing/aec3/output_selector.cc |
index a8700cbe3e58c8bc219ca6cb5ee31d3a78a8eb82..966c35518f57118b4e228c82c587b7be058ac8da 100644 |
--- a/webrtc/modules/audio_processing/aec3/output_selector.cc |
+++ b/webrtc/modules/audio_processing/aec3/output_selector.cc |
@@ -34,11 +34,6 @@ void SmoothFrameTransition(bool from_y_to_e, |
RTC_DCHECK_EQ(from_y_to_e ? 1.f : 0.f, averaging); |
} |
-float BlockPower(rtc::ArrayView<const float> x) { |
- return std::accumulate(x.begin(), x.end(), 0.f, |
- [](float a, float b) -> float { return a + b * b; }); |
-} |
- |
} // namespace |
OutputSelector::OutputSelector() = default; |
@@ -46,24 +41,16 @@ OutputSelector::OutputSelector() = default; |
OutputSelector::~OutputSelector() = default; |
void OutputSelector::FormLinearOutput( |
+ bool use_subtractor_output, |
rtc::ArrayView<const float> subtractor_output, |
rtc::ArrayView<float> capture) { |
RTC_DCHECK_EQ(subtractor_output.size(), capture.size()); |
rtc::ArrayView<const float>& e_main = subtractor_output; |
rtc::ArrayView<float> y = capture; |
- const bool subtractor_output_is_best = |
- BlockPower(y) > 1.5f * BlockPower(e_main); |
- output_change_counter_ = subtractor_output_is_best != use_subtractor_output_ |
- ? output_change_counter_ + 1 |
- : 0; |
- |
- if (subtractor_output_is_best != use_subtractor_output_ && |
- ((subtractor_output_is_best && output_change_counter_ > 3) || |
- (!subtractor_output_is_best && output_change_counter_ > 10))) { |
- use_subtractor_output_ = subtractor_output_is_best; |
+ if (use_subtractor_output != use_subtractor_output_) { |
+ use_subtractor_output_ = use_subtractor_output; |
SmoothFrameTransition(use_subtractor_output_, e_main, y); |
- output_change_counter_ = 0; |
} else if (use_subtractor_output_) { |
std::copy(e_main.begin(), e_main.end(), y.begin()); |
} |