Chromium Code Reviews| 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..6ee20866b190d87007df8ae6a0eb69cc1caa0188 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" |
| @@ -160,22 +162,35 @@ 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); |
| + // Called to request decoder resources. Returns true if the request is |
| + // permitted, or false otherwise. The manager object maintains an array |
| + // 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); |
|
ctserng
2015/09/30 17:41:11
Can we make RequestDecoderResources protected so t
qinmin
2015/09/30 19:27:42
Done.
|
| + |
| + // 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 OnDecorderResourcesReleased(int player_id); |
|
ctserng
2015/09/30 17:41:10
/s/Decorder/Decoder
Also can we make OnDecoderRes
qinmin
2015/09/30 19:27:42
Done.
|
| + |
| + // 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_; |