Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2558)

Unified Diff: content/renderer/media/android/media_player_renderer_client.h

Issue 2230583002: Add MediaPlayerRenderer/MediaPlayerRendererClient (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added MEDIA_EXPORT. Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/content_renderer.gypi ('k') | content/renderer/media/android/media_player_renderer_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..5f0fad01d90833730fe927a78ae5b0fe47eafbca
--- /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);
+
+ ~MediaPlayerRendererClient() override;
+
+ // 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;
+
+ // media::RendererClient implementation.
+ 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_
« no previous file with comments | « content/content_renderer.gypi ('k') | content/renderer/media/android/media_player_renderer_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698