MPEG2TSExtractor.h revision a44153c1a57202fb538659eb50706e60454d6273
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;
18a44153c1a57202fb538659eb50706e60454d6273Andreas Huberstruct LiveSession;
19cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
20cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSExtractor : public MediaExtractor {
21cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    MPEG2TSExtractor(const sp<DataSource> &source);
22cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
23cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual size_t countTracks();
24cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MediaSource> getTrack(size_t index);
25cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags);
26cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
27cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    virtual sp<MetaData> getMetaData();
28cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
29bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber    virtual uint32_t flags() const;
30bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber
31a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    void setLiveSession(const sp<LiveSession> &liveSession);
32bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber    void seekTo(int64_t seekTimeUs);
33cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
34cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberprivate:
35cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    friend struct MPEG2TSSource;
36cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
37bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber    mutable Mutex mLock;
38cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
39cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<DataSource> mDataSource;
40a44153c1a57202fb538659eb50706e60454d6273Andreas Huber    sp<LiveSession> mLiveSession;
41bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber
42cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    sp<ATSParser> mParser;
43cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
44cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    Vector<sp<AnotherPacketSource> > mSourceImpls;
45cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
46c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong    off64_t mOffset;
47cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
48cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    void init();
49cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    status_t feedMore();
50cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
51cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor);
52cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber};
53cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
54cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberbool SniffMPEG2TS(
555a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        const sp<DataSource> &source, String8 *mimeType, float *confidence,
565a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber        sp<AMessage> *);
57cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
58cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber}  // namespace android
59cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber
60cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#endif  // MPEG2_TS_EXTRACTOR_H_
61