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