| 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
|
|
|