MatroskaExtractor.h revision 5a1c3529e4fa2f8a11054181294e0ce79fff8dd3
1093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber/*
2093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * Copyright (C) 2010 The Android Open Source Project
3093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber *
4093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * you may not use this file except in compliance with the License.
6093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * You may obtain a copy of the License at
7093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber *
8093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber *
10093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * Unless required by applicable law or agreed to in writing, software
11093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * See the License for the specific language governing permissions and
14093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber * limitations under the License.
15093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber */
16093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
17093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#ifndef MATROSKA_EXTRACTOR_H_
18093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
19093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#define MATROSKA_EXTRACTOR_H_
20093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
21093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#include <media/stagefright/MediaExtractor.h>
22093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#include <utils/Vector.h>
23093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
24093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Hubernamespace mkvparser {
25093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct Segment;
26093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber};
27093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
28093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Hubernamespace android {
29093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
305a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage;
31093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberclass String8;
32093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
33093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct DataSourceReader;
34093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct MatroskaSource;
35093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
36093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberstruct MatroskaExtractor : public MediaExtractor {
37093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    MatroskaExtractor(const sp<DataSource> &source);
38093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
39093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    virtual size_t countTracks();
40093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
41093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    virtual sp<MediaSource> getTrack(size_t index);
42093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
43093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    virtual sp<MetaData> getTrackMetaData(
44093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber            size_t index, uint32_t flags);
45093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
46093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    virtual sp<MetaData> getMetaData();
47093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
48093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberprotected:
49093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    virtual ~MatroskaExtractor();
50093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
51093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberprivate:
52093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    friend struct MatroskaSource;
53093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
54093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    struct TrackInfo {
55093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber        unsigned long mTrackNum;
56093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber        sp<MetaData> mMeta;
57093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    };
58093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    Vector<TrackInfo> mTracks;
59093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
60093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    sp<DataSource> mDataSource;
61093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    DataSourceReader *mReader;
62093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    mkvparser::Segment *mSegment;
635279d1d8c19e5fdbb177805db0da8e8aadac3079Andreas Huber    bool mExtractedThumbnails;
64093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
65093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    void addTracks();
665279d1d8c19e5fdbb177805db0da8e8aadac3079Andreas Huber    void findThumbnails();
67093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
68093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    MatroskaExtractor(const MatroskaExtractor &);
69093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber    MatroskaExtractor &operator=(const MatroskaExtractor &);
70093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber};
71093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
72093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huberbool SniffMatroska(
735a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
745a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        sp<AMessage> *);
75093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
76093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber}  // namespace android
77093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber
78093437c388e5dff6903a3d43f2ca9f8a1ba4744aAndreas Huber#endif  // MATROSKA_EXTRACTOR_H_
79