Chromium Code Reviews| Index: content/renderer/media/android/media_player_renderer_client.h |
| diff --git a/content/renderer/media/android/media_player_renderer_client.h b/content/renderer/media/android/media_player_renderer_client.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..67b350ff5f8e0d835f6bf07501d86fe4132a3084 |
| --- /dev/null |
| +++ b/content/renderer/media/android/media_player_renderer_client.h |
| @@ -0,0 +1,106 @@ |
| +// 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. |
| + |
| +#ifndef CONTENT_RENDERER_MEDIA_ANDROID_MEDIA_PLAYER_RENDERER_CLIENT_H_ |
| +#define CONTENT_RENDERER_MEDIA_ANDROID_MEDIA_PLAYER_RENDERER_CLIENT_H_ |
| + |
| +#include "base/callback.h" |
| +#include "base/macros.h" |
| +#include "base/memory/weak_ptr.h" |
| +#include "content/common/content_export.h" |
| +#include "media/base/android/stream_texture_wrapper.h" |
| +#include "media/base/demuxer_stream_provider.h" |
| +#include "media/base/renderer.h" |
| +#include "media/base/renderer_client.h" |
| +#include "media/base/video_renderer_sink.h" |
| +#include "media/mojo/clients/mojo_renderer.h" |
| + |
| +namespace content { |
| + |
| +// MediaPlayerRendererClient lives in Renderer process and mirrors a |
| +// MediaPlayerRenderer living in the Browser process. |
| +// |
| +// It is responsible for forwarding media::Renderer calls from WMPI to the |
| +// MediaPlayerRenderer, using |mojo_renderer|. It also manages a StreamTexture, |
| +// (via |stream_texture_wrapper_|) and notifies the VideoRendererSink when new |
| +// frames are available. |
| +// |
| +// This class handles all calls on |media_task_runner_|, except for |
| +// OnFrameAvailable(), which is called on |compositor_task_runner_|. |
| +// |
| +// N.B: This class implements media::RendererClient, in order to intercept |
| +// OnVideoNaturalSizeChange() events, to update StreamTextureWrapper. All events |
| +// (including OnVideoNaturalSizeChange()) are bubbled up to |client_|. |
| +class CONTENT_EXPORT MediaPlayerRendererClient : public media::Renderer, |
| + public media::RendererClient { |
| + public: |
| + MediaPlayerRendererClient( |
| + scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, |
| + scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner, |
| + media::MojoRenderer* mojo_renderer, |
| + media::ScopedStreamTextureWrapper stream_texture_wrapper, |
| + media::VideoRendererSink* sink); |
| + |
| + virtual ~MediaPlayerRendererClient(); |
| + |
| + // media::Renderer implementation. |
| + void Initialize(media::DemuxerStreamProvider* demuxer_stream_provider, |
| + media::RendererClient* client, |
| + const media::PipelineStatusCB& init_cb) override; |
| + void SetCdm(media::CdmContext* cdm_context, |
| + const media::CdmAttachedCB& cdm_attached_cb) override; |
| + void Flush(const base::Closure& flush_cb) override; |
| + void StartPlayingFrom(base::TimeDelta time) override; |
| + void SetPlaybackRate(double playback_rate) override; |
| + void SetVolume(float volume) override; |
| + base::TimeDelta GetMediaTime() override; |
| + bool HasAudio() override; |
| + bool HasVideo() override; |
| + |
| + // RendererClient implementation implementation. |
|
watk
2016/08/09 21:39:58
buffalo buffalo buffalo..
media::RendererClient f
tguilbert
2016/08/09 22:38:34
Done.
|
| + void OnError(media::PipelineStatus status) override; |
| + void OnEnded() override; |
| + void OnStatisticsUpdate(const media::PipelineStatistics& stats) override; |
| + void OnBufferingStateChange(media::BufferingState state) override; |
| + void OnWaitingForDecryptionKey() override; |
| + void OnVideoNaturalSizeChange(const gfx::Size& size) override; |
| + void OnVideoOpacityChange(bool opaque) override; |
| + |
| + // Called on |compositor_task_runner_| whenever |stream_texture_wrapper_| has |
| + // a new frame. |
| + void OnFrameAvailable(); |
| + |
| + private: |
| + void InitializeRemoteRenderer( |
| + media::DemuxerStreamProvider* demuxer_stream_provider); |
| + void CompleteInitialization(media::PipelineStatus status); |
| + |
| + // Used to forward calls to the MediaPlayerRenderer living in the Browser. |
| + std::unique_ptr<media::MojoRenderer> mojo_renderer_; |
| + |
| + // Owns the StreamTexture whose surface is used by MediaPlayerRenderer. |
| + // Provides the VideoFrames to |sink_|. |
| + media::ScopedStreamTextureWrapper stream_texture_wrapper_; |
| + |
| + media::RendererClient* client_; |
| + |
| + media::VideoRendererSink* sink_; |
| + |
| + scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; |
| + |
| + // Used by |stream_texture_wrapper_| to signal OnFrameAvailable() and to send |
| + // VideoFrames to |sink_| on the right thread. |
| + scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; |
| + |
| + media::PipelineStatusCB init_cb_; |
| + |
| + // NOTE: Weak pointers must be invalidated before all other member variables. |
| + base::WeakPtrFactory<MediaPlayerRendererClient> weak_factory_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MediaPlayerRendererClient); |
| +}; |
| + |
| +} // namespace content |
| + |
| +#endif // CONTENT_RENDERER_MEDIA_ANDROID_MEDIA_PLAYER_RENDERER_CLIENT_H_ |