Index: media/audio/audio_output_controller.cc |
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc |
index 69b77976df9f737f841262a2182d40b52baca5d3..efc86e4cd9a9fcd6f3947faaf29a1153a9cbd4e4 100644 |
--- a/media/audio/audio_output_controller.cc |
+++ b/media/audio/audio_output_controller.cc |
@@ -24,7 +24,8 @@ const int AudioOutputController::kPollNumAttempts = 3; |
const int AudioOutputController::kPollPauseInMilliseconds = 3; |
AudioOutputController::AudioOutputController(EventHandler* handler, |
- SyncReader* sync_reader) |
+ SyncReader* sync_reader, |
+ const AudioParameters& params) |
: handler_(handler), |
stream_(NULL), |
volume_(1.0), |
@@ -32,6 +33,7 @@ AudioOutputController::AudioOutputController(EventHandler* handler, |
sync_reader_(sync_reader), |
message_loop_(NULL), |
number_polling_attempts_left_(0), |
+ params_(params), |
ALLOW_THIS_IN_INITIALIZER_LIST(weak_this_(this)) { |
} |
@@ -68,12 +70,12 @@ scoped_refptr<AudioOutputController> AudioOutputController::Create( |
// Starts the audio controller thread. |
scoped_refptr<AudioOutputController> controller(new AudioOutputController( |
- event_handler, sync_reader)); |
+ event_handler, sync_reader, params)); |
controller->message_loop_ = audio_manager->GetMessageLoop(); |
controller->message_loop_->PostTask(FROM_HERE, base::Bind( |
&AudioOutputController::DoCreate, controller, |
- base::Unretained(audio_manager), params)); |
+ base::Unretained(audio_manager))); |
return controller; |
} |
@@ -108,8 +110,7 @@ void AudioOutputController::SetVolume(double volume) { |
&AudioOutputController::DoSetVolume, this, volume)); |
} |
-void AudioOutputController::DoCreate(AudioManager* audio_manager, |
- const AudioParameters& params) { |
+void AudioOutputController::DoCreate(AudioManager* audio_manager) { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
// Close() can be called before DoCreate() is executed. |
@@ -118,7 +119,7 @@ void AudioOutputController::DoCreate(AudioManager* audio_manager, |
DCHECK_EQ(kEmpty, state_); |
DoStopCloseAndClearStream(NULL); |
- stream_ = audio_manager->MakeAudioOutputStreamProxy(params); |
+ stream_ = audio_manager->MakeAudioOutputStreamProxy(params_); |
if (!stream_) { |
// TODO(hclam): Define error types. |
handler_->OnError(this, 0); |
@@ -282,9 +283,8 @@ void AudioOutputController::DoReportError(int code) { |
handler_->OnError(this, code); |
} |
-uint32 AudioOutputController::OnMoreData(uint8* dest, |
- uint32 max_size, |
- AudioBuffersState buffers_state) { |
+int AudioOutputController::OnMoreData(AudioBus* audio_bus, |
+ AudioBuffersState buffers_state) { |
TRACE_EVENT0("audio", "AudioOutputController::OnMoreData"); |
{ |
@@ -295,9 +295,10 @@ uint32 AudioOutputController::OnMoreData(uint8* dest, |
return 0; |
} |
} |
- uint32 size = sync_reader_->Read(dest, max_size); |
- sync_reader_->UpdatePendingBytes(buffers_state.total_bytes() + size); |
- return size; |
+ int frames = sync_reader_->Read(audio_bus); |
+ sync_reader_->UpdatePendingBytes( |
+ buffers_state.total_bytes() + frames * params_.GetBytesPerFrame()); |
+ return frames; |
} |
void AudioOutputController::WaitTillDataReady() { |