Chromium Code Reviews| Index: media/audio/win/audio_low_latency_output_win.cc |
| diff --git a/media/audio/win/audio_low_latency_output_win.cc b/media/audio/win/audio_low_latency_output_win.cc |
| index 78c823f9acbe3d3f17bf84733a0118184751a312..86f231d0e429476dd93837253181cd2fa9c22d63 100644 |
| --- a/media/audio/win/audio_low_latency_output_win.cc |
| +++ b/media/audio/win/audio_low_latency_output_win.cc |
| @@ -338,7 +338,8 @@ WASAPIAudioOutputStream::WASAPIAudioOutputStream(AudioManagerWin* manager, |
| share_mode_(GetShareMode()), |
| client_channel_count_(params.channels()), |
| num_written_frames_(0), |
| - source_(NULL) { |
| + source_(NULL), |
| + audio_bus_(AudioBus::Create(params)) { |
| CHECK(com_init_.succeeded()); |
| DCHECK(manager_); |
| @@ -821,9 +822,12 @@ void WASAPIAudioOutputStream::Run() { |
| if (channel_factor() == 1) { |
| // Case I: no up-mixing. |
| - num_filled_bytes = source_->OnMoreData( |
| - audio_data, packet_size_bytes_, |
| - AudioBuffersState(0, audio_delay_bytes)); |
| + int frames_filled = source_->OnMoreData( |
| + audio_bus_.get(), AudioBuffersState(0, audio_delay_bytes)); |
| + num_filled_bytes = frames_filled * frame_size_; |
| + DCHECK_LE(num_filled_bytes, packet_size_bytes_); |
| + audio_bus_->ToInterleaved( |
|
henrika (OOO until Aug 14)
2012/08/23 14:42:53
Have you verified that WASAPIAudioOutputStreamTest
DaleCurtis
2012/08/24 23:53:12
It seems to work as is without modification. Is th
|
| + frames_filled, bytes_per_sample, audio_data); |
| } else { |
| // Case II: up-mixing. |
| const int audio_source_size_bytes = |
| @@ -831,9 +835,14 @@ void WASAPIAudioOutputStream::Run() { |
| scoped_array<uint8> buffer; |
| buffer.reset(new uint8[audio_source_size_bytes]); |
| - num_filled_bytes = source_->OnMoreData( |
| - buffer.get(), audio_source_size_bytes, |
| - AudioBuffersState(0, audio_delay_bytes)); |
| + int frames_filled = source_->OnMoreData( |
| + audio_bus_.get(), AudioBuffersState(0, audio_delay_bytes)); |
| + num_filled_bytes = |
| + frames_filled * bytes_per_sample * audio_bus_->channels(); |
| + DCHECK_LE(num_filled_bytes, |
| + static_cast<size_t>(audio_source_size_bytes)); |
| + audio_bus_->ToInterleaved( |
| + frames_filled, bytes_per_sample, buffer.get()); |
| // Do channel up-mixing on 16-bit PCM samples. |
| num_filled_bytes = ChannelUpMix(buffer.get(), |