| 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,
|
|
|