MPEG4Extractor.h revision 693d271e62a3726689ff68f4505ba49228eb94b2
1872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes/*
2872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * Copyright (C) 2009 The Android Open Source Project
3872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes *
4872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License");
5872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * you may not use this file except in compliance with the License.
6872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * You may obtain a copy of the License at
7872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes *
8872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes *      http://www.apache.org/licenses/LICENSE-2.0
9872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes *
10872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * Unless required by applicable law or agreed to in writing, software
11872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * See the License for the specific language governing permissions and
14872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * limitations under the License.
15872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes */
16872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
17872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#ifndef MPEG4_EXTRACTOR_H_
18872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
19872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define MPEG4_EXTRACTOR_H_
20872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
21872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#include <media/stagefright/MediaExtractor.h>
22872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
23872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesnamespace android {
24872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
25872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesclass DataSource;
26872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesclass SampleTable;
27872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesclass String8;
28872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
29872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesclass MPEG4Extractor : public MediaExtractor {
30872d4ec7225444d9400d30f9027247deb91012fdElliott Hughespublic:
31872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    // Extractor assumes ownership of "source".
32872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    MPEG4Extractor(const sp<DataSource> &source);
33872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
34872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    size_t countTracks();
35748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes    sp<MediaSource> getTrack(size_t index);
36748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes    sp<MetaData> getTrackMetaData(size_t index);
37748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes
38872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesprotected:
39872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    virtual ~MPEG4Extractor();
40872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
41872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesprivate:
42872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    struct Track {
43872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        Track *next;
44872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        sp<MetaData> meta;
45872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        uint32_t timescale;
46872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        sp<SampleTable> sampleTable;
47872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    };
48872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
49872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    sp<DataSource> mDataSource;
50872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    bool mHaveMetadata;
51872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
52376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes    Track *mFirstTrack, *mLastTrack;
53872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
54a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes    uint32_t mHandlerType;
55872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
56872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    status_t readMetaData();
57872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    status_t parseChunk(off_t *offset, int depth);
58872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
59872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    MPEG4Extractor(const MPEG4Extractor &);
60872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    MPEG4Extractor &operator=(const MPEG4Extractor &);
61872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes};
62872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
63872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesbool SniffMPEG4(
6468a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        const sp<DataSource> &source, String8 *mimeType, float *confidence);
65872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
66872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes}  // namespace android
67f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott Hughes
68872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#endif  // MPEG4_EXTRACTOR_H_
69872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes