12944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber/* 22944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * Copyright (C) 2011 The Android Open Source Project 32944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * 42944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 52944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * you may not use this file except in compliance with the License. 62944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * You may obtain a copy of the License at 72944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * 82944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 92944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * 102944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * Unless required by applicable law or agreed to in writing, software 112944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 122944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * See the License for the specific language governing permissions and 142944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber * limitations under the License. 152944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber */ 162944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 172944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#ifndef MPEG2_PS_EXTRACTOR_H_ 182944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 192944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#define MPEG2_PS_EXTRACTOR_H_ 202944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 212944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#include <media/stagefright/foundation/ABase.h> 222944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#include <media/stagefright/MediaExtractor.h> 232944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#include <utils/threads.h> 242944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#include <utils/KeyedVector.h> 252944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 262944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Hubernamespace android { 272944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 282944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct ABuffer; 292944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct AMessage; 302944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct Track; 312944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct String8; 322944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 332944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct MPEG2PSExtractor : public MediaExtractor { 342944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber MPEG2PSExtractor(const sp<DataSource> &source); 352944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 362944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual size_t countTracks(); 372944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual sp<MediaSource> getTrack(size_t index); 382944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual sp<MetaData> getTrackMetaData(size_t index, uint32_t flags); 392944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 402944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual sp<MetaData> getMetaData(); 412944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 422944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual uint32_t flags() const; 432944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 442944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberprotected: 452944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual ~MPEG2PSExtractor(); 462944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 472944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberprivate: 482944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber struct Track; 492944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber struct WrappedTrack; 502944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 512944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber mutable Mutex mLock; 522944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber sp<DataSource> mDataSource; 532944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 542944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber off64_t mOffset; 552944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t mFinalResult; 562944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber sp<ABuffer> mBuffer; 572944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber KeyedVector<unsigned, sp<Track> > mTracks; 582944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber bool mScanning; 592944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 602944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber bool mProgramStreamMapValid; 612944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber KeyedVector<unsigned, unsigned> mStreamTypeByESID; 622944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 632944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t feedMore(); 642944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 652944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t dequeueChunk(); 662944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeuePack(); 672944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeueSystemHeader(); 682944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeuePES(); 692944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 702944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2PSExtractor); 712944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber}; 722944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 732944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberbool SniffMPEG2PS( 742944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 752944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber sp<AMessage> *); 762944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 772944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber} // namespace android 782944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 792944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#endif // MPEG2_PS_EXTRACTOR_H_ 802944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 81