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

Unified Diff: media/audio/win/audio_low_latency_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
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..a5ef19d00ff2b74e0e166bdbf08f618773fafc24 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,15 @@ 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_);
+ // 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_sample, audio_data);
} else {
// Case II: up-mixing.
const int audio_source_size_bytes =
@@ -831,9 +838,17 @@ 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));
+ // 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_sample, buffer.get());
// Do channel up-mixing on 16-bit PCM samples.
num_filled_bytes = ChannelUpMix(buffer.get(),
« no previous file with comments | « media/audio/win/audio_low_latency_output_win.h ('k') | media/audio/win/audio_low_latency_output_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698