Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(929)

Unified Diff: media/audio/win/waveout_output_win.cc

Issue 10832285: Switch OnMoreData() to use AudioBus. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Comments. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/win/waveout_output_win.h ('k') | media/base/audio_bus.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..faa9901a45016ac4787eaa715797578dd5e00cbd 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,17 @@ 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_) {
+ // 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_.Format.wBitsPerSample / 8, buffer->lpData);
+
buffer->dwBufferLength = used * format_.Format.nChannels / channels_;
if (channels_ > 2 && format_.Format.nChannels == 2) {
media::FoldChannels(buffer->lpData, used,
« no previous file with comments | « media/audio/win/waveout_output_win.h ('k') | media/base/audio_bus.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698