Optimize the filter analyzer.
Bug: None
Change-Id: I03e4e66295029df0f54dee83acbb5b5266d36645
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/247184
Reviewed-by: Per Ã…hgren <peah@webrtc.org>
Commit-Queue: Christian Schuldt <cschuldt@google.com>
Cr-Commit-Position: refs/heads/main@{#35717}
diff --git a/modules/audio_processing/aec3/filter_analyzer.cc b/modules/audio_processing/aec3/filter_analyzer.cc
index be954d3..c07e5c8 100644
--- a/modules/audio_processing/aec3/filter_analyzer.cc
+++ b/modules/audio_processing/aec3/filter_analyzer.cc
@@ -170,11 +170,16 @@
std::fill(h_highpass_[ch].begin() + region_.start_sample_,
h_highpass_[ch].begin() + region_.end_sample_ + 1, 0.f);
+ float* h_highpass_ch = h_highpass_[ch].data();
+ const float* filters_time_domain_ch = filters_time_domain[ch].data();
+ const size_t region_end = region_.end_sample_;
for (size_t k = std::max(h.size() - 1, region_.start_sample_);
- k <= region_.end_sample_; ++k) {
+ k <= region_end; ++k) {
+ float tmp = h_highpass_ch[k];
for (size_t j = 0; j < h.size(); ++j) {
- h_highpass_[ch][k] += filters_time_domain[ch][k - j] * h[j];
+ tmp += filters_time_domain_ch[k - j] * h[j];
}
+ h_highpass_ch[k] = tmp;
}
}
}
@@ -230,19 +235,23 @@
peak_index > filter_to_analyze.size() - 129 ? 0 : peak_index + 128;
}
+ float filter_floor_accum = filter_floor_accum_;
+ float filter_secondary_peak = filter_secondary_peak_;
for (size_t k = region.start_sample_;
k < std::min(region.end_sample_ + 1, filter_floor_low_limit_); ++k) {
float abs_h = fabsf(filter_to_analyze[k]);
- filter_floor_accum_ += abs_h;
- filter_secondary_peak_ = std::max(filter_secondary_peak_, abs_h);
+ filter_floor_accum += abs_h;
+ filter_secondary_peak = std::max(filter_secondary_peak, abs_h);
}
for (size_t k = std::max(filter_floor_high_limit_, region.start_sample_);
k <= region.end_sample_; ++k) {
float abs_h = fabsf(filter_to_analyze[k]);
- filter_floor_accum_ += abs_h;
- filter_secondary_peak_ = std::max(filter_secondary_peak_, abs_h);
+ filter_floor_accum += abs_h;
+ filter_secondary_peak = std::max(filter_secondary_peak, abs_h);
}
+ filter_floor_accum_ = filter_floor_accum;
+ filter_secondary_peak_ = filter_secondary_peak;
if (region.end_sample_ == filter_to_analyze.size() - 1) {
float filter_floor = filter_floor_accum_ /