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