| Index: media/audio/android/opensles_output.cc
|
| diff --git a/media/audio/android/opensles_output.cc b/media/audio/android/opensles_output.cc
|
| index 3b5ee648c7f846c425ab40e9db7a30815b6fe839..26ae25b6a0b355726542a20ff33bea90a963b0b1 100644
|
| --- a/media/audio/android/opensles_output.cc
|
| +++ b/media/audio/android/opensles_output.cc
|
| @@ -35,6 +35,7 @@ OpenSLESOutputStream::OpenSLESOutputStream(AudioManagerAndroid* manager,
|
| NOTREACHED() << "Unsupported number of channels: " << format_.numChannels;
|
|
|
| buffer_size_bytes_ = params.GetBytesPerBuffer();
|
| + audio_bus_ = AudioBus::Create(params);
|
|
|
| memset(&audio_data_, 0, sizeof(audio_data_));
|
| }
|
| @@ -257,17 +258,21 @@ void OpenSLESOutputStream::FillBufferQueue() {
|
| // Read data from the registered client source.
|
| // TODO(xians): Get an accurate delay estimation.
|
| uint32 hardware_delay = buffer_size_bytes_;
|
| - size_t num_filled_bytes = callback_->OnMoreData(
|
| - audio_data_[active_queue_],
|
| - buffer_size_bytes_,
|
| - AudioBuffersState(0, hardware_delay));
|
| - DCHECK(num_filled_bytes <= buffer_size_bytes_);
|
| + int frames_filled = callback_->OnMoreData(
|
| + audio_bus_.get(), AudioBuffersState(0, hardware_delay));
|
| + int num_filled_bytes =
|
| + frames_filled * audio_bus_->channels() * format_.bitsPerSample / 8;
|
| + DCHECK_LE(static_cast<size_t>(num_filled_bytes), buffer_size_bytes_);
|
| + // Note: If this ever changes to output raw float the data must be clipped and
|
| + // sanitized since it may come from an untrusted source such as NaCl.
|
| + audio_bus_->ToInterleaved(
|
| + frames_filled, format_.bitsPerSample / 8, audio_data_[active_queue_]);
|
|
|
| // Perform in-place, software-volume adjustments.
|
| media::AdjustVolume(audio_data_[active_queue_],
|
| num_filled_bytes,
|
| format_.numChannels,
|
| - format_.containerSize >> 3,
|
| + format_.bitsPerSample / 8,
|
| volume_);
|
|
|
| // Enqueue the buffer for playback.
|
|
|