Correct the upmixing of mono to stereo in ACM2

This CL is a correction to the former CL that changed the remixing for
surround. A bug in that CL caused the upmixing from mono to stereo to
place zeros in the right channel.

The unittest CL is present in https://webrtc-review.googlesource.com/c/src/+/155740

Bug: b/144458371
Change-Id: I192e587a1b083a7bb55dcac2343f8b6d3942b9ed
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/159864
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Per Åhgren <peah@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29805}
This commit is contained in:
Per Åhgren
2019-11-15 14:22:30 +01:00
committed by Commit Bot
parent fd0e32a87a
commit bb55c5e2ec

View File

@ -243,11 +243,27 @@ void ReMix(const AudioFrame& input,
}
const int16_t* input_data = input.data();
size_t in_index = 0;
size_t out_index = 0;
// When upmixing is needed, copy the available channels directly, and set the
// remaining channels to zero.
// When upmixing is needed and the input is mono copy the left channel
// into the left and right channels, and set any remaining channels to zero.
if (input.num_channels_ == 1 && input.num_channels_ < num_output_channels) {
for (size_t k = 0; k < input.samples_per_channel_; ++k) {
(*output)[out_index++] = input_data[k];
(*output)[out_index++] = input_data[k];
for (size_t j = 2; j < num_output_channels; ++j) {
(*output)[out_index++] = 0;
}
RTC_DCHECK_EQ(out_index, (k + 1) * num_output_channels);
}
RTC_DCHECK_EQ(out_index, input.samples_per_channel_ * num_output_channels);
return;
}
size_t in_index = 0;
// When upmixing is needed and the output is surround, copy the available
// channels directly, and set the remaining channels to zero.
if (input.num_channels_ < num_output_channels) {
for (size_t k = 0; k < input.samples_per_channel_; ++k) {
for (size_t j = 0; j < input.num_channels_; ++j) {