xref: /aosp_15_r20/frameworks/av/media/libmediaplayerservice/MediaPlayerFactory.h (revision ec779b8e0859a360c3d303172224686826e6e0e1)
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