| Index: media/audio/linux/cras_output.cc
|
| diff --git a/media/audio/linux/cras_output.cc b/media/audio/linux/cras_output.cc
|
| index 77eb68f0e364adf24d317f79b2b6d32dd97a53bc..e27282c8d8f196191df544e0869ebb4819f45155 100644
|
| --- a/media/audio/linux/cras_output.cc
|
| +++ b/media/audio/linux/cras_output.cc
|
| @@ -72,7 +72,8 @@ CrasOutputStream::CrasOutputStream(const AudioParameters& params,
|
| state_(kCreated),
|
| volume_(1.0),
|
| manager_(manager),
|
| - source_callback_(NULL) {
|
| + source_callback_(NULL),
|
| + audio_bus_(AudioBus::Create(params)) {
|
| // We must have a manager.
|
| DCHECK(manager_);
|
|
|
| @@ -278,9 +279,14 @@ uint32 CrasOutputStream::Render(size_t frames,
|
|
|
| uint32 frames_latency = latency_usec * frame_rate_ / 1000000;
|
| uint32 bytes_latency = frames_latency * bytes_per_frame_;
|
| - uint32 rendered = source_callback_->OnMoreData(
|
| - buffer, frames * bytes_per_frame_, AudioBuffersState(0, bytes_latency));
|
| - return rendered / bytes_per_frame_;
|
| + DCHECK_EQ(frames, static_cast<size_t>(audio_bus_->frames()));
|
| + int frames_filled = source_callback_->OnMoreData(
|
| + audio_bus_.get(), AudioBuffersState(0, bytes_latency));
|
| + // 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, bytes_per_frame_ / (frames * num_channels_), buffer);
|
| + return frames_filled;
|
| }
|
|
|
| void CrasOutputStream::NotifyStreamError(int err) {
|
|
|