12f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong/* 22f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * Copyright (C) 2010 The Android Open Source Project 32f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * 42f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * Licensed under the Apache License, Version 2.0 (the "License"); 52f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * you may not use this file except in compliance with the License. 62f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * You may obtain a copy of the License at 72f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * 82f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * http://www.apache.org/licenses/LICENSE-2.0 92f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * 102f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * Unless required by applicable law or agreed to in writing, software 112f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * distributed under the License is distributed on an "AS IS" BASIS, 122f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * See the License for the specific language governing permissions and 142f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong * limitations under the License. 152f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong */ 162f1f2248c8439adbd686810e306c55f9e6a5abc3James Dong 17a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#ifndef MPEG2_TS_EXTRACTOR_H_ 18a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 19a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#define MPEG2_TS_EXTRACTOR_H_ 20a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 21a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#include <media/stagefright/foundation/ABase.h> 22a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#include <media/stagefright/MediaExtractor.h> 23a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#include <utils/threads.h> 24a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#include <utils/Vector.h> 25a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 26a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Hubernamespace android { 27a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 28efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huberstruct AMessage; 29a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct AnotherPacketSource; 30a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct ATSParser; 31a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct DataSource; 32a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct MPEG2TSSource; 33a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct String8; 34b5590846c035a28399818451201aaf1256913ec3Andreas Huberstruct LiveSession; 35a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 36a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberstruct MPEG2TSExtractor : public MediaExtractor { 37a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber MPEG2TSExtractor(const sp<DataSource> &source); 38a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 39a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber virtual size_t countTracks(); 40a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber virtual sp<MediaSource> getTrack(size_t index); 41a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 42a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 43a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber virtual sp<MetaData> getMetaData(); 44a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 4554d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber virtual uint32_t flags() const; 4654d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber 47b5590846c035a28399818451201aaf1256913ec3Andreas Huber void setLiveSession(const sp<LiveSession> &liveSession); 4854d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber void seekTo(int64_t seekTimeUs); 49a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 50a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberprivate: 51a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber friend struct MPEG2TSSource; 52a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 5354d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber mutable Mutex mLock; 54a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 55a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber sp<DataSource> mDataSource; 56b5590846c035a28399818451201aaf1256913ec3Andreas Huber sp<LiveSession> mLiveSession; 5754d09724e3ea2af4e08dff47d7ade92a95784127Andreas Huber 58a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber sp<ATSParser> mParser; 59a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 60a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber Vector<sp<AnotherPacketSource> > mSourceImpls; 61a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 62b1262a8b1dd23abad64465f9ffd25c44facdf4d2James Dong off64_t mOffset; 63a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 64a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber void init(); 65a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber status_t feedMore(); 66a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 67a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor); 68a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber}; 69a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 70a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huberbool SniffMPEG2TS( 71efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 72efdd088a71ddd0a96cf9ca2f58e8703fe8c5c494Andreas Huber sp<AMessage> *); 73a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 74a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber} // namespace android 75a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 76a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber#endif // MPEG2_TS_EXTRACTOR_H_ 77