Index: content/browser/media/android/browser_media_player_manager.h |
diff --git a/content/browser/media/android/browser_media_player_manager.h b/content/browser/media/android/browser_media_player_manager.h |
index cb0ce381f8669f7a5f9ae75be661872f9672745f..2360cead8711721797d42a999543ec95d5f49f72 100644 |
--- a/content/browser/media/android/browser_media_player_manager.h |
+++ b/content/browser/media/android/browser_media_player_manager.h |
@@ -5,6 +5,8 @@ |
#ifndef CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_MEDIA_PLAYER_MANAGER_H_ |
#define CONTENT_BROWSER_MEDIA_ANDROID_BROWSER_MEDIA_PLAYER_MANAGER_H_ |
+#include <map> |
+ |
#include "base/basictypes.h" |
#include "base/callback.h" |
#include "base/memory/scoped_ptr.h" |
@@ -148,6 +150,21 @@ class CONTENT_EXPORT BrowserMediaPlayerManager |
int player_id, |
media::MediaPlayerAndroid* player); |
+ // Called to request decoder resources. Returns true if the request is |
+ // permitted, or false otherwise. The manager object maintains an array |
Ted C
2015/10/01 02:19:57
"an array" seems a bit too specific. maybe a list
qinmin
2015/10/01 18:14:02
Done.
|
+ // of active MediaPlayerAndroid objects and releases the inactive resources |
+ // when needed. If |temporary| is true, the request is short lived |
+ // and it will not be cleaned up when handling other requests. |
+ // On the contrary, requests with false |temporary| value are subject to |
+ // clean up if their players are idle. |
+ virtual bool RequestDecoderResources(int player_id, bool temporary); |
+ |
+ // MediaPlayerAndroid must call this to inform the manager that it has |
+ // released the decoder resources. This can be triggered by the |
+ // ReleasePlayer() call below, or when meta data is extracted, or when player |
+ // is stuck in an error. |
+ virtual void OnDecoderResourcesReleased(int player_id); |
+ |
int RoutingID(); |
// Helper function to send messages to RenderFrameObserver. |
@@ -160,22 +177,20 @@ class CONTENT_EXPORT BrowserMediaPlayerManager |
bool hide_url_log, |
BrowserDemuxerAndroid* demuxer); |
- // MediaPlayerAndroid must call this before it is going to decode |
- // media streams. This helps the manager object maintain an array |
- // of active MediaPlayerAndroid objects and release the resources |
- // when needed. Currently we only count video resources as they are |
- // constrained by hardware and memory limits. |
- virtual void OnMediaResourcesRequested(int player_id); |
+ // Instructs |player| to release its java player. This will not remove the |
+ // player from |players_|. |
+ void ReleasePlayer(media::MediaPlayerAndroid* player); |
- // Called when a player releases all decoding resources. |
- void ReleaseMediaResources(int player_id); |
+ // Called when user approves media playback after being throttled. |
+ void OnPlaybackPermissionGranted(int player_id, bool granted); |
- // Releases the player. However, don't remove it from |players_|. |
- void ReleasePlayer(media::MediaPlayerAndroid* player); |
+ // Helper method to start playback. |
+ void StartInternal(int player_id); |
#if defined(VIDEO_HOLE) |
void ReleasePlayerOfExternalVideoSurfaceIfNeeded(int future_player); |
void OnRequestExternalSurface(int player_id, const gfx::RectF& rect); |
+ void ReleaseExternalSurface(int player_id); |
#endif // defined(VIDEO_HOLE) |
RenderFrameHost* const render_frame_host_; |
@@ -183,6 +198,12 @@ class CONTENT_EXPORT BrowserMediaPlayerManager |
// An array of managed players. |
ScopedVector<media::MediaPlayerAndroid> players_; |
+ typedef std::map<int, bool> ActivePlayerMap; |
+ // Players that have requested decoding resources. Even though resource is |
+ // requested, a player may be in a paused or error state and the manager |
+ // will release its resources later. |
+ ActivePlayerMap active_players_; |
+ |
// The fullscreen video view object or NULL if video is not played in |
// fullscreen. |
scoped_ptr<ContentVideoView> video_view_; |