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; 34a44153c1a57202fb538659eb50706e60454d6273Andreas Huberstruct LiveSession; 35cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 36cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberstruct MPEG2TSExtractor : public MediaExtractor { 37cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber MPEG2TSExtractor(const sp<DataSource> &source); 38cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 39cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber virtual size_t countTracks(); 40cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber virtual sp<MediaSource> getTrack(size_t index); 41cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 42cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 43cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber virtual sp<MetaData> getMetaData(); 44cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 45bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber virtual uint32_t flags() const; 46bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber 47a44153c1a57202fb538659eb50706e60454d6273Andreas Huber void setLiveSession(const sp<LiveSession> &liveSession); 48bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber void seekTo(int64_t seekTimeUs); 49cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 50cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberprivate: 51cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber friend struct MPEG2TSSource; 52cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 53bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber mutable Mutex mLock; 54cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 55cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber sp<DataSource> mDataSource; 56a44153c1a57202fb538659eb50706e60454d6273Andreas Huber sp<LiveSession> mLiveSession; 57bff07d0b22a5ee2d9f044f6cb5e4be1532017ab0Andreas Huber 58cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber sp<ATSParser> mParser; 59cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 60cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber Vector<sp<AnotherPacketSource> > mSourceImpls; 61cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 62c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong off64_t mOffset; 63cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 64cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber void init(); 65cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber status_t feedMore(); 66cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 67cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor); 68cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber}; 69cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 70cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huberbool SniffMPEG2TS( 715a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 725a1c3529e4fa2f8a11054181294e0ce79fff8dd3Andreas Huber sp<AMessage> *); 73cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 74cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber} // namespace android 75cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber 76cda17c606b0fe3ccda4dc68a6d43882410ea2462Andreas Huber#endif // MPEG2_TS_EXTRACTOR_H_ 77