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

Unified Diff: media/blink/webmediaplayer_impl.h

Issue 1567123002: Support CAST+WMPI on android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
Index: media/blink/webmediaplayer_impl.h
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index d97a0b4c4a5429f5b1e8be09ced5e34e0600c9eb..4060e03a76a82be1dd7d5180fab829de1698a1c5 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -36,6 +36,17 @@
#include "third_party/WebKit/public/platform/WebMediaPlayer.h"
#include "url/gurl.h"
+#if defined(OS_ANDROID)
+// Use WIMPI_CAST instead of OS_ANDROID to clearly mark the cast implementation
+// so that we can easily remove it later, see crbug/575276.
+#define WIMPI_CAST
DaleCurtis 2016/01/07 19:59:32 Can we avoid setting this here. #define in header
hubbe 2016/01/07 20:31:03 Hmm, so where should it go then? I see two possib
DaleCurtis 2016/01/07 21:28:39 I'd just use OS_ANDROID with a // WMPI_CAST commen
hubbe 2016/01/11 22:47:24 Done.
+#endif
+
+#if defined(WIMPI_CAST)
+// Delete this file when WIMPI_CAST is no longer needed.
+#include "media/blink/renderer_media_player_interface.h"
+#endif
+
namespace blink {
class WebGraphicsContext3D;
class WebLocalFrame;
@@ -70,6 +81,9 @@ class WebTextTrackImpl;
class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
: public NON_EXPORTED_BASE(blink::WebMediaPlayer),
public NON_EXPORTED_BASE(WebMediaPlayerDelegate::Observer),
+#if defined(WIMPI_CAST)
+ public RendererMediaPlayerInterface,
+#endif
public base::SupportsWeakPtr<WebMediaPlayerImpl> {
public:
// Constructs a WebMediaPlayer implementation using Chromium's media stack.
@@ -190,6 +204,64 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
void OnHidden() override;
void OnShown() override;
+#if defined(WIMPI_CAST)
DaleCurtis 2016/01/07 19:59:32 Can you stick this all in another class instead th
hubbe 2016/01/07 20:31:03 It's not a simple thing to do. Some of these metho
DaleCurtis 2016/01/07 21:28:40 Please give it some more thought. You're essential
DaleCurtis 2016/01/07 21:29:09 s/900/400/
liberato (no reviews please) 2016/01/08 16:37:58 many of the operations these things perform are on
hubbe 2016/01/11 22:47:24 I think it might turn out messy, but I'm not sure.
+ void requestRemotePlayback() override;
+ void requestRemotePlaybackControl() override;
+
+ void set_media_player_manager(
+ RendererMediaPlayerManagerInterface* media_player_manager);
+
+ // RendererMediaPlayerInterface implementation
+ void OnMediaMetadataChanged(base::TimeDelta duration,
+ int width,
+ int height,
+ bool success) override;
+ void OnPlaybackComplete() override;
+ void OnBufferingUpdate(int percentage) override;
+ void OnSeekRequest(const base::TimeDelta& time_to_seek) override;
+ void OnSeekComplete(const base::TimeDelta& current_time) override;
+ void OnMediaError(int error_type) override;
+ void OnVideoSizeChanged(int width, int height) override;
+
+ // Called to update the current time.
+ void OnTimeUpdate(base::TimeDelta current_timestamp,
+ base::TimeTicks current_time_ticks) override;
+
+ // void OnWaitingForDecryptionKey() override;
+ void OnPlayerReleased() override;
+
+ // Functions called when media player status changes.
+ void OnConnectedToRemoteDevice(
+ const std::string& remote_playback_message) override;
+ void OnDisconnectedFromRemoteDevice() override;
+ void OnDidExitFullscreen() override;
+ void OnMediaPlayerPlay() override;
+ void OnMediaPlayerPause() override;
+ void OnRemoteRouteAvailabilityChanged(bool routes_available) override;
+
+ // Getters of playback state.
+ // bool paused() const override;
+
+ // True if the loaded media has a playable video track.
+ // bool hasVideo() const override;
+
+ // This function is called by the RendererMediaPlayerManager to pause the
+ // video and release the media player and surface texture when we switch tabs.
+ // However, the actual GlTexture is not released to keep the video screenshot.
+ void ReleaseMediaResources() override;
+
+#if defined(VIDEO_HOLE)
+ // Calculate the boundary rectangle of the media player (i.e. location and
+ // size of the video frame).
+ // Returns true if the geometry has been changed since the last call.
+ bool UpdateBoundaryRectangle() override;
+
+ const gfx::RectF GetBoundaryRectangle() override;
+#endif
+
+ void DrawRemotePlaybackText(const std::string& remote_playback_message);
+#endif
+
private:
// Initiate suspending the pipeline.
void Suspend();
@@ -242,7 +314,7 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
// Called when a decoder detects that the key needed to decrypt the stream
// is not available.
- void OnWaitingForDecryptionKey();
+ void OnWaitingForDecryptionKey() override;
// Sets |cdm_context| on the pipeline and fires |cdm_attached_cb| when done.
// Parameter order is reversed for easy binding.
@@ -400,6 +472,25 @@ class MEDIA_BLINK_EXPORT WebMediaPlayerImpl
scoped_ptr<RendererFactory> renderer_factory_;
+#if defined(WIMPI_CAST)
+ // Manages this object and delegates player calls to the browser process.
+ // Owned by RenderFrameImpl.
+ RendererMediaPlayerManagerInterface* player_manager_ = nullptr;
+
+ // Player ID assigned by the |player_manager_|.
+ int player_id_;
+
+ // Whether the browser is currently connected to a remote media player.
+ bool is_remote_ = false;
+
+ // Last reported playout time.
+ base::TimeDelta remote_time_;
+ base::TimeTicks remote_time_at_;
+
+ // Whether the media player has been initialized.
+ bool is_player_initialized_ = false;
+#endif
+
DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
};

Powered by Google App Engine
This is Rietveld 408576698