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

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

Issue 1873513003: Add video-rendering to mojo media pipeline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: minor cleanup 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
Index: media/mojo/services/mojo_renderer_impl.cc
diff --git a/media/mojo/services/mojo_renderer_impl.cc b/media/mojo/services/mojo_renderer_impl.cc
index e5a9433fc9d19017255e4a808462a8105b1f3880..8107cd4c49cc666e71878d3c89b2124973ae5733 100644
--- a/media/mojo/services/mojo_renderer_impl.cc
+++ b/media/mojo/services/mojo_renderer_impl.cc
@@ -11,14 +11,22 @@
#include "base/location.h"
#include "base/single_thread_task_runner.h"
#include "media/base/demuxer_stream_provider.h"
+#include "media/base/video_decoder_config.h"
+#include "media/base/video_renderer_sink.h"
#include "media/mojo/services/mojo_demuxer_stream_impl.h"
+#include "media/mojo/services/video_overlay_factory.h"
+#include "mojo/converters/geometry/geometry_type_converters.h"
namespace media {
MojoRendererImpl::MojoRendererImpl(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ VideoRendererSink* video_renderer_sink,
+ GpuVideoAcceleratorFactories* gpu_factories,
interfaces::RendererPtr remote_renderer)
: task_runner_(task_runner),
+ video_renderer_sink_(video_renderer_sink),
+ gpu_factories_(gpu_factories),
remote_renderer_info_(remote_renderer.PassInterface()),
binding_(this) {
DVLOG(1) << __FUNCTION__;
@@ -36,6 +44,7 @@ void MojoRendererImpl::Initialize(
const PipelineStatusCB& init_cb,
const StatisticsCB& /* statistics_cb */,
const BufferingStateCB& buffering_state_cb,
+ const NaturalSizeChangedCB& natural_size_changed_cb,
const base::Closure& ended_cb,
const PipelineStatusCB& error_cb,
const base::Closure& /* waiting_for_decryption_key_cb */) {
@@ -63,6 +72,7 @@ void MojoRendererImpl::Initialize(
demuxer_stream_provider_ = demuxer_stream_provider;
init_cb_ = init_cb;
buffering_state_cb_ = buffering_state_cb;
+ natural_size_changed_cb_ = natural_size_changed_cb;
ended_cb_ = ended_cb;
error_cb_ = error_cb;
@@ -78,8 +88,10 @@ void MojoRendererImpl::Initialize(
new MojoDemuxerStreamImpl(audio, GetProxy(&audio_stream));
interfaces::DemuxerStreamPtr video_stream;
- if (video)
+ if (video) {
new MojoDemuxerStreamImpl(video, GetProxy(&video_stream));
+ video_overlay_factory_.reset(new VideoOverlayFactory(gpu_factories_));
+ }
// Using base::Unretained(this) is safe because |this| owns
// |remote_renderer_|, and the callback won't be dispatched if
@@ -116,11 +128,20 @@ void MojoRendererImpl::StartPlayingFrom(base::TimeDelta time) {
DVLOG(2) << __FUNCTION__;
DCHECK(task_runner_->BelongsToCurrentThread());
+ if (HasVideo()) {
+ DCHECK(video_overlay_factory_);
+ DCHECK(video_renderer_sink_);
+ DemuxerStream* video_stream =
+ demuxer_stream_provider_->GetStream(DemuxerStream::VIDEO);
+ video_renderer_sink_->PaintFrameUsingOldRenderingPath(
xhwang 2016/04/12 19:40:37 We have a comment that PaintFrameUsingOldRendering
+ video_overlay_factory_->CreateFrame(
+ video_stream->video_decoder_config().natural_size()));
+ }
+
{
base::AutoLock auto_lock(lock_);
time_ = time;
}
-
remote_renderer_->StartPlayingFrom(time.InMicroseconds());
}
@@ -170,6 +191,12 @@ void MojoRendererImpl::OnBufferingStateChange(
buffering_state_cb_.Run(static_cast<media::BufferingState>(state));
}
+void MojoRendererImpl::OnNaturalSizeChanged(mojo::SizePtr size) {
+ DVLOG(2) << __FUNCTION__;
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ natural_size_changed_cb_.Run(size.To<gfx::Size>());
+}
+
void MojoRendererImpl::OnEnded() {
DVLOG(1) << __FUNCTION__;
DCHECK(task_runner_->BelongsToCurrentThread());

Powered by Google App Engine
This is Rietveld 408576698