From 169c286ed166499c5099d2b336967e0bf3d25551 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Wed, 17 Aug 2011 13:03:51 -0700 Subject: [PATCH] Make sure we have all the sample table metadata before declaring a track valid. Change-Id: I2dfbc3e6017b5cd264e4cccfa47d19047b2e7f31 related-to-bug: 5178976 --- media/libstagefright/MPEG4Extractor.cpp | 5 +++++ media/libstagefright/SampleTable.cpp | 7 +++++++ media/libstagefright/include/SampleTable.h | 2 ++ 3 files changed, 14 insertions(+) diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index 73a05a5cec..3b79f063c3 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -1687,6 +1687,11 @@ status_t MPEG4Extractor::verifyTrack(Track *track) { } } + if (!track->sampleTable->isValid()) { + // Make sure we have all the metadata we need. + return ERROR_MALFORMED; + } + return OK; } diff --git a/media/libstagefright/SampleTable.cpp b/media/libstagefright/SampleTable.cpp index a8a094e2bd..2b9d99bdf5 100644 --- a/media/libstagefright/SampleTable.cpp +++ b/media/libstagefright/SampleTable.cpp @@ -84,6 +84,13 @@ SampleTable::~SampleTable() { mSampleIterator = NULL; } +bool SampleTable::isValid() const { + return mChunkOffsetOffset >= 0 + && mSampleToChunkOffset >= 0 + && mSampleSizeOffset >= 0 + && mTimeToSample != NULL; +} + status_t SampleTable::setChunkOffsetParams( uint32_t type, off64_t data_offset, size_t data_size) { if (mChunkOffsetOffset >= 0) { diff --git a/media/libstagefright/include/SampleTable.h b/media/libstagefright/include/SampleTable.h index f44e0a2495..a6a6524c06 100644 --- a/media/libstagefright/include/SampleTable.h +++ b/media/libstagefright/include/SampleTable.h @@ -34,6 +34,8 @@ class SampleTable : public RefBase { public: SampleTable(const sp &source); + bool isValid() const; + // type can be 'stco' or 'co64'. status_t setChunkOffsetParams( uint32_t type, off64_t data_offset, size_t data_size); -- 2.11.0