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)