From 83410a85993ad6f5f0c122036ff0bda42bf1d4f7 Mon Sep 17 00:00:00 2001 From: James Dong Date: Wed, 30 May 2012 17:34:24 -0700 Subject: Avoid prematurely terminating parsing when some track only has a single access unit Patch was contributed by teng.hong@nxp.com Change-Id: I0f56361d839f18627e512d18e86f51b58b9b0e05 related-to-bug: 6240789 --- .../stagefrightshells/src/VideoEditor3gpReader.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'libvideoeditor') diff --git a/libvideoeditor/vss/stagefrightshells/src/VideoEditor3gpReader.cpp b/libvideoeditor/vss/stagefrightshells/src/VideoEditor3gpReader.cpp index c4c4d84..5026073 100755 --- a/libvideoeditor/vss/stagefrightshells/src/VideoEditor3gpReader.cpp +++ b/libvideoeditor/vss/stagefrightshells/src/VideoEditor3gpReader.cpp @@ -1867,6 +1867,28 @@ M4OSA_ERR VideoEditor3gpReader_getNextStreamHandler(M4OSA_Context context, } err = VideoEditor3gpReader_getNextAu(pC, (*pStreamHandler), (M4_AccessUnit*)pUserData->m_pFirstAU); + + /* + * 1. "M4WAR_NO_MORE_AU == err" indicates that there is no more + * access unit from the current track. In other words, there + * is only a single access unit from the current track, and + * the parsing of this track has reached EOS. The reason why + * the first access unit needs to be parsed here is because for + * some audio codec (like AAC), the very first access unit + * must be decoded before its configuration/encoding parameters + * (such as # of channels and sample rate) can be correctly + * determined. + * + * 2. "trackCount > pC->mCurrTrack" indicates that there are other + * tracks to be parsed, in addition to the current track. + * + * When both conditions 1 & 2 hold, other tracks should be + * parsed. Thus, we should not bail out. + */ + if (M4WAR_NO_MORE_AU == err && trackCount > pC->mCurrTrack) { + err = M4NO_ERROR; + } + if (M4NO_ERROR != err) { goto Error; } -- cgit v1.1