FragmentedMP4Parser.h revision c7708555ea7511aea684e00a55fb5309281540ce
1840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber/* 2840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * Copyright (C) 2012 The Android Open Source Project 3840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * 4840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * you may not use this file except in compliance with the License. 6840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * You may obtain a copy of the License at 7840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * 8840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * 10840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * Unless required by applicable law or agreed to in writing, software 11840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * See the License for the specific language governing permissions and 14840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber * limitations under the License. 15840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber */ 16840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 17840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber#ifndef PARSER_H_ 18840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 19840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber#define PARSER_H_ 20840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 21840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber#include <media/stagefright/foundation/AHandler.h> 22840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber#include <utils/Vector.h> 23840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 24840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Hubernamespace android { 25840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 26840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huberstruct ABuffer; 27840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 28840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huberstruct Parser : public AHandler { 29840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct Source : public RefBase { 30840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber Source() {} 31840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 32840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber virtual ssize_t readAt(off64_t offset, void *data, size_t size) = 0; 33840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 34840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber protected: 35840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber virtual ~Source() {} 36840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 37840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber private: 38840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(Source); 39840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 40840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 41840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber Parser(); 42840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 43840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber void start(const char *filename); 44840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber void start(const sp<Source> &source); 45840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 46840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<AMessage> getFormat(bool audio); 47840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t dequeueAccessUnit(bool audio, sp<ABuffer> *accessUnit); 48840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 49840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 50840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 51840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huberprotected: 52840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber virtual ~Parser(); 53840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 54840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huberprivate: 55840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber enum { 56840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kWhatStart, 57840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kWhatProceed, 58840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kWhatReadMore, 59840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kWhatGetFormat, 60840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kWhatDequeueAccessUnit, 61840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 62840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 63840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct TrackFragment; 64840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct DynamicTrackFragment; 65840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct StaticTrackFragment; 66840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 67840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct DispatchEntry { 68840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mType; 69840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mParentType; 70840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t (Parser::*mHandler)(uint32_t, size_t, uint64_t); 71840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 72840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 73840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct Container { 74840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint64_t mBytesRemaining; 75840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mType; 76840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber bool mExtendsToEOF; 77840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 78840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 79840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct SampleDescription { 80840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mType; 81840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint16_t mDataRefIndex; 82840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 83840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<AMessage> mFormat; 84840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 85840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 86840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct SampleInfo { 87840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber off64_t mOffset; 88840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber size_t mSize; 89840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mPresentationTime; 90840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber size_t mSampleDescIndex; 91840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mFlags; 92840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 93840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 94840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct MediaDataInfo { 95840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<ABuffer> mBuffer; 96840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber off64_t mOffset; 97840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 98840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 99840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct TrackInfo { 100840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber enum Flags { 101840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kTrackEnabled = 0x01, 102840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kTrackInMovie = 0x02, 103840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kTrackInPreview = 0x04, 104840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 105840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 106840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mTrackID; 107840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mFlags; 108840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDuration; // This is the duration in terms of movie timescale! 109840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 110840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mMediaTimeScale; 111840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 112840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mMediaHandlerType; 113840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber Vector<SampleDescription> mSampleDescs; 114840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 115840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber // from track extends: 116840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDefaultSampleDescriptionIndex; 117840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDefaultSampleDuration; 118840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDefaultSampleSize; 119840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDefaultSampleFlags; 120840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 121840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDecodingTime; 122840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 123840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<StaticTrackFragment> mStaticFragment; 124840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber List<sp<TrackFragment> > mFragments; 125840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 126840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 127840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber struct TrackFragmentHeaderInfo { 128840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber enum Flags { 129840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kBaseDataOffsetPresent = 0x01, 130840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kSampleDescriptionIndexPresent = 0x02, 131840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kDefaultSampleDurationPresent = 0x08, 132840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kDefaultSampleSizePresent = 0x10, 133840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kDefaultSampleFlagsPresent = 0x20, 134840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber kDurationIsEmpty = 0x10000, 135840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 136840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 137840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mTrackID; 138840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mFlags; 139840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint64_t mBaseDataOffset; 140840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mSampleDescriptionIndex; 141840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDefaultSampleDuration; 142840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDefaultSampleSize; 143840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mDefaultSampleFlags; 144840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 145840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint64_t mDataOffset; 146840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber }; 147840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 148840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber static const DispatchEntry kDispatchTable[]; 149840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 150840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<Source> mSource; 151840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber off_t mBufferPos; 152840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber bool mSuspended; 153840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<ABuffer> mBuffer; 154840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber Vector<Container> mStack; 155840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber KeyedVector<uint32_t, TrackInfo> mTracks; // TrackInfo by trackID 156840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber Vector<MediaDataInfo> mMediaData; 157840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 158840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t mCurrentTrackID; 159840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 160c7708555ea7511aea684e00a55fb5309281540ceAndreas Huber status_t mFinalResult; 161c7708555ea7511aea684e00a55fb5309281540ceAndreas Huber 162840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber TrackFragmentHeaderInfo mTrackFragmentHeaderInfo; 163840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 164840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t onProceed(); 165840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t onDequeueAccessUnit(size_t trackIndex, sp<ABuffer> *accessUnit); 166840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 167840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber void enter(uint32_t type, uint64_t size); 168840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 169840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint16_t readU16(size_t offset); 170840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t readU32(size_t offset); 171840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint64_t readU64(size_t offset); 172840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber void skip(off_t distance); 173840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t need(size_t size); 174840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber bool fitsContainer(uint64_t size) const; 175840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 176840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseTrackHeader( 177840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 178840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 179840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseMediaHeader( 180840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 181840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 182840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseMediaHandler( 183840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 184840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 185840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseTrackExtends( 186840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 187840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 188840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseTrackFragmentHeader( 189840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 190840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 191840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseTrackFragmentRun( 192840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 193840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 194840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseVisualSampleEntry( 195840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 196840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 197840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseAudioSampleEntry( 198840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 199840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 200840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseSampleSizes( 201840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 202840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 203840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseCompactSampleSizes( 204840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 205840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 206840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseSampleToChunk( 207840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 208840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 209840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseChunkOffsets( 210840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 211840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 212840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseChunkOffsets64( 213840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 214840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 215840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseAVCCodecSpecificData( 216840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 217840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 218840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseESDSCodecSpecificData( 219840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 220840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 221840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t parseMediaData( 222840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber uint32_t type, size_t offset, uint64_t size); 223840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 224840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber TrackInfo *editTrack(uint32_t trackID, bool createIfNecessary = false); 225840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 226840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber ssize_t findTrack(bool wantAudio) const; 227840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 228840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t makeAccessUnit( 229840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber TrackInfo *info, 230840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber const SampleInfo &sample, 231840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber const MediaDataInfo &mdatInfo, 232840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<ABuffer> *accessUnit); 233840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 234840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber status_t getSample( 235840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber TrackInfo *info, 236840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<TrackFragment> *fragment, 237840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber SampleInfo *sampleInfo); 238840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 239840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber static int CompareSampleLocation( 240840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber const SampleInfo &sample, const MediaDataInfo &mdatInfo); 241840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 242840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber void resumeIfNecessary(); 243840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 244840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber void copyBuffer( 245840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber sp<ABuffer> *dst, 246840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber size_t offset, uint64_t size, size_t extra = 0) const; 247840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 248840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(Parser); 249840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber}; 250840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 251840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber} // namespace android 252840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 253840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber#endif // PARSER_H_ 254840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber 255