Index: media/audio/audio_input_controller.cc |
diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc |
index 99bb420e89553a84e6292a2fa74d404b5eed91eb..319e242f7be71b24a77ab6569194406bc2a449c8 100644 |
--- a/media/audio/audio_input_controller.cc |
+++ b/media/audio/audio_input_controller.cc |
@@ -101,6 +101,33 @@ scoped_refptr<AudioInputController> AudioInputController::CreateLowLatency( |
return controller; |
} |
+// static |
+scoped_refptr<AudioInputController> AudioInputController::CreateForStream( |
+ AudioManager* audio_manager, |
+ EventHandler* event_handler, |
+ AudioInputStream* stream, |
+ SyncWriter* sync_writer) { |
+ DCHECK(audio_manager); |
+ DCHECK(sync_writer); |
+ DCHECK(stream); |
+ |
+ // Create the AudioInputController object and ensure that it runs on |
+ // the audio-manager thread. |
+ scoped_refptr<AudioInputController> controller(new AudioInputController( |
+ event_handler, sync_writer)); |
+ controller->message_loop_ = audio_manager->GetMessageLoop(); |
+ |
+ controller->stream_ = stream; |
DaleCurtis
2013/01/15 22:02:18
Seems like it might be clearer to make a DoCreate(
miu
2013/01/16 03:22:18
Done. I renamed DoFinishCreate() to DoCreateForSt
|
+ |
+ if (!controller->message_loop_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&AudioInputController::DoFinishCreate, controller))) { |
+ controller = NULL; |
+ } |
+ |
+ return controller; |
+} |
+ |
void AudioInputController::Record() { |
message_loop_->PostTask(FROM_HERE, base::Bind( |
&AudioInputController::DoRecord, this)); |
@@ -131,6 +158,12 @@ void AudioInputController::DoCreate(AudioManager* audio_manager, |
stream_ = audio_manager->MakeAudioInputStream(params, device_id); |
+ DoFinishCreate(); |
+} |
+ |
+void AudioInputController::DoFinishCreate() { |
+ DCHECK(message_loop_->BelongsToCurrentThread()); |
+ |
if (!stream_) { |
// TODO(satish): Define error types. |
handler_->OnError(this, 0); |