127c174483a8ae9688d5d4897c19074f62c7f1701James Dong/*
227c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Copyright (C) 2010 The Android Open Source Project
327c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
427c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Licensed under the Apache License, Version 2.0 (the "License");
527c174483a8ae9688d5d4897c19074f62c7f1701James Dong * you may not use this file except in compliance with the License.
627c174483a8ae9688d5d4897c19074f62c7f1701James Dong * You may obtain a copy of the License at
727c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
827c174483a8ae9688d5d4897c19074f62c7f1701James Dong *      http://www.apache.org/licenses/LICENSE-2.0
927c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
1027c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Unless required by applicable law or agreed to in writing, software
1127c174483a8ae9688d5d4897c19074f62c7f1701James Dong * distributed under the License is distributed on an "AS IS" BASIS,
1227c174483a8ae9688d5d4897c19074f62c7f1701James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327c174483a8ae9688d5d4897c19074f62c7f1701James Dong * See the License for the specific language governing permissions and
1427c174483a8ae9688d5d4897c19074f62c7f1701James Dong * limitations under the License.
1527c174483a8ae9688d5d4897c19074f62c7f1701James Dong */
1627c174483a8ae9688d5d4897c19074f62c7f1701James Dong
17cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#ifndef MPEG2_TS_EXTRACTOR_H_
18cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
19cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#define MPEG2_TS_EXTRACTOR_H_
20cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
21cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <media/stagefright/foundation/ABase.h>
22cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <media/stagefright/MediaExtractor.h>
23cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <utils/threads.h>
24cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <utils/Vector.h>
25cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
26cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Hubernamespace android {
27cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
285a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage;
29cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct AnotherPacketSource;
30cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct ATSParser;
31cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct DataSource;
32cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSSource;
33cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct String8;
34cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
35cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSExtractor : public MediaExtractor {
36cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    MPEG2TSExtractor(const sp<DataSource> &source);
37cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
38cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual size_t countTracks();
39cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MediaSource> getTrack(size_t index);
40cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
41cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
42cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getMetaData();
43cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
44bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber    virtual uint32_t flags() const;
45bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber
46cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberprivate:
47cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    friend struct MPEG2TSSource;
48cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
49bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber    mutable Mutex mLock;
50cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
51cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<DataSource> mDataSource;
52bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber
53cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<ATSParser> mParser;
54cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
55cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    Vector<sp<AnotherPacketSource> > mSourceImpls;
56cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
57c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong    off64_t mOffset;
58cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
59cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    void init();
60cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    status_t feedMore();
61cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
62cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor);
63cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber};
64cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
65cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberbool SniffMPEG2TS(
665a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
675a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        sp<AMessage> *);
68cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
69cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber}  // namespace android
70cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
71cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#endif  // MPEG2_TS_EXTRACTOR_H_
72