From 44a7e42f0310831e6a846d1b6bb40bf3a399bf6d Mon Sep 17 00:00:00 2001 From: John Grossman Date: Thu, 21 Jun 2012 17:29:24 -0700 Subject: Add the ability to dynamicaly register MediaPlayer types. Add the ability to dynamically register low level MediaPlayer factories which will be probed at setDataSource time to determine the proper MediaPlayerBase to instantiate. This change is in preparation for moving libaah_rtp out of frameworks/base and into phantasm platform directory. Change-Id: Icf8904db3ab9e3c85df6e780d5546d9988cb9076 Signed-off-by: John Grossman --- .../MetadataRetrieverClient.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index e44031e..348957f 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -37,12 +37,10 @@ #include "MidiMetadataRetriever.h" #include "MetadataRetrieverClient.h" #include "StagefrightMetadataRetriever.h" +#include "MediaPlayerFactory.h" namespace android { -extern player_type getPlayerType(const char* url); -extern player_type getPlayerType(int fd, int64_t offset, int64_t length); - MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) { ALOGV("MetadataRetrieverClient constructor pid(%d)", pid); @@ -115,7 +113,17 @@ status_t MetadataRetrieverClient::setDataSource( if (url == NULL) { return UNKNOWN_ERROR; } - player_type playerType = getPlayerType(url); + + // When asking the MediaPlayerFactory subsystem to choose a media player for + // a given URL, a pointer to an outer IMediaPlayer can be passed to the + // factory system to be taken into consideration along with the URL. In the + // case of choosing an instance of a MediaPlayerBase for a + // MetadataRetrieverClient, there is no outer IMediaPlayer which will + // eventually encapsulate the result of this selection. In this case, just + // pass NULL to getPlayerType to indicate that there is no outer + // IMediaPlayer to consider during selection. + player_type playerType = + MediaPlayerFactory::getPlayerType(NULL /* client */, url); ALOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) return NO_INIT; @@ -150,7 +158,11 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t ALOGV("calculated length = %lld", length); } - player_type playerType = getPlayerType(fd, offset, length); + player_type playerType = + MediaPlayerFactory::getPlayerType(NULL /* client */, + fd, + offset, + length); ALOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) { -- cgit v1.1