1bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber/* 2bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * Copyright (C) 2011 The Android Open Source Project 3bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * 4bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * you may not use this file except in compliance with the License. 6bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * You may obtain a copy of the License at 7bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * 8bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * 10bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * Unless required by applicable law or agreed to in writing, software 11bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * See the License for the specific language governing permissions and 14bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber * limitations under the License. 15bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber */ 16bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 17bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#ifndef MPEG2_PS_EXTRACTOR_H_ 18bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 19bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#define MPEG2_PS_EXTRACTOR_H_ 20bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 21bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#include <media/stagefright/foundation/ABase.h> 22bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#include <media/stagefright/MediaExtractor.h> 23bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#include <utils/threads.h> 24bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#include <utils/KeyedVector.h> 25bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 26bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Hubernamespace android { 27bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 28bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct ABuffer; 29bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct AMessage; 30bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct Track; 31bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct String8; 32bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 33bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberstruct MPEG2PSExtractor : public MediaExtractor { 34bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber MPEG2PSExtractor(const sp<DataSource> &source); 35bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 36bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber virtual size_t countTracks(); 37bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber virtual sp<MediaSource> getTrack(size_t index); 38bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 39bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 40bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber virtual sp<MetaData> getMetaData(); 41bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 42bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber virtual uint32_t flags() const; 43bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 44bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberprotected: 45bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber virtual ~MPEG2PSExtractor(); 46bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 47bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberprivate: 48bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber struct Track; 49bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber struct WrappedTrack; 50bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 51bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber mutable Mutex mLock; 52bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber sp<DataSource> mDataSource; 53bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 54bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber off64_t mOffset; 55bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber status_t mFinalResult; 56bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber sp<ABuffer> mBuffer; 57bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber KeyedVector<unsigned, sp<Track> > mTracks; 58bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber bool mScanning; 59bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 60bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber bool mProgramStreamMapValid; 61bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber KeyedVector<unsigned, unsigned> mStreamTypeByESID; 62bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 63bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber status_t feedMore(); 64bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 65bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber status_t dequeueChunk(); 66bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber ssize_t dequeuePack(); 67bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber ssize_t dequeueSystemHeader(); 68bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber ssize_t dequeuePES(); 69bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 70bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2PSExtractor); 71bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber}; 72bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 73bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huberbool SniffMPEG2PS( 74bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 75bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber sp<AMessage> *); 76bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 77bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber} // namespace android 78bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 79bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber#endif // MPEG2_PS_EXTRACTOR_H_ 80bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 81