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

Unified Diff: media/audio/audio_output_controller.cc

Issue 1856673002: Mojofication of the Chrome Audio Rendering Prototype Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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/audio_output_controller.h ('k') | media/audio/audio_output_device.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_output_controller.cc
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc
index d780687d1b8415aee8f6223be8497905a80b8800..e2fd07ddd98b780f1e978f7d937ded690af8473c 100644
--- a/media/audio/audio_output_controller.cc
+++ b/media/audio/audio_output_controller.cc
@@ -71,6 +71,30 @@ scoped_refptr<AudioOutputController> AudioOutputController::Create(
return controller;
}
+scoped_refptr<AudioOutputController> AudioOutputController::Create(
+ AudioManager* audio_manager,
+ EventHandler* event_handler,
+ const AudioParameters& params,
+ const std::string& output_device_id,
+ SyncReader* sync_reader,
+ content::mojom::AudioOutputStreamPtr stream,
+ const content::mojom::AudioOutput::CreateStreamCallback& callback) {
+ DCHECK(audio_manager);
+ DCHECK(sync_reader);
+
+ if (!params.IsValid() || !audio_manager)
+ return NULL;
+
+ scoped_refptr<AudioOutputController> controller(new AudioOutputController(
+ audio_manager, event_handler, params, output_device_id, sync_reader));
+ controller->stream_ptr_ = std::move(stream);
+
+ controller->message_loop_->PostTask(
+ FROM_HERE, base::Bind(&AudioOutputController::DoCreateMojo, controller,
+ false, callback));
+ return controller;
+}
+
void AudioOutputController::Play() {
message_loop_->PostTask(FROM_HERE, base::Bind(
&AudioOutputController::DoPlay, this));
@@ -154,6 +178,52 @@ void AudioOutputController::DoCreate(bool is_for_device_change) {
handler_->OnCreated();
}
+void AudioOutputController::DoCreateMojo(
+ bool is_for_device_change,
+ const content::mojom::AudioOutput::CreateStreamCallback& callback) {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+ SCOPED_UMA_HISTOGRAM_TIMER("Media.AudioOutputController.CreateTime");
+ TRACE_EVENT0("audio", "AudioOutputController::DoCreate");
+
+ // Close() can be called before DoCreate() is executed.
+ if (state_ == kClosed)
+ return;
+
+ DoStopCloseAndClearStream(); // Calls RemoveOutputDeviceChangeListener().
+ DCHECK_EQ(kEmpty, state_);
+
+ stream_ = diverting_to_stream_ ? diverting_to_stream_
+ : audio_manager_->MakeAudioOutputStreamProxy(
+ params_, output_device_id_);
+ if (!stream_) {
+ state_ = kError;
+ handler_->OnError();
+ return;
+ }
+
+ if (!stream_->Open()) {
+ DoStopCloseAndClearStream();
+ state_ = kError;
+ handler_->OnError();
+ return;
+ }
+
+ // Everything started okay, so re-register for state change callbacks if
+ // stream_ was created via AudioManager.
+ if (stream_ != diverting_to_stream_)
+ audio_manager_->AddOutputDeviceChangeListener(this);
+
+ // We have successfully opened the stream. Set the initial volume.
+ stream_->SetVolume(volume_);
+
+ // Finally set the state to kCreated.
+ state_ = kCreated;
+
+ // And then report we have been created if we haven't done so already.
+ if (!is_for_device_change)
+ handler_->OnCreated(std::move(stream_ptr_), callback);
+}
+
void AudioOutputController::DoPlay() {
DCHECK(message_loop_->BelongsToCurrentThread());
SCOPED_UMA_HISTOGRAM_TIMER("Media.AudioOutputController.PlayTime");
« no previous file with comments | « media/audio/audio_output_controller.h ('k') | media/audio/audio_output_device.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698