| Index: webrtc/modules/audio_mixer/frame_combiner.cc
|
| diff --git a/webrtc/modules/audio_mixer/frame_combiner.cc b/webrtc/modules/audio_mixer/frame_combiner.cc
|
| index 3a7f61812bd1b4b0caea50297489ab0020e45b26..7732c7cdcd4a0003a53aea732634ca4ec10c8aab 100644
|
| --- a/webrtc/modules/audio_mixer/frame_combiner.cc
|
| +++ b/webrtc/modules/audio_mixer/frame_combiner.cc
|
| @@ -50,10 +50,11 @@ void CombineOneFrame(const AudioFrame* input_frame,
|
| AudioFrame* audio_frame_for_mixing) {
|
| audio_frame_for_mixing->timestamp_ = input_frame->timestamp_;
|
| audio_frame_for_mixing->elapsed_time_ms_ = input_frame->elapsed_time_ms_;
|
| - std::copy(input_frame->data_,
|
| - input_frame->data_ +
|
| + // TODO(yujo): can we optimize muted frames?
|
| + std::copy(input_frame->data(),
|
| + input_frame->data() +
|
| input_frame->num_channels_ * input_frame->samples_per_channel_,
|
| - audio_frame_for_mixing->data_);
|
| + audio_frame_for_mixing->mutable_data());
|
| if (use_limiter) {
|
| AudioFrameOperations::ApplyHalfGain(audio_frame_for_mixing);
|
| RTC_DCHECK(limiter);
|
| @@ -95,6 +96,7 @@ void CombineMultipleFrames(
|
| add_buffer.fill(0);
|
|
|
| for (const auto& frame : input_frames) {
|
| + // TODO(yujo): skip this for muted frames.
|
| std::transform(frame.begin(), frame.end(), add_buffer.begin(),
|
| add_buffer.begin(), std::plus<int32_t>());
|
| }
|
| @@ -102,7 +104,7 @@ void CombineMultipleFrames(
|
| if (use_limiter) {
|
| // Halve all samples to avoid saturation before limiting.
|
| std::transform(add_buffer.begin(), add_buffer.begin() + frame_length,
|
| - audio_frame_for_mixing->data_, [](int32_t a) {
|
| + audio_frame_for_mixing->mutable_data(), [](int32_t a) {
|
| return rtc::saturated_cast<int16_t>(a / 2);
|
| });
|
|
|
| @@ -127,7 +129,7 @@ void CombineMultipleFrames(
|
| AudioFrameOperations::Add(*audio_frame_for_mixing, audio_frame_for_mixing);
|
| } else {
|
| std::transform(add_buffer.begin(), add_buffer.begin() + frame_length,
|
| - audio_frame_for_mixing->data_,
|
| + audio_frame_for_mixing->mutable_data(),
|
| [](int32_t a) { return rtc::saturated_cast<int16_t>(a); });
|
| }
|
| }
|
| @@ -206,10 +208,11 @@ void FrameCombiner::Combine(const std::vector<AudioFrame*>& mix_list,
|
| std::vector<rtc::ArrayView<const int16_t>> input_frames;
|
| for (size_t i = 0; i < mix_list.size(); ++i) {
|
| input_frames.push_back(rtc::ArrayView<const int16_t>(
|
| - mix_list[i]->data_, samples_per_channel * number_of_channels));
|
| + mix_list[i]->data(), samples_per_channel * number_of_channels));
|
| }
|
| CombineMultipleFrames(input_frames, use_limiter_this_round, limiter_.get(),
|
| audio_frame_for_mixing);
|
| }
|
| }
|
| +
|
| } // namespace webrtc
|
|
|