Index: media/renderers/media_player_renderer_host.cc |
diff --git a/media/renderers/media_player_renderer_host.cc b/media/renderers/media_player_renderer_host.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1c1c756f843bd79873c9f6933890b0947646f424 |
--- /dev/null |
+++ b/media/renderers/media_player_renderer_host.cc |
@@ -0,0 +1,149 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "media/renderers/media_player_renderer_host.h" |
+ |
+namespace media { |
+ |
+MediaPlayerRendererHost::MediaPlayerRendererHost( |
+ const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, |
+ MojoRenderer* mojo_renderer, |
+ StreamTextureWrapper* stream_texture_wrapper, |
+ VideoRendererSink* sink) |
+ : mojo_renderer_(mojo_renderer), |
+ stream_texture_wrapper_(stream_texture_wrapper), |
+ frame_ready_(false), |
+ client_(NULL), |
+ sink_(sink), |
+ task_runner_(media_task_runner) {} |
+ |
+MediaPlayerRendererHost::~MediaPlayerRendererHost() { |
+ sink_->Stop(); |
+} |
+ |
+void MediaPlayerRendererHost::Initialize( |
+ DemuxerStreamProvider* demuxer_stream_provider, |
+ RendererClient* client, |
+ const PipelineStatusCB& init_cb) { |
+ client_ = client; |
+ |
+ // TODO(tguilbert): Update the base::Unretained. |
+ stream_texture_wrapper_->Initialize( |
+ this, gfx::Size(1, 1), task_runner_, |
+ base::Bind(&MojoRenderer::Initialize, |
+ base::Unretained(mojo_renderer_.get()), |
+ demuxer_stream_provider, this, |
+ base::Bind(&MediaPlayerRendererHost::CompleteInitialization, |
+ base::Unretained(this), init_cb))); |
+} |
+ |
+void MediaPlayerRendererHost::CompleteInitialization( |
+ const PipelineStatusCB& init_cb, |
+ PipelineStatus status) { |
+ // TODO(tguilbert): Handle failure. |
+ |
+ sink_->Start(this); |
+ |
+ init_cb.Run(status); |
+} |
+ |
+void MediaPlayerRendererHost::SetCdm(CdmContext* cdm_context, |
+ const CdmAttachedCB& cdm_attached_cb) { |
+ NOTREACHED(); |
+} |
+ |
+void MediaPlayerRendererHost::Flush(const base::Closure& flush_cb) { |
+ mojo_renderer_->Flush(flush_cb); |
+} |
+ |
+void MediaPlayerRendererHost::StartPlayingFrom(base::TimeDelta time) { |
+ mojo_renderer_->StartPlayingFrom(time); |
+} |
+ |
+void MediaPlayerRendererHost::SetPlaybackRate(double playback_rate) { |
+ mojo_renderer_->SetPlaybackRate(playback_rate); |
+} |
+ |
+void MediaPlayerRendererHost::SetVolume(float volume) { |
+ mojo_renderer_->SetVolume(volume); |
+} |
+ |
+base::TimeDelta MediaPlayerRendererHost::GetMediaTime() { |
+ return mojo_renderer_->GetMediaTime(); |
+} |
+ |
+bool MediaPlayerRendererHost::HasAudio() { |
+ return true; |
+} |
+ |
+bool MediaPlayerRendererHost::HasVideo() { |
+ return true; |
+} |
+ |
+// cc::VideoFrameProvider::Client implementation. |
+void MediaPlayerRendererHost::StopUsingProvider() { |
+ NOTREACHED(); |
+} |
+ |
+void MediaPlayerRendererHost::StartRendering() { |
+ NOTREACHED(); |
+} |
+ |
+void MediaPlayerRendererHost::StopRendering() { |
+ NOTREACHED(); |
+} |
+ |
+void MediaPlayerRendererHost::DidReceiveFrame() { |
+ frame_ready_ = true; |
+} |
+ |
+// VideoRenderSink::RenderCallback |
+scoped_refptr<VideoFrame> MediaPlayerRendererHost::Render( |
+ base::TimeTicks deadline_min, |
+ base::TimeTicks deadline_max, |
+ bool background_rendering) { |
+ if (frame_ready_) { |
+ return stream_texture_wrapper_->GetCurrentFrame(); |
+ } else { |
+ return NULL; |
+ } |
+} |
+ |
+void MediaPlayerRendererHost::OnFrameDropped() {} |
+ |
+void MediaPlayerRendererHost::OnError(PipelineStatus status) { |
+ client_->OnError(status); |
+} |
+ |
+void MediaPlayerRendererHost::OnEnded() { |
+ client_->OnEnded(); |
+} |
+ |
+void MediaPlayerRendererHost::OnStatisticsUpdate( |
+ const PipelineStatistics& stats) { |
+ client_->OnStatisticsUpdate(stats); |
+} |
+ |
+void MediaPlayerRendererHost::OnBufferingStateChange(BufferingState state) { |
+ client_->OnBufferingStateChange(state); |
+} |
+ |
+void MediaPlayerRendererHost::OnWaitingForDecryptionKey() { |
+ client_->OnWaitingForDecryptionKey(); |
+} |
+ |
+void MediaPlayerRendererHost::OnVideoNaturalSizeChange(const gfx::Size& size) { |
+ stream_texture_wrapper_->UpdateTextureSize(size); |
+ client_->OnVideoNaturalSizeChange(size); |
+} |
+ |
+void MediaPlayerRendererHost::OnVideoOpacityChange(bool opaque) { |
+ client_->OnVideoOpacityChange(opaque); |
+} |
+ |
+void MediaPlayerRendererHost::OnDurationChange(base::TimeDelta duration) { |
+ client_->OnDurationChange(duration); |
+} |
+ |
+} // namespace media |