| 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..a3f238fc8db5402d108700ba5ad57b3303177205 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/renderers/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(
|
| + 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());
|
|
|