diff options
author | Marco Nelissen <marcone@google.com> | 2012-08-08 09:19:05 -0700 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2012-08-08 09:19:05 -0700 |
commit | b7e75cfd64893dde230dfc1c3b281a00ca1b4470 (patch) | |
tree | 1ed2135b58a8762cdefda74197ea688a50b907b5 | |
parent | 28620ee3e9926ef07f0b4cb3e22b156b812e2d7e (diff) | |
download | frameworks_av-b7e75cfd64893dde230dfc1c3b281a00ca1b4470.zip frameworks_av-b7e75cfd64893dde230dfc1c3b281a00ca1b4470.tar.gz frameworks_av-b7e75cfd64893dde230dfc1c3b281a00ca1b4470.tar.bz2 |
Handle empty stsc box
Change-Id: I867e2499fac3045075654aaaecf44327753327fd
-rw-r--r-- | media/libmediaplayerservice/nuplayer/mp4/TrackFragment.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/media/libmediaplayerservice/nuplayer/mp4/TrackFragment.cpp b/media/libmediaplayerservice/nuplayer/mp4/TrackFragment.cpp index e2df468..12e71db 100644 --- a/media/libmediaplayerservice/nuplayer/mp4/TrackFragment.cpp +++ b/media/libmediaplayerservice/nuplayer/mp4/TrackFragment.cpp @@ -217,6 +217,9 @@ static void setU32At(uint8_t *ptr, uint32_t x) { } void Parser::StaticTrackFragment::fixSampleToChunkTableIfNecessary() { + if (mSampleToChunk == NULL) { + return; + } uint32_t entryCount = U32_AT(mSampleToChunk->data() + 4); uint32_t totalSamples = 0; for (uint32_t i = 0; i < entryCount; ++i) { @@ -251,7 +254,7 @@ status_t Parser::StaticTrackFragment::signalCompletion() { mSampleToChunkIndex = 0; - mSampleToChunkRemaining = + mSampleToChunkRemaining = (mSampleToChunk == NULL) ? 0 : U32_AT(mSampleToChunk->data() + 8 + 12 * mSampleToChunkIndex + 4); updateSampleInfo(); @@ -328,7 +331,11 @@ status_t Parser::StaticTrackFragment::parseSampleToChunk( uint32_t entryCount = parser->readU32(offset + 4); - if (entryCount == 0 || offset + 8 + entryCount * 12 != size) { + if (entryCount == 0) { + return OK; + } + + if (offset + 8 + entryCount * 12 != size) { return ERROR_MALFORMED; } |