SampleTable.h revision 7e04dcf8d6784dd56f53aa90bf34431ab4f0710c
1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2009 The Android Open Source Project
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) *
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) *
101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See the License for the specific language governing permissions and
141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) * limitations under the License.
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef SAMPLE_TABLE_H_
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SAMPLE_TABLE_H_
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <sys/types.h>
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <stdint.h>
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include <media/stagefright/MediaErrors.h>
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utils/RefBase.h>
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <utils/threads.h>
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace android {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DataSource;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class SampleTable : public RefBase {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SampleTable(const sp<DataSource> &source);
359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // type can be 'stco' or 'co64'.
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t setChunkOffsetParams(
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            uint32_t type, off_t data_offset, size_t data_size);
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t setSampleToChunkParams(off_t data_offset, size_t data_size);
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    // type can be 'stsz' or 'stz2'.
431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t setSampleSizeParams(
441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            uint32_t type, off_t data_offset, size_t data_size);
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t setTimeToSampleParams(off_t data_offset, size_t data_size);
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t setSyncSampleParams(off_t data_offset, size_t data_size);
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    ////////////////////////////////////////////////////////////////////////////
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    uint32_t countChunkOffsets() const;
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t getChunkOffset(uint32_t chunk_index, off_t *offset);
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t getChunkForSample(
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            uint32_t sample_index, uint32_t *chunk_index,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            uint32_t *chunk_relative_sample_index, uint32_t *desc_index);
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    uint32_t countSamples() const;
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    status_t getSampleSize(uint32_t sample_index, size_t *sample_size);
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    status_t getSampleOffsetAndSize(
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            uint32_t sample_index, off_t *offset, size_t *size);
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    status_t getMaxSampleSize(size_t *size);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t getDecodingTime(uint32_t sample_index, uint32_t *time);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    enum {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        kSyncSample_Flag = 1
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t findClosestSample(
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            uint32_t req_time, uint32_t *sample_index, uint32_t flags);
741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    status_t findClosestSyncSample(
761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            uint32_t start_sample_index, uint32_t *sample_index);
771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    status_t findThumbnailSample(uint32_t *sample_index);
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)protected:
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ~SampleTable();
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)private:
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    sp<DataSource> mDataSource;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Mutex mLock;
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    off_t mChunkOffsetOffset;
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    uint32_t mChunkOffsetType;
891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    uint32_t mNumChunkOffsets;
901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    off_t mSampleToChunkOffset;
921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    uint32_t mNumSampleToChunkOffsets;
931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    off_t mSampleSizeOffset;
951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    uint32_t mSampleSizeFieldSize;
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    uint32_t mDefaultSampleSize;
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    uint32_t mNumSampleSizes;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    uint32_t mTimeToSampleCount;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    uint32_t *mTimeToSample;
101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    off_t mSyncSampleOffset;
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    uint32_t mNumSyncSamples;
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SampleTable(const SampleTable &);
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    SampleTable &operator=(const SampleTable &);
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace android
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // SAMPLE_TABLE_H_
112a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)