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()); |