| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_ |
| 6 #define CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_ | 6 #define CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/macros.h" | 11 #include "base/macros.h" |
| 12 #include "base/time/time.h" | 12 #include "base/time/time.h" |
| 13 #include "content/common/media/media_player_messages_enums_android.h" | |
| 14 #include "content/public/renderer/render_frame_observer.h" | 13 #include "content/public/renderer/render_frame_observer.h" |
| 15 #include "media/base/android/media_player_android.h" | 14 #include "media/base/android/media_player_android.h" |
| 15 #include "media/blink/renderer_media_player_interface.h" |
| 16 #include "url/gurl.h" | 16 #include "url/gurl.h" |
| 17 | 17 |
| 18 namespace blink { | 18 namespace blink { |
| 19 class WebFrame; | 19 class WebFrame; |
| 20 } | 20 } |
| 21 | 21 |
| 22 namespace gfx { | 22 namespace gfx { |
| 23 class RectF; | 23 class RectF; |
| 24 } | 24 } |
| 25 | 25 |
| 26 struct MediaPlayerHostMsg_Initialize_Params; | 26 struct MediaPlayerHostMsg_Initialize_Params; |
| 27 | 27 |
| 28 namespace content { | 28 namespace content { |
| 29 class WebMediaPlayerAndroid; | 29 class WebMediaPlayerAndroid; |
| 30 | 30 |
| 31 // Class for managing all the WebMediaPlayerAndroid objects in the same | 31 // Class for managing all the WebMediaPlayerAndroid objects in the same |
| 32 // RenderFrame. | 32 // RenderFrame. |
| 33 class RendererMediaPlayerManager : public RenderFrameObserver { | 33 class RendererMediaPlayerManager : |
| 34 public RenderFrameObserver, |
| 35 public media::RendererMediaPlayerManagerInterface { |
| 34 public: | 36 public: |
| 35 // Constructs a RendererMediaPlayerManager object for the |render_frame|. | 37 // Constructs a RendererMediaPlayerManager object for the |render_frame|. |
| 36 explicit RendererMediaPlayerManager(RenderFrame* render_frame); | 38 explicit RendererMediaPlayerManager(RenderFrame* render_frame); |
| 37 ~RendererMediaPlayerManager() override; | 39 ~RendererMediaPlayerManager() override; |
| 38 | 40 |
| 39 // RenderFrameObserver overrides. | 41 // RenderFrameObserver overrides. |
| 40 bool OnMessageReceived(const IPC::Message& msg) override; | 42 bool OnMessageReceived(const IPC::Message& msg) override; |
| 41 void WasHidden() override; | 43 void WasHidden() override; |
| 42 | 44 |
| 43 // Initializes a MediaPlayerAndroid object in browser process. | 45 // Initializes a MediaPlayerAndroid object in browser process. |
| 44 void Initialize(MediaPlayerHostMsg_Initialize_Type type, | 46 void Initialize(MediaPlayerHostMsg_Initialize_Type type, |
| 45 int player_id, | 47 int player_id, |
| 46 const GURL& url, | 48 const GURL& url, |
| 47 const GURL& first_party_for_cookies, | 49 const GURL& first_party_for_cookies, |
| 48 int demuxer_client_id, | 50 int demuxer_client_id, |
| 49 const GURL& frame_url, | 51 const GURL& frame_url, |
| 50 bool allow_credentials); | 52 bool allow_credentials) override; |
| 51 | 53 |
| 52 // Starts the player. | 54 // Starts the player. |
| 53 void Start(int player_id); | 55 void Start(int player_id) override; |
| 54 | 56 |
| 55 // Pauses the player. | 57 // Pauses the player. |
| 56 // is_media_related_action should be true if this pause is coming from an | 58 // is_media_related_action should be true if this pause is coming from an |
| 57 // an action that explicitly pauses the video (user pressing pause, JS, etc.) | 59 // an action that explicitly pauses the video (user pressing pause, JS, etc.) |
| 58 // Otherwise it should be false if Pause is being called due to other reasons | 60 // Otherwise it should be false if Pause is being called due to other reasons |
| 59 // (cleanup, freeing resources, etc.) | 61 // (cleanup, freeing resources, etc.) |
| 60 void Pause(int player_id, bool is_media_related_action); | 62 void Pause(int player_id, bool is_media_related_action) override; |
| 61 | 63 |
| 62 // Performs seek on the player. | 64 // Performs seek on the player. |
| 63 void Seek(int player_id, const base::TimeDelta& time); | 65 void Seek(int player_id, const base::TimeDelta& time) override; |
| 64 | 66 |
| 65 // Sets the player volume. | 67 // Sets the player volume. |
| 66 void SetVolume(int player_id, double volume); | 68 void SetVolume(int player_id, double volume) override; |
| 67 | 69 |
| 68 // Sets the poster image. | 70 // Sets the poster image. |
| 69 void SetPoster(int player_id, const GURL& poster); | 71 void SetPoster(int player_id, const GURL& poster) override; |
| 70 | 72 |
| 71 // Releases resources for the player after being suspended. | 73 // Releases resources for the player after being suspended. |
| 72 void SuspendAndReleaseResources(int player_id); | 74 void SuspendAndReleaseResources(int player_id); |
| 73 | 75 |
| 74 // Destroys the player in the browser process | 76 // Destroys the player in the browser process |
| 75 void DestroyPlayer(int player_id); | 77 void DestroyPlayer(int player_id) override; |
| 76 | 78 |
| 77 // Requests remote playback if possible | 79 // Requests remote playback if possible |
| 78 void RequestRemotePlayback(int player_id); | 80 void RequestRemotePlayback(int player_id) override; |
| 79 | 81 |
| 80 // Requests control of remote playback | 82 // Requests control of remote playback |
| 81 void RequestRemotePlaybackControl(int player_id); | 83 void RequestRemotePlaybackControl(int player_id) override; |
| 82 | 84 |
| 83 // Requests the player to enter fullscreen. | 85 // Requests the player to enter fullscreen. |
| 84 void EnterFullscreen(int player_id); | 86 void EnterFullscreen(int player_id); |
| 85 | 87 |
| 86 // Requests the player with |player_id| to use the CDM with |cdm_id|. | 88 // Requests the player with |player_id| to use the CDM with |cdm_id|. |
| 87 // Does nothing if |cdm_id| is kInvalidCdmId. | 89 // Does nothing if |cdm_id| is kInvalidCdmId. |
| 88 // TODO(xhwang): Update this when we implement setCdm(0). | 90 // TODO(xhwang): Update this when we implement setCdm(0). |
| 89 void SetCdm(int player_id, int cdm_id); | 91 void SetCdm(int player_id, int cdm_id); |
| 90 | 92 |
| 91 #if defined(VIDEO_HOLE) | 93 #if defined(VIDEO_HOLE) |
| 92 // Requests an external surface for out-of-band compositing. | 94 // Requests an external surface for out-of-band compositing. |
| 93 void RequestExternalSurface(int player_id, const gfx::RectF& geometry); | 95 void RequestExternalSurface(int player_id, const gfx::RectF& geometry); |
| 94 | 96 |
| 95 // RenderFrameObserver overrides. | 97 // RenderFrameObserver overrides. |
| 96 void DidCommitCompositorFrame() override; | 98 void DidCommitCompositorFrame() override; |
| 97 | 99 |
| 98 // Returns true if a media player should use video-overlay for the embedded | 100 // Returns true if a media player should use video-overlay for the embedded |
| 99 // encrypted video. | 101 // encrypted video. |
| 100 bool ShouldUseVideoOverlayForEmbeddedEncryptedVideo(); | 102 bool ShouldUseVideoOverlayForEmbeddedEncryptedVideo(); |
| 101 #endif // defined(VIDEO_HOLE) | 103 #endif // defined(VIDEO_HOLE) |
| 102 | 104 |
| 103 // Registers and unregisters a WebMediaPlayerAndroid object. | 105 // Registers and unregisters a WebMediaPlayerAndroid object. |
| 104 int RegisterMediaPlayer(WebMediaPlayerAndroid* player); | 106 int RegisterMediaPlayer(media::RendererMediaPlayerInterface* player) override; |
| 105 void UnregisterMediaPlayer(int player_id); | 107 void UnregisterMediaPlayer(int player_id) override; |
| 106 | 108 |
| 107 // Gets the pointer to WebMediaPlayerAndroid given the |player_id|. | 109 // Gets the pointer to WebMediaPlayerAndroid given the |player_id|. |
| 108 WebMediaPlayerAndroid* GetMediaPlayer(int player_id); | 110 media::RendererMediaPlayerInterface* GetMediaPlayer(int player_id); |
| 109 | 111 |
| 110 #if defined(VIDEO_HOLE) | 112 #if defined(VIDEO_HOLE) |
| 111 // Gets the list of media players with video geometry changes. | 113 // Gets the list of media players with video geometry changes. |
| 112 void RetrieveGeometryChanges(std::map<int, gfx::RectF>* changes); | 114 void RetrieveGeometryChanges(std::map<int, gfx::RectF>* changes); |
| 113 #endif // defined(VIDEO_HOLE) | 115 #endif // defined(VIDEO_HOLE) |
| 114 | 116 |
| 115 private: | 117 private: |
| 116 // Message handlers. | 118 // Message handlers. |
| 117 void OnMediaMetadataChanged(int player_id, | 119 void OnMediaMetadataChanged(int player_id, |
| 118 base::TimeDelta duration, | 120 base::TimeDelta duration, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 133 void OnMediaPlayerReleased(int player_id); | 135 void OnMediaPlayerReleased(int player_id); |
| 134 void OnConnectedToRemoteDevice(int player_id, | 136 void OnConnectedToRemoteDevice(int player_id, |
| 135 const std::string& remote_playback_message); | 137 const std::string& remote_playback_message); |
| 136 void OnDisconnectedFromRemoteDevice(int player_id); | 138 void OnDisconnectedFromRemoteDevice(int player_id); |
| 137 void OnDidExitFullscreen(int player_id); | 139 void OnDidExitFullscreen(int player_id); |
| 138 void OnDidEnterFullscreen(int player_id); | 140 void OnDidEnterFullscreen(int player_id); |
| 139 void OnPlayerPlay(int player_id); | 141 void OnPlayerPlay(int player_id); |
| 140 void OnPlayerPause(int player_id); | 142 void OnPlayerPause(int player_id); |
| 141 void OnRemoteRouteAvailabilityChanged(int player_id, bool routes_available); | 143 void OnRemoteRouteAvailabilityChanged(int player_id, bool routes_available); |
| 142 | 144 |
| 143 // Release all video player resources. | |
| 144 // If something is in progress the resource will not be freed. It will | |
| 145 // only be freed once the tab is destroyed or if the user navigates away | |
| 146 // via WebMediaPlayerAndroid::Destroy. | |
| 147 void ReleaseVideoResources(); | |
| 148 | |
| 149 // Info for all available WebMediaPlayerAndroid on a page; kept so that | 145 // Info for all available WebMediaPlayerAndroid on a page; kept so that |
| 150 // we can enumerate them to send updates about tab focus and visibility. | 146 // we can enumerate them to send updates about tab focus and visibility. |
| 151 std::map<int, WebMediaPlayerAndroid*> media_players_; | 147 std::map<int, media::RendererMediaPlayerInterface*> media_players_; |
| 152 | 148 |
| 153 int next_media_player_id_; | 149 int next_media_player_id_; |
| 154 | 150 |
| 155 DISALLOW_COPY_AND_ASSIGN(RendererMediaPlayerManager); | 151 DISALLOW_COPY_AND_ASSIGN(RendererMediaPlayerManager); |
| 156 }; | 152 }; |
| 157 | 153 |
| 158 } // namespace content | 154 } // namespace content |
| 159 | 155 |
| 160 #endif // CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_ | 156 #endif // CONTENT_RENDERER_MEDIA_ANDROID_RENDERER_MEDIA_PLAYER_MANAGER_H_ |
| OLD | NEW |