diff options
author | Marco Nelissen <marcone@google.com> | 2012-08-08 09:43:26 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-08-08 09:43:26 -0700 |
commit | e2229fba1c7e98c243ea777f567fd72579d91e41 (patch) | |
tree | c9896144a6719480f828d568319c81f0bba9a2ca | |
parent | a9e0ea58738a50de84a80d3b4db1936e7433dce4 (diff) | |
parent | b7e75cfd64893dde230dfc1c3b281a00ca1b4470 (diff) | |
download | frameworks_av-e2229fba1c7e98c243ea777f567fd72579d91e41.zip frameworks_av-e2229fba1c7e98c243ea777f567fd72579d91e41.tar.gz frameworks_av-e2229fba1c7e98c243ea777f567fd72579d91e41.tar.bz2 |
Merge "Handle empty stsc box" into jb-mr1-dev
-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; } |