blob: 5813b2efcdfd5aa172728edeec156765918947b2 [file] [log] [blame]
Wei Jia53692fa2017-12-11 10:33:46 -08001/*
2**
3** Copyright 2017, 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_MEDIAPLAYER2FACTORY_H
19#define ANDROID_MEDIAPLAYER2FACTORY_H
20
21#include <media/MediaPlayer2Interface.h>
22#include <media/stagefright/foundation/ABase.h>
23
24namespace android {
25
26class MediaPlayer2Factory {
27 public:
28 class IFactory {
29 public:
30 virtual ~IFactory() { }
31
32 virtual float scoreFactory(const sp<MediaPlayer2Engine>& /*client*/,
33 const char* /*url*/,
34 float /*curScore*/) { return 0.0; }
35
36 virtual float scoreFactory(const sp<MediaPlayer2Engine>& /*client*/,
37 int /*fd*/,
38 int64_t /*offset*/,
39 int64_t /*length*/,
40 float /*curScore*/) { return 0.0; }
41
42 virtual float scoreFactory(const sp<MediaPlayer2Engine>& /*client*/,
43 const sp<IStreamSource> &/*source*/,
44 float /*curScore*/) { return 0.0; }
45
46 virtual float scoreFactory(const sp<MediaPlayer2Engine>& /*client*/,
47 const sp<DataSource> &/*source*/,
48 float /*curScore*/) { return 0.0; }
49
50 virtual sp<MediaPlayer2Base> createPlayer(pid_t pid) = 0;
51 };
52
53 static status_t registerFactory(IFactory* factory,
54 player2_type type);
55 static void unregisterFactory(player2_type type);
56 static player2_type getPlayerType(const sp<MediaPlayer2Engine>& client,
57 const char* url);
58 static player2_type getPlayerType(const sp<MediaPlayer2Engine>& client,
59 int fd,
60 int64_t offset,
61 int64_t length);
62 static player2_type getPlayerType(const sp<MediaPlayer2Engine>& client,
63 const sp<IStreamSource> &source);
64 static player2_type getPlayerType(const sp<MediaPlayer2Engine>& client,
65 const sp<DataSource> &source);
66
67 static sp<MediaPlayer2Base> createPlayer(player2_type playerType,
68 void* cookie,
69 notify_callback_f notifyFunc,
70 pid_t pid);
71
72 static void registerBuiltinFactories();
73
74 private:
75 typedef KeyedVector<player2_type, IFactory*> tFactoryMap;
76
77 MediaPlayer2Factory() { }
78
79 static status_t registerFactory_l(IFactory* factory,
80 player2_type type);
81
82 static Mutex sLock;
83 static tFactoryMap sFactoryMap;
84 static bool sInitComplete;
85
86 DISALLOW_EVIL_CONSTRUCTORS(MediaPlayer2Factory);
87};
88
89} // namespace android
90#endif // ANDROID_MEDIAPLAYER2FACTORY_H