| Index: media/audio/win/waveout_output_win.cc
 | 
| diff --git a/media/audio/win/waveout_output_win.cc b/media/audio/win/waveout_output_win.cc
 | 
| index 75bfed4bbff0d2b1b0c037b531feeaac4558533e..b5b8926e29a1beefbdc2ac22cb67fb1d25b7b24f 100644
 | 
| --- a/media/audio/win/waveout_output_win.cc
 | 
| +++ b/media/audio/win/waveout_output_win.cc
 | 
| @@ -90,7 +90,8 @@ PCMWaveOutAudioOutputStream::PCMWaveOutAudioOutputStream(
 | 
|        volume_(1),
 | 
|        channels_(params.channels()),
 | 
|        pending_bytes_(0),
 | 
| -      waiting_handle_(NULL) {
 | 
| +      waiting_handle_(NULL),
 | 
| +      audio_bus_(AudioBus::Create(params)) {
 | 
|    format_.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
 | 
|    format_.Format.nChannels = params.channels();
 | 
|    format_.Format.nSamplesPerSec = params.sample_rate();
 | 
| @@ -341,10 +342,15 @@ void PCMWaveOutAudioOutputStream::QueueNextPacket(WAVEHDR *buffer) {
 | 
|    uint32 scaled_pending_bytes = pending_bytes_ * channels_ /
 | 
|                                  format_.Format.nChannels;
 | 
|    // TODO(sergeyu): Specify correct hardware delay for AudioBuffersState.
 | 
| -  uint32 used = callback_->OnMoreData(
 | 
| -      reinterpret_cast<uint8*>(buffer->lpData), buffer_size_,
 | 
| -      AudioBuffersState(scaled_pending_bytes, 0));
 | 
| +  int frames_filled = callback_->OnMoreData(
 | 
| +      audio_bus_.get(), AudioBuffersState(scaled_pending_bytes, 0));
 | 
| +  uint32 used = frames_filled * audio_bus_->channels() *
 | 
| +      format_.Format.wBitsPerSample / 8;
 | 
| +
 | 
|    if (used <= buffer_size_) {
 | 
| +    audio_bus_->ToInterleaved(
 | 
| +        frames_filled, format_.Format.wBitsPerSample / 8, buffer->lpData);
 | 
| +
 | 
|      buffer->dwBufferLength = used * format_.Format.nChannels / channels_;
 | 
|      if (channels_ > 2 && format_.Format.nChannels == 2) {
 | 
|        media::FoldChannels(buffer->lpData, used,
 | 
| 
 |