blob: 6e224be70391792278cb3dcdb4ac0c71b3278c23 [file] [log] [blame]
peahcf02cf12017-04-05 14:18:07 -07001/*
2 * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "modules/audio_processing/aec3/render_buffer.h"
peahcf02cf12017-04-05 14:18:07 -070012
13#include <algorithm>
14
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020015#include "modules/audio_processing/aec3/aec3_common.h"
16#include "rtc_base/checks.h"
peahcf02cf12017-04-05 14:18:07 -070017
18namespace webrtc {
19
Per Åhgrenec22e3f2017-12-20 15:20:37 +010020RenderBuffer::RenderBuffer(MatrixBuffer* block_buffer,
Per Åhgren8ba58612017-12-01 23:01:44 +010021 VectorBuffer* spectrum_buffer,
22 FftBuffer* fft_buffer)
23 : block_buffer_(block_buffer),
24 spectrum_buffer_(spectrum_buffer),
Per Åhgrenec22e3f2017-12-20 15:20:37 +010025 fft_buffer_(fft_buffer) {
Per Åhgren8ba58612017-12-01 23:01:44 +010026 RTC_DCHECK(block_buffer_);
27 RTC_DCHECK(spectrum_buffer_);
28 RTC_DCHECK(fft_buffer_);
Per Åhgrenec22e3f2017-12-20 15:20:37 +010029 RTC_DCHECK_EQ(block_buffer_->buffer.size(), fft_buffer_->buffer.size());
30 RTC_DCHECK_EQ(spectrum_buffer_->buffer.size(), fft_buffer_->buffer.size());
31 RTC_DCHECK_EQ(spectrum_buffer_->read, fft_buffer_->read);
32 RTC_DCHECK_EQ(spectrum_buffer_->write, fft_buffer_->write);
peahcf02cf12017-04-05 14:18:07 -070033}
34
35RenderBuffer::~RenderBuffer() = default;
36
Per Åhgrenec22e3f2017-12-20 15:20:37 +010037void RenderBuffer::SpectralSum(
38 size_t num_spectra,
39 std::array<float, kFftLengthBy2Plus1>* X2) const {
40 X2->fill(0.f);
41 int position = spectrum_buffer_->read;
42 for (size_t j = 0; j < num_spectra; ++j) {
43 std::transform(X2->begin(), X2->end(),
44 spectrum_buffer_->buffer[position].begin(), X2->begin(),
45 std::plus<float>());
Per Åhgren8ba58612017-12-01 23:01:44 +010046 position = spectrum_buffer_->IncIndex(position);
peahcf02cf12017-04-05 14:18:07 -070047 }
48}
49
50} // namespace webrtc