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; 31ee4e1b1a63758941460ae79a064249d3a5189443Lajos Molnarclass String8; 322944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 332944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct MPEG2PSExtractor : public MediaExtractor { 3440d8899f60c5212af9d727ba0ffaaecf676ebd1dChih-Hung Hsieh explicit MPEG2PSExtractor(const sp<DataSource> &source); 352944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 362944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual size_t countTracks(); 37b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen virtual sp<IMediaSource> 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; 43a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen virtual const char * name() { return "MPEG2PSExtractor"; } 442944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 452944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberprotected: 462944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual ~MPEG2PSExtractor(); 472944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 482944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberprivate: 492944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber struct Track; 502944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber struct WrappedTrack; 512944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 522944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber mutable Mutex mLock; 532944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber sp<DataSource> mDataSource; 542944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 552944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber off64_t mOffset; 562944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t mFinalResult; 572944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber sp<ABuffer> mBuffer; 582944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber KeyedVector<unsigned, sp<Track> > mTracks; 592944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber bool mScanning; 602944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 612944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber bool mProgramStreamMapValid; 622944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber KeyedVector<unsigned, unsigned> mStreamTypeByESID; 632944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 642944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t feedMore(); 652944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 662944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t dequeueChunk(); 672944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeuePack(); 682944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeueSystemHeader(); 692944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeuePES(); 702944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 712944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2PSExtractor); 722944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber}; 732944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 742944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberbool SniffMPEG2PS( 752944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber const sp<DataSource> &source, String8 *mimeType, float *confidence, 762944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber sp<AMessage> *); 772944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 782944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber} // namespace android 792944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 802944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#endif // MPEG2_PS_EXTRACTOR_H_ 812944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 82