summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/MediaPlayerFactory.h
blob: fe8972b80b751de3fd1ec9846dcd7c092e8d0306 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
**
** Copyright 2012, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/

#ifndef ANDROID_MEDIAPLAYERFACTORY_H
#define ANDROID_MEDIAPLAYERFACTORY_H

#include <media/MediaPlayerInterface.h>
#include <media/stagefright/foundation/ABase.h>

namespace android {

class MediaPlayerFactory {
  public:
    class IFactory {
      public:
        virtual ~IFactory() { }

        virtual float scoreFactory(const sp<IMediaPlayer>& client,
                                   const char* url,
                                   float curScore) { return 0.0; }

        virtual float scoreFactory(const sp<IMediaPlayer>& client,
                                   int fd,
                                   int64_t offset,
                                   int64_t length,
                                   float curScore) { return 0.0; }

        virtual float scoreFactory(const sp<IMediaPlayer>& client,
                                   const sp<IStreamSource> &source,
                                   float curScore) { return 0.0; }

        virtual sp<MediaPlayerBase> createPlayer() = 0;
    };

    static status_t registerFactory(IFactory* factory,
                                    player_type type);
    static void unregisterFactory(player_type type);
    static player_type getPlayerType(const sp<IMediaPlayer>& client,
                                     const char* url);
    static player_type getPlayerType(const sp<IMediaPlayer>& client,
                                     int fd,
                                     int64_t offset,
                                     int64_t length);
    static player_type getPlayerType(const sp<IMediaPlayer>& client,
                                     const sp<IStreamSource> &source);

    static sp<MediaPlayerBase> createPlayer(player_type playerType,
                                            void* cookie,
                                            notify_callback_f notifyFunc);

    static void registerBuiltinFactories();

  private:
    typedef KeyedVector<player_type, IFactory*> tFactoryMap;

    MediaPlayerFactory() { }

    static status_t registerFactory_l(IFactory* factory,
                                      player_type type);
    static player_type getDefaultPlayerType();

    static Mutex       sLock;
    static tFactoryMap sFactoryMap;
    static bool        sInitComplete;

    DISALLOW_EVIL_CONSTRUCTORS(MediaPlayerFactory);
};

}  // namespace android
#endif  // ANDROID_MEDIAPLAYERFACTORY_H