diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-11 22:34:10 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-11 22:34:10 +0000 |
commit | 08c3991323919f67aea15e90dd114d618ab17dd9 (patch) | |
tree | 179234504c3b00d8d9b2ea7fce96336a26c1d68f /content/browser/android | |
parent | 5df6745154c3ece1fccc54be830af66e84a2f5fb (diff) | |
download | chromium_src-08c3991323919f67aea15e90dd114d618ab17dd9.zip chromium_src-08c3991323919f67aea15e90dd114d618ab17dd9.tar.gz chromium_src-08c3991323919f67aea15e90dd114d618ab17dd9.tar.bz2 |
Move demuxer-related operations from media::MediaPlayerManager to media::DemuxerAndroid.
Introducing these interfaces reduces coupling between regular URL-based playbacks and media source playbacks, making it easier to replace the demuxer implementation without impacting URL-based playbacks.
While it'd be nice to use the existing media::Demuxer{Stream} interfaces, it'd be a significantly larger change that isn't necessary at this time.
BUG=263652
Review URL: https://chromiumcodereview.appspot.com/23571008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@222652 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/android')
-rw-r--r-- | content/browser/android/browser_media_player_manager.cc | 72 | ||||
-rw-r--r-- | content/browser/android/browser_media_player_manager.h | 26 |
2 files changed, 68 insertions, 30 deletions
diff --git a/content/browser/android/browser_media_player_manager.cc b/content/browser/android/browser_media_player_manager.cc index f05dce4..c356267 100644 --- a/content/browser/android/browser_media_player_manager.cc +++ b/content/browser/android/browser_media_player_manager.cc @@ -54,7 +54,8 @@ MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer( MediaPlayerHostMsg_Initialize_Type type, const GURL& first_party_for_cookies, bool hide_url_log, - MediaPlayerManager* manager) { + MediaPlayerManager* manager, + media::DemuxerAndroid* demuxer) { switch (type) { case MEDIA_PLAYER_TYPE_URL: { MediaPlayerBridge* media_player_bridge = new MediaPlayerBridge( @@ -64,7 +65,9 @@ MediaPlayerAndroid* BrowserMediaPlayerManager::CreateMediaPlayer( } case MEDIA_PLAYER_TYPE_MEDIA_SOURCE: { - return new MediaSourcePlayer(player_id, manager); + // TODO(scherkus): Use a real ID for |demuxer_client_id| after splitting + // demuxer IPC messages into their own group. For now use |player_id|. + return new MediaSourcePlayer(player_id, manager, player_id, demuxer); } } @@ -222,9 +225,21 @@ void BrowserMediaPlayerManager::OnVideoSizeChanged( video_view_->OnVideoSizeChanged(width, height); } -void BrowserMediaPlayerManager::OnReadFromDemuxer( - int player_id, media::DemuxerStream::Type type) { - Send(new MediaPlayerMsg_ReadFromDemuxer(routing_id(), player_id, type)); +void BrowserMediaPlayerManager::AddDemuxerClient( + int demuxer_client_id, + media::DemuxerAndroidClient* client) { + demuxer_clients_.AddWithID(client, demuxer_client_id); +} + +void BrowserMediaPlayerManager::RemoveDemuxerClient(int demuxer_client_id) { + demuxer_clients_.Remove(demuxer_client_id); +} + +void BrowserMediaPlayerManager::RequestDemuxerData( + int demuxer_client_id, media::DemuxerStream::Type type) { + DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id; + Send(new MediaPlayerMsg_ReadFromDemuxer( + routing_id(), demuxer_client_id, type)); } void BrowserMediaPlayerManager::RequestMediaResources(int player_id) { @@ -303,14 +318,17 @@ void BrowserMediaPlayerManager::DestroyAllMediaPlayers() { } } -void BrowserMediaPlayerManager::OnMediaSeekRequest( - int player_id, base::TimeDelta time_to_seek, unsigned seek_request_id) { +void BrowserMediaPlayerManager::RequestDemuxerSeek(int demuxer_client_id, + base::TimeDelta time_to_seek, + unsigned seek_request_id) { + DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id; Send(new MediaPlayerMsg_MediaSeekRequest( - routing_id(), player_id, time_to_seek, seek_request_id)); + routing_id(), demuxer_client_id, time_to_seek, seek_request_id)); } -void BrowserMediaPlayerManager::OnMediaConfigRequest(int player_id) { - Send(new MediaPlayerMsg_MediaConfigRequest(routing_id(), player_id)); +void BrowserMediaPlayerManager::RequestDemuxerConfigs(int demuxer_client_id) { + DCHECK(demuxer_clients_.Lookup(demuxer_client_id)) << demuxer_client_id; + Send(new MediaPlayerMsg_MediaConfigRequest(routing_id(), demuxer_client_id)); } void BrowserMediaPlayerManager::OnProtectedSurfaceRequested(int player_id) { @@ -413,7 +431,7 @@ void BrowserMediaPlayerManager::OnInitialize( RenderProcessHost* host = render_view_host()->GetProcess(); AddPlayer(CreateMediaPlayer( player_id, url, type, first_party_for_cookies, - host->GetBrowserContext()->IsOffTheRecord(), this)); + host->GetBrowserContext()->IsOffTheRecord(), this, this)); } void BrowserMediaPlayerManager::OnStart(int player_id) { @@ -465,24 +483,30 @@ void BrowserMediaPlayerManager::OnDestroyPlayer(int player_id) { void BrowserMediaPlayerManager::OnDemuxerReady( int player_id, const media::DemuxerConfigs& configs) { - MediaPlayerAndroid* player = GetPlayer(player_id); - if (player) - player->DemuxerReady(configs); + // TODO(scherkus): Rename |player_id| to |demuxer_client_id| after splitting + // demuxer IPC messages into their own group. + media::DemuxerAndroidClient* client = demuxer_clients_.Lookup(player_id); + if (client) + client->OnDemuxerConfigsAvailable(configs); } void BrowserMediaPlayerManager::OnReadFromDemuxerAck( int player_id, const media::DemuxerData& data) { - MediaPlayerAndroid* player = GetPlayer(player_id); - if (player) - player->ReadFromDemuxerAck(data); + // TODO(scherkus): Rename |player_id| to |demuxer_client_id| after splitting + // demuxer IPC messages into their own group. + media::DemuxerAndroidClient* client = demuxer_clients_.Lookup(player_id); + if (client) + client->OnDemuxerDataAvailable(data); } void BrowserMediaPlayerManager::OnMediaSeekRequestAck( int player_id, unsigned seek_request_id) { - MediaPlayerAndroid* player = GetPlayer(player_id); - if (player) - player->OnSeekRequestAck(seek_request_id); + // TODO(scherkus): Rename |player_id| to |demuxer_client_id| after splitting + // demuxer IPC messages into their own group. + media::DemuxerAndroidClient* client = demuxer_clients_.Lookup(player_id); + if (client) + client->OnDemuxerSeeked(seek_request_id); } void BrowserMediaPlayerManager::OnInitializeCDM( @@ -531,9 +555,11 @@ void BrowserMediaPlayerManager::OnCancelKeyRequest( void BrowserMediaPlayerManager::OnDurationChanged( int player_id, const base::TimeDelta& duration) { - MediaPlayerAndroid* player = GetPlayer(player_id); - if (player) - player->DurationChanged(duration); + // TODO(scherkus): Rename |player_id| to |demuxer_client_id| after splitting + // demuxer IPC messages into their own group. + media::DemuxerAndroidClient* client = demuxer_clients_.Lookup(player_id); + if (client) + client->OnDemuxerDurationChanged(duration); } void BrowserMediaPlayerManager::AddPlayer(MediaPlayerAndroid* player) { diff --git a/content/browser/android/browser_media_player_manager.h b/content/browser/android/browser_media_player_manager.h index 6e433da..192e24b 100644 --- a/content/browser/android/browser_media_player_manager.h +++ b/content/browser/android/browser_media_player_manager.h @@ -11,12 +11,14 @@ #include "base/basictypes.h" #include "base/callback.h" +#include "base/id_map.h" #include "base/memory/scoped_ptr.h" #include "base/memory/scoped_vector.h" #include "base/time/time.h" #include "content/browser/android/content_video_view.h" #include "content/common/media/media_player_messages_enums_android.h" #include "content/public/browser/render_view_host_observer.h" +#include "media/base/android/demuxer_android.h" #include "media/base/android/demuxer_stream_player_params.h" #include "media/base/android/media_player_android.h" #include "media/base/android/media_player_manager.h" @@ -38,7 +40,8 @@ class WebContents; // render process. class CONTENT_EXPORT BrowserMediaPlayerManager : public RenderViewHostObserver, - public media::MediaPlayerManager { + public media::MediaPlayerManager, + public media::DemuxerAndroid { public: // Permits embedders to provide an extended version of the class. typedef BrowserMediaPlayerManager* (*Factory)(RenderViewHost*); @@ -76,8 +79,6 @@ class CONTENT_EXPORT BrowserMediaPlayerManager virtual void OnError(int player_id, int error) OVERRIDE; virtual void OnVideoSizeChanged( int player_id, int width, int height) OVERRIDE; - virtual void OnReadFromDemuxer(int player_id, - media::DemuxerStream::Type type) OVERRIDE; virtual void RequestMediaResources(int player_id) OVERRIDE; virtual void ReleaseMediaResources(int player_id) OVERRIDE; virtual media::MediaResourceGetter* GetMediaResourceGetter() OVERRIDE; @@ -85,9 +86,6 @@ class CONTENT_EXPORT BrowserMediaPlayerManager virtual media::MediaPlayerAndroid* GetPlayer(int player_id) OVERRIDE; virtual media::MediaDrmBridge* GetDrmBridge(int media_keys_id) OVERRIDE; virtual void DestroyAllMediaPlayers() OVERRIDE; - virtual void OnMediaSeekRequest(int player_id, base::TimeDelta time_to_seek, - unsigned seek_request_id) OVERRIDE; - virtual void OnMediaConfigRequest(int player_id) OVERRIDE; virtual void OnProtectedSurfaceRequested(int player_id) OVERRIDE; virtual void OnKeyAdded(int media_keys_id, const std::string& session_id) OVERRIDE; @@ -100,6 +98,17 @@ class CONTENT_EXPORT BrowserMediaPlayerManager const std::vector<uint8>& message, const std::string& destination_url) OVERRIDE; + // media::DemuxerAndroid implementation. + virtual void AddDemuxerClient(int demuxer_client_id, + media::DemuxerAndroidClient* client) OVERRIDE; + virtual void RemoveDemuxerClient(int demuxer_client_id) OVERRIDE; + virtual void RequestDemuxerConfigs(int demuxer_client_id) OVERRIDE; + virtual void RequestDemuxerData(int demuxer_client_id, + media::DemuxerStream::Type type) OVERRIDE; + virtual void RequestDemuxerSeek(int demuxer_client_id, + base::TimeDelta time_to_seek, + unsigned seek_request_id) OVERRIDE; + #if defined(GOOGLE_TV) void AttachExternalVideoSurface(int player_id, jobject surface); void DetachExternalVideoSurface(int player_id); @@ -171,7 +180,8 @@ class CONTENT_EXPORT BrowserMediaPlayerManager MediaPlayerHostMsg_Initialize_Type type, const GURL& first_party_for_cookies, bool hide_url_log, - media::MediaPlayerManager* manager); + media::MediaPlayerManager* manager, + media::DemuxerAndroid* demuxer); // An array of managed players. ScopedVector<media::MediaPlayerAndroid> players_; @@ -179,6 +189,8 @@ class CONTENT_EXPORT BrowserMediaPlayerManager // An array of managed media DRM bridges. ScopedVector<media::MediaDrmBridge> drm_bridges_; + IDMap<media::DemuxerAndroidClient> demuxer_clients_; + // The fullscreen video view object or NULL if video is not played in // fullscreen. scoped_ptr<ContentVideoView> video_view_; |