1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker ** 3*ec779b8eSAndroid Build Coastguard Worker ** Copyright 2012, The Android Open Source Project 4*ec779b8eSAndroid Build Coastguard Worker ** 5*ec779b8eSAndroid Build Coastguard Worker ** Licensed under the Apache License, Version 2.0 (the "License"); 6*ec779b8eSAndroid Build Coastguard Worker ** you may not use this file except in compliance with the License. 7*ec779b8eSAndroid Build Coastguard Worker ** You may obtain a copy of the License at 8*ec779b8eSAndroid Build Coastguard Worker ** 9*ec779b8eSAndroid Build Coastguard Worker ** http://www.apache.org/licenses/LICENSE-2.0 10*ec779b8eSAndroid Build Coastguard Worker ** 11*ec779b8eSAndroid Build Coastguard Worker ** Unless required by applicable law or agreed to in writing, software 12*ec779b8eSAndroid Build Coastguard Worker ** distributed under the License is distributed on an "AS IS" BASIS, 13*ec779b8eSAndroid Build Coastguard Worker ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*ec779b8eSAndroid Build Coastguard Worker ** See the License for the specific language governing permissions and 15*ec779b8eSAndroid Build Coastguard Worker ** limitations under the License. 16*ec779b8eSAndroid Build Coastguard Worker */ 17*ec779b8eSAndroid Build Coastguard Worker 18*ec779b8eSAndroid Build Coastguard Worker #ifndef ANDROID_MEDIAPLAYERFACTORY_H 19*ec779b8eSAndroid Build Coastguard Worker #define ANDROID_MEDIAPLAYERFACTORY_H 20*ec779b8eSAndroid Build Coastguard Worker 21*ec779b8eSAndroid Build Coastguard Worker #include <media/MediaPlayerInterface.h> 22*ec779b8eSAndroid Build Coastguard Worker #include <media/stagefright/foundation/ABase.h> 23*ec779b8eSAndroid Build Coastguard Worker 24*ec779b8eSAndroid Build Coastguard Worker namespace android { 25*ec779b8eSAndroid Build Coastguard Worker 26*ec779b8eSAndroid Build Coastguard Worker class MediaPlayerFactory { 27*ec779b8eSAndroid Build Coastguard Worker public: 28*ec779b8eSAndroid Build Coastguard Worker class IFactory { 29*ec779b8eSAndroid Build Coastguard Worker public: ~IFactory()30*ec779b8eSAndroid Build Coastguard Worker virtual ~IFactory() { } 31*ec779b8eSAndroid Build Coastguard Worker scoreFactory(const sp<IMediaPlayer> &,const char *,float)32*ec779b8eSAndroid Build Coastguard Worker virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, 33*ec779b8eSAndroid Build Coastguard Worker const char* /*url*/, 34*ec779b8eSAndroid Build Coastguard Worker float /*curScore*/) { return 0.0; } 35*ec779b8eSAndroid Build Coastguard Worker scoreFactory(const sp<IMediaPlayer> &,int,int64_t,int64_t,float)36*ec779b8eSAndroid Build Coastguard Worker virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, 37*ec779b8eSAndroid Build Coastguard Worker int /*fd*/, 38*ec779b8eSAndroid Build Coastguard Worker int64_t /*offset*/, 39*ec779b8eSAndroid Build Coastguard Worker int64_t /*length*/, 40*ec779b8eSAndroid Build Coastguard Worker float /*curScore*/) { return 0.0; } 41*ec779b8eSAndroid Build Coastguard Worker scoreFactory(const sp<IMediaPlayer> &,const sp<IStreamSource> &,float)42*ec779b8eSAndroid Build Coastguard Worker virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, 43*ec779b8eSAndroid Build Coastguard Worker const sp<IStreamSource> &/*source*/, 44*ec779b8eSAndroid Build Coastguard Worker float /*curScore*/) { return 0.0; } 45*ec779b8eSAndroid Build Coastguard Worker scoreFactory(const sp<IMediaPlayer> &,const sp<DataSource> &,float)46*ec779b8eSAndroid Build Coastguard Worker virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, 47*ec779b8eSAndroid Build Coastguard Worker const sp<DataSource> &/*source*/, 48*ec779b8eSAndroid Build Coastguard Worker float /*curScore*/) { return 0.0; } 49*ec779b8eSAndroid Build Coastguard Worker 50*ec779b8eSAndroid Build Coastguard Worker virtual sp<MediaPlayerBase> createPlayer(pid_t pid) = 0; 51*ec779b8eSAndroid Build Coastguard Worker }; 52*ec779b8eSAndroid Build Coastguard Worker 53*ec779b8eSAndroid Build Coastguard Worker static status_t registerFactory(IFactory* factory, 54*ec779b8eSAndroid Build Coastguard Worker player_type type); 55*ec779b8eSAndroid Build Coastguard Worker static void unregisterFactory(player_type type); 56*ec779b8eSAndroid Build Coastguard Worker static player_type getPlayerType(const sp<IMediaPlayer>& client, 57*ec779b8eSAndroid Build Coastguard Worker const char* url); 58*ec779b8eSAndroid Build Coastguard Worker static player_type getPlayerType(const sp<IMediaPlayer>& client, 59*ec779b8eSAndroid Build Coastguard Worker int fd, 60*ec779b8eSAndroid Build Coastguard Worker int64_t offset, 61*ec779b8eSAndroid Build Coastguard Worker int64_t length); 62*ec779b8eSAndroid Build Coastguard Worker static player_type getPlayerType(const sp<IMediaPlayer>& client, 63*ec779b8eSAndroid Build Coastguard Worker const sp<IStreamSource> &source); 64*ec779b8eSAndroid Build Coastguard Worker static player_type getPlayerType(const sp<IMediaPlayer>& client, 65*ec779b8eSAndroid Build Coastguard Worker const sp<DataSource> &source); 66*ec779b8eSAndroid Build Coastguard Worker 67*ec779b8eSAndroid Build Coastguard Worker static sp<MediaPlayerBase> createPlayer(player_type playerType, 68*ec779b8eSAndroid Build Coastguard Worker const sp<MediaPlayerBase::Listener> &listener, 69*ec779b8eSAndroid Build Coastguard Worker pid_t pid); 70*ec779b8eSAndroid Build Coastguard Worker 71*ec779b8eSAndroid Build Coastguard Worker static void registerBuiltinFactories(); 72*ec779b8eSAndroid Build Coastguard Worker 73*ec779b8eSAndroid Build Coastguard Worker private: 74*ec779b8eSAndroid Build Coastguard Worker typedef KeyedVector<player_type, IFactory*> tFactoryMap; 75*ec779b8eSAndroid Build Coastguard Worker MediaPlayerFactory()76*ec779b8eSAndroid Build Coastguard Worker MediaPlayerFactory() { } 77*ec779b8eSAndroid Build Coastguard Worker 78*ec779b8eSAndroid Build Coastguard Worker static status_t registerFactory_l(IFactory* factory, 79*ec779b8eSAndroid Build Coastguard Worker player_type type); 80*ec779b8eSAndroid Build Coastguard Worker 81*ec779b8eSAndroid Build Coastguard Worker static Mutex sLock; 82*ec779b8eSAndroid Build Coastguard Worker static tFactoryMap sFactoryMap; 83*ec779b8eSAndroid Build Coastguard Worker static bool sInitComplete; 84*ec779b8eSAndroid Build Coastguard Worker 85*ec779b8eSAndroid Build Coastguard Worker DISALLOW_EVIL_CONSTRUCTORS(MediaPlayerFactory); 86*ec779b8eSAndroid Build Coastguard Worker }; 87*ec779b8eSAndroid Build Coastguard Worker 88*ec779b8eSAndroid Build Coastguard Worker } // namespace android 89*ec779b8eSAndroid Build Coastguard Worker #endif // ANDROID_MEDIAPLAYERFACTORY_H 90