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