diff options
author | Andreas Huber <andih@google.com> | 2010-01-19 10:39:21 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-01-19 10:39:21 -0800 |
commit | c57b67905c2128ddadfeca96785ee1f593b6605a (patch) | |
tree | 7c7fb1b4cc87520eae2ede9229e7fc78d6e88c3e /media/libstagefright/include/SampleTable.h | |
parent | 97419ed670a12f48a7609673da8ee5dc0376f075 (diff) | |
download | frameworks_av-c57b67905c2128ddadfeca96785ee1f593b6605a.zip frameworks_av-c57b67905c2128ddadfeca96785ee1f593b6605a.tar.gz frameworks_av-c57b67905c2128ddadfeca96785ee1f593b6605a.tar.bz2 |
Squashed commit of the following:
commit 6689350d7e4dad6d873c1ed95f0a356e3bfd79d1
Author: Andreas Huber <andih@google.com>
Date: Tue Jan 19 09:23:02 2010 -0800
Some tweaks to the SampleIterator.
commit 5638bff6d31442a219806445c3106d47b081fcab
Author: Andreas Huber <andih@google.com>
Date: Fri Jan 15 14:46:29 2010 -0800
A much improved implementation of MPEG4 sample table operations through an iterator.
Diffstat (limited to 'media/libstagefright/include/SampleTable.h')
-rw-r--r-- | media/libstagefright/include/SampleTable.h | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/media/libstagefright/include/SampleTable.h b/media/libstagefright/include/SampleTable.h index ead3431..533ce84 100644 --- a/media/libstagefright/include/SampleTable.h +++ b/media/libstagefright/include/SampleTable.h @@ -28,6 +28,7 @@ namespace android { class DataSource; +struct SampleIterator; class SampleTable : public RefBase { public: @@ -50,21 +51,16 @@ public: //////////////////////////////////////////////////////////////////////////// uint32_t countChunkOffsets() const; - status_t getChunkOffset(uint32_t chunk_index, off_t *offset); - - status_t getChunkForSample( - uint32_t sample_index, uint32_t *chunk_index, - uint32_t *chunk_relative_sample_index, uint32_t *desc_index); uint32_t countSamples() const; - status_t getSampleSize(uint32_t sample_index, size_t *sample_size); - - status_t getSampleOffsetAndSize( - uint32_t sample_index, off_t *offset, size_t *size); status_t getMaxSampleSize(size_t *size); - status_t getDecodingTime(uint32_t sample_index, uint32_t *time); + status_t getMetaDataForSample( + uint32_t sampleIndex, + off_t *offset, + size_t *size, + uint32_t *decodingTime); enum { kSyncSample_Flag = 1 @@ -72,15 +68,17 @@ public: status_t findClosestSample( uint32_t req_time, uint32_t *sample_index, uint32_t flags); - status_t findClosestSyncSample( - uint32_t start_sample_index, uint32_t *sample_index); - status_t findThumbnailSample(uint32_t *sample_index); protected: ~SampleTable(); private: + static const uint32_t kChunkOffsetType32; + static const uint32_t kChunkOffsetType64; + static const uint32_t kSampleSizeType32; + static const uint32_t kSampleSizeTypeCompact; + sp<DataSource> mDataSource; Mutex mLock; @@ -102,6 +100,22 @@ private: off_t mSyncSampleOffset; uint32_t mNumSyncSamples; + SampleIterator *mSampleIterator; + + struct SampleToChunkEntry { + uint32_t startChunk; + uint32_t samplesPerChunk; + uint32_t chunkDesc; + }; + SampleToChunkEntry *mSampleToChunkEntries; + + friend struct SampleIterator; + + status_t findClosestSyncSample_l( + uint32_t start_sample_index, uint32_t *sample_index); + + status_t getSampleSize_l(uint32_t sample_index, size_t *sample_size); + SampleTable(const SampleTable &); SampleTable &operator=(const SampleTable &); }; |