IMediaExtractor.h revision b2487f03f12dcafdb801fc0007c8df8412397f44
1b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen/*
2b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * Copyright (C) 2009 The Android Open Source Project
3b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen *
4b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License");
5b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * you may not use this file except in compliance with the License.
6b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * You may obtain a copy of the License at
7b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen *
8b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen *      http://www.apache.org/licenses/LICENSE-2.0
9b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen *
10b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * Unless required by applicable law or agreed to in writing, software
11b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS,
12b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * See the License for the specific language governing permissions and
14b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen * limitations under the License.
15b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen */
16b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
17b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#ifndef IMEDIA_EXTRACTOR_BASE_H_
18b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
19b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#define IMEDIA_EXTRACTOR_BASE_H_
20b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
21b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <media/IMediaSource.h>
22b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
23b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissennamespace android {
24b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
25b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenclass MetaData;
26b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
27b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenclass IMediaExtractor : public IInterface {
28b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenpublic:
29b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    DECLARE_META_INTERFACE(MediaExtractor);
30b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
31b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual size_t countTracks() = 0;
32b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual sp<IMediaSource> getTrack(size_t index) = 0;
33b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
34b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    enum GetTrackMetaDataFlags {
35b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen        kIncludeExtensiveMetaData = 1
36b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    };
37b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual sp<MetaData> getTrackMetaData(
38b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen            size_t index, uint32_t flags = 0) = 0;
39b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
40b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    // Return container specific meta-data. The default implementation
41b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    // returns an empty metadata object.
42b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual sp<MetaData> getMetaData() = 0;
43b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
44b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    enum Flags {
45b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen        CAN_SEEK_BACKWARD  = 1,  // the "seek 10secs back button"
46b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen        CAN_SEEK_FORWARD   = 2,  // the "seek 10secs forward button"
47b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen        CAN_PAUSE          = 4,
48b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen        CAN_SEEK           = 8,  // the "seek bar"
49b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    };
50b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
51b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    // If subclasses do _not_ override this, the default is
52b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    // CAN_SEEK_BACKWARD | CAN_SEEK_FORWARD | CAN_SEEK | CAN_PAUSE
53b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual uint32_t flags() const = 0;
54b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
55b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    // for DRM
56b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual void setDrmFlag(bool flag) = 0;
57b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual bool getDrmFlag() = 0;
58b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual char* getDrmTrackInfo(size_t trackID, int *len)  = 0;
59b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual void setUID(uid_t uid)  = 0;
60b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
61b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual const char * name() = 0;
62b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen};
63b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
64b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
65b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenclass BnMediaExtractor: public BnInterface<IMediaExtractor>
66b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen{
67b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissenpublic:
68b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen    virtual status_t    onTransact(uint32_t code, const Parcel& data, Parcel* reply,
69b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen                                uint32_t flags = 0);
70b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen};
71b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
72b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
73b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen}  // namespace android
74b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen
75b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#endif  // IMEDIA_EXTRACTOR_BASE_H_
76