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

Unified Diff: media/mojo/services/mojo_audio_renderer_sink_adapter.cc

Issue 2640003002: Implement MojoAudioRendererSink and use it in UtilityMojoMediaClient (Closed)
Patch Set: Rebase Created 3 years, 10 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/mojo/services/mojo_audio_renderer_sink_adapter.h ('k') | media/mojo/services/mojo_renderer_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/mojo/services/mojo_audio_renderer_sink_adapter.cc
diff --git a/media/mojo/services/mojo_audio_renderer_sink_adapter.cc b/media/mojo/services/mojo_audio_renderer_sink_adapter.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0720a69e16dbc633c56b966452eb3643a9e76bda
--- /dev/null
+++ b/media/mojo/services/mojo_audio_renderer_sink_adapter.cc
@@ -0,0 +1,102 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "media/mojo/services/mojo_audio_renderer_sink_adapter.h"
+
+#include "media/mojo/common/media_type_converters.h"
+
+namespace media {
+
+MojoAudioRendererSinkAdapter::MojoAudioRendererSinkAdapter(
+ const std::string& audio_device_id)
+ : binding_(this),
+ task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ audio_device_id_(audio_device_id),
+ started_(false),
+ render_callback_(nullptr) {}
+
+MojoAudioRendererSinkAdapter::~MojoAudioRendererSinkAdapter() {}
+
+void MojoAudioRendererSinkAdapter::SetClient(mojom::AudioRendererSinkPtr sink) {
+ sink_ = std::move(sink);
+}
+
+void MojoAudioRendererSinkAdapter::Initialize(
+ const media::AudioParameters& params,
+ media::AudioRendererSink::RenderCallback* callback) {
+ CHECK(task_runner_->BelongsToCurrentThread());
+ CHECK(!started_);
+ audio_bus_ = AudioBus::Create(params);
+ render_callback_ = callback;
+
+ mojom::AudioRendererSinkRenderCallbackPtr render_callback_ptr;
+ if (!binding_.is_bound())
+ binding_.Bind(MakeRequest(&render_callback_ptr));
+
+ sink_->Initialize(params, std::move(render_callback_ptr));
+}
+
+void MojoAudioRendererSinkAdapter::Start() {
+ CHECK(!started_);
+ started_ = true;
+ sink_->Start();
+}
+
+void MojoAudioRendererSinkAdapter::Stop() {
+ CHECK(started_);
+ started_ = false;
+ sink_->Stop();
+}
+
+void MojoAudioRendererSinkAdapter::Pause() {
+ sink_->Pause();
+}
+
+void MojoAudioRendererSinkAdapter::Play() {
+ sink_->Play();
+}
+
+bool MojoAudioRendererSinkAdapter::SetVolume(double volume) {
+ bool success = false;
+ sink_->SetVolume(volume, &success);
+ return success;
+}
+
+media::OutputDeviceInfo MojoAudioRendererSinkAdapter::GetOutputDeviceInfo() {
+ media::OutputDeviceInfo info;
+ sink_->GetOutputDeviceInfo(&info);
+ return info;
+}
+
+bool MojoAudioRendererSinkAdapter::CurrentThreadIsRenderingThread() {
+ bool is_rendering_thread = false;
+ sink_->CurrentThreadIsRenderingThread(&is_rendering_thread);
+ return is_rendering_thread;
+}
+
+void MojoAudioRendererSinkAdapter::Render(
+ base::TimeDelta delay,
+ base::TimeTicks delay_timestamp,
+ int prior_frames_skipped,
+ const media::mojom::AudioRendererSinkRenderCallback::RenderCallback&
+ mojo_callback) {
+ CHECK(task_runner_->BelongsToCurrentThread());
+
+ if (!started_) {
+ mojo_callback.Run(0, nullptr);
+ return;
+ }
+
+ int nb_filled_frames = render_callback_->Render(
+ delay, delay_timestamp, prior_frames_skipped, audio_bus_.get());
+
+ // TODO(j.isorce): consider using AudioInputSyncWriter once it is mojified.
+ mojo_callback.Run(nb_filled_frames, mojom::AudioBus::From(*audio_bus_.get()));
+}
+
+void MojoAudioRendererSinkAdapter::OnRenderError() {
+ render_callback_->OnRenderError();
+}
+
+} // namespace media
« no previous file with comments | « media/mojo/services/mojo_audio_renderer_sink_adapter.h ('k') | media/mojo/services/mojo_renderer_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698