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> 22d91dc5a0602f54fc0d4d2187f37b5b8169bb62c3Dongwon Kang#include <media/MediaExtractor.h> 233d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen#include <media/stagefright/MetaDataBase.h> 242944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#include <utils/threads.h> 252944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#include <utils/KeyedVector.h> 262944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 272944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Hubernamespace android { 282944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 292944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct ABuffer; 302944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct AMessage; 312944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct Track; 32ee4e1b1a63758941460ae79a064249d3a5189443Lajos Molnarclass String8; 332944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 342944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberstruct MPEG2PSExtractor : public MediaExtractor { 352a243f08193fe9ff1afe018e9953f01c44ced9deMarco Nelissen explicit MPEG2PSExtractor(DataSourceBase *source); 362944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 372944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual size_t countTracks(); 383d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen virtual MediaTrack *getTrack(size_t index); 393d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen virtual status_t getTrackMetaData(MetaDataBase& meta, size_t index, uint32_t flags); 402944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 413d21ae3fad5a894cf15f2e7e7a1d54d0f3d19db0Marco Nelissen virtual status_t getMetaData(MetaDataBase& meta); 422944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 432944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual uint32_t flags() const; 44a48a51c056198a778755cbed52884dc30b74ac0aMarco Nelissen virtual const char * name() { return "MPEG2PSExtractor"; } 452944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 462944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberprotected: 472944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber virtual ~MPEG2PSExtractor(); 482944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 492944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huberprivate: 502944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber struct Track; 512944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber struct WrappedTrack; 522944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 532944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber mutable Mutex mLock; 542a243f08193fe9ff1afe018e9953f01c44ced9deMarco Nelissen DataSourceBase *mDataSource; 552944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 562944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber off64_t mOffset; 572944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t mFinalResult; 582944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber sp<ABuffer> mBuffer; 592944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber KeyedVector<unsigned, sp<Track> > mTracks; 602944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber bool mScanning; 612944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 622944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber bool mProgramStreamMapValid; 632944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber KeyedVector<unsigned, unsigned> mStreamTypeByESID; 642944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 652944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t feedMore(); 662944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 672944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber status_t dequeueChunk(); 682944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeuePack(); 692944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeueSystemHeader(); 702944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber ssize_t dequeuePES(); 712944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 722944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(MPEG2PSExtractor); 732944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber}; 742944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 7517e172b4c3c87ecaa7c87eecc42b4dc47e3e9734Dongwon Kangbool SniffMPEG2PS(DataSourceBase *source, float *confidence); 762944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 772944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber} // namespace android 782944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 792944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber#endif // MPEG2_PS_EXTRACTOR_H_ 802944eca607304a095ea43ba2b8f0b9de61249f9fAndreas Huber 81