Chromium Code Reviews| 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()); |