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

@ -41,9 +41,10 @@ void RenderBuffer::SpectralSum(
X2->fill(0.f);
int position = spectrum_buffer_->read;
for (size_t j = 0; j < num_spectra; ++j) {
std::transform(X2->begin(), X2->end(),
spectrum_buffer_->buffer[position].begin(), X2->begin(),
std::plus<float>());
for (const auto& channel_spectrum : spectrum_buffer_->buffer[position]) {
std::transform(X2->begin(), X2->end(), channel_spectrum.begin(),
X2->begin(), std::plus<float>());
}
position = spectrum_buffer_->IncIndex(position);
}
}
@ -58,16 +59,20 @@ void RenderBuffer::SpectralSums(
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>());
for (const auto& channel_spectrum : spectrum_buffer_->buffer[position]) {
std::transform(X2_shorter->begin(), X2_shorter->end(),
channel_spectrum.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>());
for (const auto& channel_spectrum : spectrum_buffer_->buffer[position]) {
std::transform(X2_longer->begin(), X2_longer->end(),
channel_spectrum.begin(), X2_longer->begin(),
std::plus<float>());
}
position = spectrum_buffer_->IncIndex(position);
}
}