MPEG2TSExtractor.h revision 5a1c3529e4fa2f8a11054181294e0ce79fff8dd3
1cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#ifndef MPEG2_TS_EXTRACTOR_H_
2cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
3cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#define MPEG2_TS_EXTRACTOR_H_
4cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
5cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <media/stagefright/foundation/ABase.h>
6cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <media/stagefright/MediaExtractor.h>
7cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <utils/threads.h>
8cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#include <utils/Vector.h>
9cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
10cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Hubernamespace android {
11cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
125a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huberstruct AMessage;
13cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct AnotherPacketSource;
14cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct ATSParser;
15cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct DataSource;
16cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSSource;
17cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct String8;
18cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
19cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSExtractor : public MediaExtractor {
20cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    MPEG2TSExtractor(const sp<DataSource> &source);
21cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
22cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual size_t countTracks();
23cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MediaSource> getTrack(size_t index);
24cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
25cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
26cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getMetaData();
27cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
28cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual uint32_t flags() const {
29cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber        return CAN_PAUSE;
30cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    }
31cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
32cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberprivate:
33cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    friend struct MPEG2TSSource;
34cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
35cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    Mutex mLock;
36cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
37cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<DataSource> mDataSource;
38cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<ATSParser> mParser;
39cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
40cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    Vector<sp<AnotherPacketSource> > mSourceImpls;
41cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
42cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    off_t mOffset;
43cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
44cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    void init();
45cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    status_t feedMore();
46cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
47cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor);
48cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber};
49cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
50cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberbool SniffMPEG2TS(
515a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
525a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        sp<AMessage> *);
53cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
54cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber}  // namespace android
55cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
56cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#endif  // MPEG2_TS_EXTRACTOR_H_
57