Make VectorBuffer in AEC3 multi-channel

All dependent modules are hardcoded to do their regular mono processing on the first channel.

This _almost_ makes RenderBuffer multi-channel: FftData is still only mono.

Bug: webrtc:10913
Change-Id: Id5cc34dbabfe59e1cc72a9675dc7979794e870ed
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/151139
Commit-Queue: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29074}
This commit is contained in:
Sam Zackrisson
2019-09-05 09:35:10 +02:00
committed by Commit Bot
parent 9305d11f17
commit a81c09d5b6
17 changed files with 69 additions and 41 deletions

View File

@ -127,7 +127,7 @@ RenderDelayBufferImpl::RenderDelayBufferImpl(const EchoCanceller3Config& config,
NumBandsForRate(sample_rate_hz),
num_render_channels,
kBlockSize),
spectra_(blocks_.buffer.size(), kFftLengthBy2Plus1),
spectra_(blocks_.buffer.size(), num_render_channels, kFftLengthBy2Plus1),
ffts_(blocks_.buffer.size()),
delay_(config_.delay.default_delay),
echo_remover_buffer_(&blocks_, &spectra_, &ffts_),
@ -381,7 +381,9 @@ void RenderDelayBufferImpl::InsertBlock(
std::copy(ds.rbegin(), ds.rend(), lr.buffer.begin() + lr.write);
fft_.PaddedFft(block[0][0], b.buffer[previous_write][0][0],
&f.buffer[f.write]);
f.buffer[f.write].Spectrum(optimization_, s.buffer[s.write]);
// TODO(http://bugs.webrtc.org/10913): Loop over all channels when FftBuffer
// supports multi-channel.
f.buffer[f.write].Spectrum(optimization_, s.buffer[s.write][/*channel=*/0]);
}
bool RenderDelayBufferImpl::DetectActiveRender(