1c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber/* 2c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * Copyright (C) 2010 The Android Open Source Project 3c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * 4c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * you may not use this file except in compliance with the License. 6c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * You may obtain a copy of the License at 7c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * 8c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * 10c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * Unless required by applicable law or agreed to in writing, software 11c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * See the License for the specific language governing permissions and 14c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber * limitations under the License. 15c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber */ 16c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 175d16a6ee52b691ee14f00a620cb4fa051b5e0890Masaichi Toki#ifndef SAMPLE_ITERATOR_H_ 185d16a6ee52b691ee14f00a620cb4fa051b5e0890Masaichi Toki 195d16a6ee52b691ee14f00a620cb4fa051b5e0890Masaichi Toki#define SAMPLE_ITERATOR_H_ 205d16a6ee52b691ee14f00a620cb4fa051b5e0890Masaichi Toki 21c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber#include <utils/Vector.h> 22c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 23c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Hubernamespace android { 24c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 25ee4e1b1a63758941460ae79a064249d3a5189443Lajos Molnarclass SampleTable; 26c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 27c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huberstruct SampleIterator { 28c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber SampleIterator(SampleTable *table); 29c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 30c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber status_t seekTo(uint32_t sampleIndex); 31c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 32c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t getChunkIndex() const { return mCurrentChunkIndex; } 33c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t getDescIndex() const { return mChunkDesc; } 34c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong off64_t getSampleOffset() const { return mCurrentSampleOffset; } 35c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber size_t getSampleSize() const { return mCurrentSampleSize; } 36c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t getSampleTime() const { return mCurrentSampleTime; } 37170056540e9ce65261b45efd15f67e72e2df1bedRobert Shih uint32_t getSampleDuration() const { return mCurrentSampleDuration; } 38c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 39c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber status_t getSampleSizeDirect( 40c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t sampleIndex, size_t *size); 41c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 42c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huberprivate: 43c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber SampleTable *mTable; 44c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 45c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber bool mInitialized; 46c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 47c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mSampleToChunkIndex; 48c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mFirstChunk; 49c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mFirstChunkSampleIndex; 50c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mStopChunk; 51c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mStopChunkSampleIndex; 52c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mSamplesPerChunk; 53c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mChunkDesc; 54c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 55c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mCurrentChunkIndex; 56c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong off64_t mCurrentChunkOffset; 57c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber Vector<size_t> mCurrentChunkSampleSizes; 58c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 59c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mTimeToSampleIndex; 60c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mTTSSampleIndex; 61c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mTTSSampleTime; 62c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mTTSCount; 63c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mTTSDuration; 64c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 65c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mCurrentSampleIndex; 66c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong off64_t mCurrentSampleOffset; 67c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber size_t mCurrentSampleSize; 68c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber uint32_t mCurrentSampleTime; 69170056540e9ce65261b45efd15f67e72e2df1bedRobert Shih uint32_t mCurrentSampleDuration; 70c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 71c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber void reset(); 72c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber status_t findChunkRange(uint32_t sampleIndex); 73c7fc37a3dab9bd1f96713649f351b5990e6316ffJames Dong status_t getChunkOffset(uint32_t chunk, off64_t *offset); 74170056540e9ce65261b45efd15f67e72e2df1bedRobert Shih status_t findSampleTimeAndDuration(uint32_t sampleIndex, uint32_t *time, uint32_t *duration); 75c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 76c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber SampleIterator(const SampleIterator &); 77c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber SampleIterator &operator=(const SampleIterator &); 78c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber}; 79c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 80c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber} // namespace android 81c57b67905c2128ddadfeca96785ee1f593b6605aAndreas Huber 825d16a6ee52b691ee14f00a620cb4fa051b5e0890Masaichi Toki#endif // SAMPLE_ITERATOR_H_ 83