MediaPlayerFactory.h revision 9b48f5d780757ffb81709df3633d06b62edaf39f
1/*
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
32        virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/,
33                                   const char* /*url*/,
34                                   float /*curScore*/) { return 0.0; }
35
36        virtual float scoreFactory(const sp<IMediaPlayer>& /*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<IMediaPlayer>& /*client*/,
43                                   const sp<IStreamSource> &/*source*/,
44                                   float /*curScore*/) { return 0.0; }
45
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
75    static Mutex       sLock;
76    static tFactoryMap sFactoryMap;
77    static bool        sInitComplete;
78
79    DISALLOW_EVIL_CONSTRUCTORS(MediaPlayerFactory);
80};
81
82}  // namespace android
83#endif  // ANDROID_MEDIAPLAYERFACTORY_H
84