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

Unified Diff: media/mojo/clients/mojo_renderer.cc

Issue 2640003002: Implement MojoAudioRendererSink and use it in UtilityMojoMediaClient (Closed)
Patch Set: Make sure to stop the audio sink. Also unbind from the audio device thread Created 3 years, 11 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/mojo/clients/mojo_renderer.cc
diff --git a/media/mojo/clients/mojo_renderer.cc b/media/mojo/clients/mojo_renderer.cc
index 796666b56454589f660363cbdc6379fc6abb499a..91a51a29517ba40360a6f0f27d7836c4aa8fc47d 100644
--- a/media/mojo/clients/mojo_renderer.cc
+++ b/media/mojo/clients/mojo_renderer.cc
@@ -10,10 +10,12 @@
#include "base/callback_helpers.h"
#include "base/location.h"
#include "base/single_thread_task_runner.h"
+#include "media/base/audio_renderer_sink.h"
#include "media/base/demuxer_stream_provider.h"
#include "media/base/pipeline_status.h"
#include "media/base/renderer_client.h"
#include "media/base/video_renderer_sink.h"
+#include "media/mojo/clients/mojo_audio_renderer_sink_impl.h"
#include "media/mojo/clients/mojo_demuxer_stream_impl.h"
#include "media/mojo/clients/mojo_video_renderer_sink_impl.h"
#include "media/mojo/interfaces/video_renderer_sink.mojom.h"
@@ -24,14 +26,17 @@ namespace media {
MojoRenderer::MojoRenderer(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
std::unique_ptr<VideoOverlayFactory> video_overlay_factory,
+ AudioRendererSink* audio_renderer_sink,
VideoRendererSink* video_renderer_sink,
mojom::RendererPtr remote_renderer)
: task_runner_(task_runner),
video_overlay_factory_(std::move(video_overlay_factory)),
+ audio_renderer_sink_(audio_renderer_sink),
video_renderer_sink_(video_renderer_sink),
remote_renderer_info_(remote_renderer.PassInterface()),
client_binding_(this),
media_time_interpolator_(&media_clock_),
+ mojo_audio_renderer_sink_(nullptr),
mojo_video_renderer_sink_(nullptr) {
DVLOG(1) << __func__;
}
@@ -105,6 +110,14 @@ void MojoRenderer::InitializeRendererFromStreams(
base::Unretained(this), DemuxerStream::VIDEO));
}
+ mojom::AudioRendererSinkPtr audio_renderer_sink_ptr;
+ mojo_audio_renderer_sink_.reset(
+ new MojoAudioRendererSinkImpl(task_runner_, audio_renderer_sink_,
+ MakeRequest(&audio_renderer_sink_ptr)));
+ mojo_audio_renderer_sink_->set_connection_error_handler(
+ base::Bind(&MojoRenderer::OnAudioRendererSinkConnectionError,
+ base::Unretained(this)));
+
mojom::VideoRendererSinkPtr video_renderer_sink_ptr;
mojo_video_renderer_sink_.reset(
new MojoVideoRendererSinkImpl(task_runner_, video_renderer_sink_,
@@ -126,8 +139,8 @@ void MojoRenderer::InitializeRendererFromStreams(
// |remote_renderer_| is destroyed.
remote_renderer_->Initialize(
std::move(client_ptr_info), std::move(audio_stream),
- std::move(video_stream), std::move(video_renderer_sink_ptr),
- base::nullopt, base::nullopt,
+ std::move(video_stream), std::move(audio_renderer_sink_ptr),
+ std::move(video_renderer_sink_ptr), base::nullopt, base::nullopt,
base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
}
@@ -147,8 +160,9 @@ void MojoRenderer::InitializeRendererFromUrl(media::RendererClient* client) {
// |remote_renderer_| is destroyed.
remote_renderer_->Initialize(
std::move(client_ptr_info), mojom::DemuxerStreamPtr(),
- mojom::DemuxerStreamPtr(), mojom::VideoRendererSinkPtr(),
- url_params.media_url, url_params.first_party_for_cookies,
+ mojom::DemuxerStreamPtr(), mojom::AudioRendererSinkPtr(),
+ mojom::VideoRendererSinkPtr(), url_params.media_url,
+ url_params.first_party_for_cookies,
base::Bind(&MojoRenderer::OnInitialized, base::Unretained(this), client));
}
@@ -343,6 +357,13 @@ void MojoRenderer::OnDemuxerStreamConnectionError(DemuxerStream::Type type) {
}
}
+void MojoRenderer::OnAudioRendererSinkConnectionError() {
+ DVLOG(1) << __func__;
+ CHECK(task_runner_->BelongsToCurrentThread());
+
+ mojo_audio_renderer_sink_.reset();
+}
+
void MojoRenderer::OnVideoRendererSinkConnectionError() {
DVLOG(1) << __func__;
CHECK(task_runner_->BelongsToCurrentThread());

Powered by Google App Engine
This is Rietveld 408576698