11faa92a1e93f311e86dca483ed7702091137de66Andreas Huber/*
21faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * Copyright (C) 2010 The Android Open Source Project
31faa92a1e93f311e86dca483ed7702091137de66Andreas Huber *
41faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
51faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * you may not use this file except in compliance with the License.
61faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * You may obtain a copy of the License at
71faa92a1e93f311e86dca483ed7702091137de66Andreas Huber *
81faa92a1e93f311e86dca483ed7702091137de66Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
91faa92a1e93f311e86dca483ed7702091137de66Andreas Huber *
101faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * Unless required by applicable law or agreed to in writing, software
111faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
121faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * See the License for the specific language governing permissions and
141faa92a1e93f311e86dca483ed7702091137de66Andreas Huber * limitations under the License.
151faa92a1e93f311e86dca483ed7702091137de66Andreas Huber */
161faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
171faa92a1e93f311e86dca483ed7702091137de66Andreas Huber#include <utils/Vector.h>
181faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
191faa92a1e93f311e86dca483ed7702091137de66Andreas Hubernamespace android {
201faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
211faa92a1e93f311e86dca483ed7702091137de66Andreas Huberstruct SampleTable;
221faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
231faa92a1e93f311e86dca483ed7702091137de66Andreas Huberstruct SampleIterator {
241faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    SampleIterator(SampleTable *table);
251faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
261faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    status_t seekTo(uint32_t sampleIndex);
271faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
281faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t getChunkIndex() const { return mCurrentChunkIndex; }
291faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t getDescIndex() const { return mChunkDesc; }
301faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    off_t getSampleOffset() const { return mCurrentSampleOffset; }
311faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    size_t getSampleSize() const { return mCurrentSampleSize; }
321faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t getSampleTime() const { return mCurrentSampleTime; }
331faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
341faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    status_t getSampleSizeDirect(
351faa92a1e93f311e86dca483ed7702091137de66Andreas Huber            uint32_t sampleIndex, size_t *size);
361faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
371faa92a1e93f311e86dca483ed7702091137de66Andreas Huberprivate:
381faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    SampleTable *mTable;
391faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
401faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    bool mInitialized;
411faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
421faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mSampleToChunkIndex;
431faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mFirstChunk;
441faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mFirstChunkSampleIndex;
451faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mStopChunk;
461faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mStopChunkSampleIndex;
471faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mSamplesPerChunk;
481faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mChunkDesc;
491faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
501faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mCurrentChunkIndex;
511faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    off_t mCurrentChunkOffset;
521faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    Vector<size_t> mCurrentChunkSampleSizes;
531faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
541faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mTimeToSampleIndex;
551faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mTTSSampleIndex;
561faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mTTSSampleTime;
571faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mTTSCount;
581faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mTTSDuration;
591faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
601faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mCurrentSampleIndex;
611faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    off_t mCurrentSampleOffset;
621faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    size_t mCurrentSampleSize;
631faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    uint32_t mCurrentSampleTime;
641faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
651faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    void reset();
661faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    status_t findChunkRange(uint32_t sampleIndex);
671faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    status_t getChunkOffset(uint32_t chunk, off_t *offset);
681faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    status_t findSampleTime(uint32_t sampleIndex, uint32_t *time);
691faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
701faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    SampleIterator(const SampleIterator &);
711faa92a1e93f311e86dca483ed7702091137de66Andreas Huber    SampleIterator &operator=(const SampleIterator &);
721faa92a1e93f311e86dca483ed7702091137de66Andreas Huber};
731faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
741faa92a1e93f311e86dca483ed7702091137de66Andreas Huber}  // namespace android
751faa92a1e93f311e86dca483ed7702091137de66Andreas Huber
76