Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Unified Diff: webrtc/modules/audio_processing/aec3/render_buffer.cc

Issue 2784023002: Major AEC3 render pipeline changes (Closed)
Patch Set: Disabled one more DEATH test that caused issues due to bug on bots Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_processing/aec3/render_buffer.cc
diff --git a/webrtc/modules/audio_processing/aec3/fft_buffer.cc b/webrtc/modules/audio_processing/aec3/render_buffer.cc
similarity index 58%
rename from webrtc/modules/audio_processing/aec3/fft_buffer.cc
rename to webrtc/modules/audio_processing/aec3/render_buffer.cc
index 6542d108ef99d9c363ef715af2ace132c03b656b..65dbc8fc2b4610c261e2b35e0246c07ea4e43fb0 100644
--- a/webrtc/modules/audio_processing/aec3/fft_buffer.cc
+++ b/webrtc/modules/audio_processing/aec3/render_buffer.cc
@@ -8,7 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-#include "webrtc/modules/audio_processing/aec3/fft_buffer.h"
+#include "webrtc/modules/audio_processing/aec3/render_buffer.h"
#include <algorithm>
@@ -17,19 +17,28 @@
namespace webrtc {
-FftBuffer::FftBuffer(Aec3Optimization optimization,
- size_t num_partitions,
- const std::vector<size_t> num_ffts_for_spectral_sums)
+RenderBuffer::RenderBuffer(Aec3Optimization optimization,
+ size_t num_bands,
+ size_t num_partitions,
+ const std::vector<size_t> num_ffts_for_spectral_sums)
: optimization_(optimization),
fft_buffer_(num_partitions),
spectrum_buffer_(num_partitions, std::array<float, kFftLengthBy2Plus1>()),
spectral_sums_(num_ffts_for_spectral_sums.size(),
- std::array<float, kFftLengthBy2Plus1>()) {
+ std::array<float, kFftLengthBy2Plus1>()),
+ last_block_(num_bands, std::vector<float>(kBlockSize, 0.f)) {
// Current implementation only allows a maximum of one spectral sum lengths.
RTC_DCHECK_EQ(1, num_ffts_for_spectral_sums.size());
spectral_sums_length_ = num_ffts_for_spectral_sums[0];
RTC_DCHECK_GE(fft_buffer_.size(), spectral_sums_length_);
+ Clear();
+}
+
+RenderBuffer::~RenderBuffer() = default;
+
+void RenderBuffer::Clear() {
+ position_ = 0;
for (auto& sum : spectral_sums_) {
sum.fill(0.f);
}
@@ -41,19 +50,32 @@ FftBuffer::FftBuffer(Aec3Optimization optimization,
for (auto& fft : fft_buffer_) {
fft.Clear();
}
+
+ for (auto& b : last_block_) {
+ std::fill(b.begin(), b.end(), 0.f);
+ }
}
-FftBuffer::~FftBuffer() = default;
+void RenderBuffer::Insert(const std::vector<std::vector<float>>& block) {
+ // Compute the FFT of the data in the lowest band.
+ FftData X;
+ fft_.PaddedFft(block[0], last_block_[0], &X);
+
+ // Copy the last render frame.
+ RTC_DCHECK_EQ(last_block_.size(), block.size());
+ for (size_t k = 0; k < block.size(); ++k) {
+ RTC_DCHECK_EQ(last_block_[k].size(), block[k].size());
+ std::copy(block[k].begin(), block[k].end(), last_block_[k].begin());
+ }
-void FftBuffer::Insert(const FftData& fft) {
- // Insert the fft into the buffer.
- position_ = (position_ - 1 + fft_buffer_.size()) % fft_buffer_.size();
- fft_buffer_[position_].Assign(fft);
+ // Insert X into the buffer.
+ position_ = position_ > 0 ? position_ - 1 : fft_buffer_.size() - 1;
+ fft_buffer_[position_].Assign(X);
// Compute and insert the spectrum for the FFT into the spectrum buffer.
- fft.Spectrum(optimization_, &spectrum_buffer_[position_]);
+ X.Spectrum(optimization_, &spectrum_buffer_[position_]);
- // Pre-compute and cachec the spectral sums.
+ // Pre-compute and cache the spectral sums.
std::copy(spectrum_buffer_[position_].begin(),
spectrum_buffer_[position_].end(), spectral_sums_[0].begin());
size_t position = (position_ + 1) % fft_buffer_.size();
« no previous file with comments | « webrtc/modules/audio_processing/aec3/render_buffer.h ('k') | webrtc/modules/audio_processing/aec3/render_buffer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698