AEC3: Allow the main and shadow filters to have different lengths
This CL changes the AEC3 code to allow the main and shadow filters
to have different lengths.
Bug: webrtc:9614,chromium:873100
Change-Id: I3ec2861d496986610d5a73db5771bbe9b8bf7dcd
Reviewed-on: https://webrtc-review.googlesource.com/93465
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24265}
diff --git a/modules/audio_processing/aec3/render_buffer.cc b/modules/audio_processing/aec3/render_buffer.cc
index 6e224be..235e3e3 100644
--- a/modules/audio_processing/aec3/render_buffer.cc
+++ b/modules/audio_processing/aec3/render_buffer.cc
@@ -47,4 +47,28 @@
}
}
+void RenderBuffer::SpectralSums(
+ size_t num_spectra_shorter,
+ size_t num_spectra_longer,
+ std::array<float, kFftLengthBy2Plus1>* X2_shorter,
+ std::array<float, kFftLengthBy2Plus1>* X2_longer) const {
+ RTC_DCHECK_LE(num_spectra_shorter, num_spectra_longer);
+ X2_shorter->fill(0.f);
+ int position = spectrum_buffer_->read;
+ size_t j = 0;
+ for (; j < num_spectra_shorter; ++j) {
+ std::transform(X2_shorter->begin(), X2_shorter->end(),
+ spectrum_buffer_->buffer[position].begin(),
+ X2_shorter->begin(), std::plus<float>());
+ position = spectrum_buffer_->IncIndex(position);
+ }
+ std::copy(X2_shorter->begin(), X2_shorter->end(), X2_longer->begin());
+ for (; j < num_spectra_longer; ++j) {
+ std::transform(X2_longer->begin(), X2_longer->end(),
+ spectrum_buffer_->buffer[position].begin(),
+ X2_longer->begin(), std::plus<float>());
+ position = spectrum_buffer_->IncIndex(position);
+ }
+}
+
} // namespace webrtc