aboutsummaryrefslogtreecommitdiff
path: root/modules/audio_processing/aec3/matched_filter.cc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/audio_processing/aec3/matched_filter.cc')
-rw-r--r--modules/audio_processing/aec3/matched_filter.cc32
1 files changed, 19 insertions, 13 deletions
diff --git a/modules/audio_processing/aec3/matched_filter.cc b/modules/audio_processing/aec3/matched_filter.cc
index 64b2d4e697..1721e9c983 100644
--- a/modules/audio_processing/aec3/matched_filter.cc
+++ b/modules/audio_processing/aec3/matched_filter.cc
@@ -307,7 +307,8 @@ MatchedFilter::MatchedFilter(ApmDataDumper* data_dumper,
int num_matched_filters,
size_t alignment_shift_sub_blocks,
float excitation_limit,
- float smoothing,
+ float smoothing_fast,
+ float smoothing_slow,
float matching_filter_threshold)
: data_dumper_(data_dumper),
optimization_(optimization),
@@ -319,7 +320,8 @@ MatchedFilter::MatchedFilter(ApmDataDumper* data_dumper,
lag_estimates_(num_matched_filters),
filters_offsets_(num_matched_filters, 0),
excitation_limit_(excitation_limit),
- smoothing_(smoothing),
+ smoothing_fast_(smoothing_fast),
+ smoothing_slow_(smoothing_slow),
matching_filter_threshold_(matching_filter_threshold) {
RTC_DCHECK(data_dumper);
RTC_DCHECK_LT(0, window_size_sub_blocks);
@@ -340,10 +342,14 @@ void MatchedFilter::Reset() {
}
void MatchedFilter::Update(const DownsampledRenderBuffer& render_buffer,
- rtc::ArrayView<const float> capture) {
+ rtc::ArrayView<const float> capture,
+ bool use_slow_smoothing) {
RTC_DCHECK_EQ(sub_block_size_, capture.size());
auto& y = capture;
+ const float smoothing =
+ use_slow_smoothing ? smoothing_slow_ : smoothing_fast_;
+
const float x2_sum_threshold =
filters_[0].size() * excitation_limit_ * excitation_limit_;
@@ -360,25 +366,25 @@ void MatchedFilter::Update(const DownsampledRenderBuffer& render_buffer,
switch (optimization_) {
#if defined(WEBRTC_ARCH_X86_FAMILY)
case Aec3Optimization::kSse2:
- aec3::MatchedFilterCore_SSE2(x_start_index, x2_sum_threshold,
- smoothing_, render_buffer.buffer, y,
- filters_[n], &filters_updated, &error_sum);
+ aec3::MatchedFilterCore_SSE2(x_start_index, x2_sum_threshold, smoothing,
+ render_buffer.buffer, y, filters_[n],
+ &filters_updated, &error_sum);
break;
case Aec3Optimization::kAvx2:
- aec3::MatchedFilterCore_AVX2(x_start_index, x2_sum_threshold,
- smoothing_, render_buffer.buffer, y,
- filters_[n], &filters_updated, &error_sum);
+ aec3::MatchedFilterCore_AVX2(x_start_index, x2_sum_threshold, smoothing,
+ render_buffer.buffer, y, filters_[n],
+ &filters_updated, &error_sum);
break;
#endif
#if defined(WEBRTC_HAS_NEON)
case Aec3Optimization::kNeon:
- aec3::MatchedFilterCore_NEON(x_start_index, x2_sum_threshold,
- smoothing_, render_buffer.buffer, y,
- filters_[n], &filters_updated, &error_sum);
+ aec3::MatchedFilterCore_NEON(x_start_index, x2_sum_threshold, smoothing,
+ render_buffer.buffer, y, filters_[n],
+ &filters_updated, &error_sum);
break;
#endif
default:
- aec3::MatchedFilterCore(x_start_index, x2_sum_threshold, smoothing_,
+ aec3::MatchedFilterCore(x_start_index, x2_sum_threshold, smoothing,
render_buffer.buffer, y, filters_[n],
&filters_updated, &error_sum);
}