summaryrefslogtreecommitdiffstats
path: root/content/browser/android
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-11 22:34:10 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-11 22:34:10 +0000
commit08c3991323919f67aea15e90dd114d618ab17dd9 (patch)
tree179234504c3b00d8d9b2ea7fce96336a26c1d68f /content/browser/android
parent5df6745154c3ece1fccc54be830af66e84a2f5fb (diff)
downloadchromium_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.cc72
-rw-r--r--content/browser/android/browser_media_player_manager.h26
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_;