MPEG2TSExtractor.h revision cda17c606b0fe3ccda4dc68a6d43882410ea2462
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
12cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct AnotherPacketSource;
13cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct ATSParser;
14cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct DataSource;
15cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSSource;
16cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct String8;
17cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
18cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSExtractor : public MediaExtractor {
19cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    MPEG2TSExtractor(const sp<DataSource> &source);
20cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
21cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual size_t countTracks();
22cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MediaSource> getTrack(size_t index);
23cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
24cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
25cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getMetaData();
26cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
27cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual uint32_t flags() const {
28cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber        return CAN_PAUSE;
29cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    }
30cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
31cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberprivate:
32cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    friend struct MPEG2TSSource;
33cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
34cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    Mutex mLock;
35cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
36cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<DataSource> mDataSource;
37cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<ATSParser> mParser;
38cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
39cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    Vector<sp<AnotherPacketSource> > mSourceImpls;
40cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
41cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    off_t mOffset;
42cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
43cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    void init();
44cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    status_t feedMore();
45cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
46cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor);
47cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber};
48cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
49cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberbool SniffMPEG2TS(
50cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence);
51cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
52cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber}  // namespace android
53cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
54cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#endif  // MPEG2_TS_EXTRACTOR_H_
55