| 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();
|
|
|