History

use temp buffer to store new arrived PPS/SPS

Licai Guo committed 12 years ago

Commit 8ad9e0b1 parent 8a3518f1 file · +12 −10Browse files

Showing the changes to codec/decoder/core/src/au_parser.cpp (1 of 1 file). Show all

Unified · Split

codec/decoder/core/src/au_parser.cpp+12−10
@@ -759,6 +759,7 @@ const SLevelLimits* GetLevelLimits (int32_t iLevelIdx, bool bConstraint3) { · 758 unmodified lines
759759
760760 int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicWidth, int32_t* pPicHeight) {
761761 PBitStringAux pBs = pBsAux;
762+ SSubsetSps sTempSubsetSps;
762763 PSps pSps = NULL;
763764 PSubsetSps pSubsetSps = NULL;
764765 SNalUnitHeader* pNalHead = &pCtx->sCurNalHead;
@@ -770,12 +771,6 @@ int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicW · 5 unmodified lines
770771 bool bConstraintSetFlags[6] = { false };
771772 const bool kbUseSubsetFlag = IS_SUBSET_SPS_NAL (pNalHead->eNalUnitType);
772773
773− if (kbUseSubsetFlag) { // SubsetSps
774− pCtx->bSubspsExistAheadFlag = true;
775− } else { // Sps
776− pCtx->bSpsExistAheadFlag = true;
777− }
778−
779774 WELS_READ_VERIFY (BsGetBits (pBs, 8, &uiCode)); //profile_idc
780775 uiProfileIdc = uiCode;
781776 WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //constraint_set0_flag
@@ -801,13 +796,13 @@ int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicW · 19 unmodified lines
801796 iSpsId = uiCode;
802797
803798 if (kbUseSubsetFlag) {
804− pSubsetSps = &pCtx->sSubsetSpsBuffer[iSpsId];
805− pSps = &pSubsetSps->sSps;
806799 pCtx->bSubspsAvailFlags[iSpsId] = false;
807800 } else {
808− pSps = &pCtx->sSpsBuffer[iSpsId];
809801 pCtx->bSpsAvailFlags[iSpsId] = false;
810802 }
803+ pSubsetSps = &sTempSubsetSps;
804+ pSps = &sTempSubsetSps.sSps;
805+ memset (pSubsetSps, 0, sizeof(SSubsetSps));
811806 const SLevelLimits* pSLevelLimits = GetLevelLimits (uiLevelIdc, bConstraintSetFlags[3]);
812807 if (NULL == pSLevelLimits) {
813808 WelsLog (pCtx, WELS_LOG_WARNING, "ParseSps(): level_idx (%d).\n", uiLevelIdc);
@@ -986,9 +981,13 @@ int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicW · 172 unmodified lines
986981 *pPicWidth = pSps->iMbWidth << 4;
987982 *pPicHeight = pSps->iMbHeight << 4;
988983 if (kbUseSubsetFlag) {
984+ memcpy (&pCtx->sSubsetSpsBuffer[iSpsId], pSubsetSps, sizeof(SSubsetSps));
989985 pCtx->bSubspsAvailFlags[iSpsId] = true;
986+ pCtx->bSubspsExistAheadFlag = true;
990987 } else {
988+ memcpy (&pCtx->sSpsBuffer[iSpsId], pSps, sizeof(SSps));
991989 pCtx->bSpsAvailFlags[iSpsId] = true;
990+ pCtx->bSpsExistAheadFlag = true;
992991 }
993992 return 0;
994993 }
@@ -1010,6 +1009,7 @@ int32_t ParseSps (PWelsDecoderContext pCtx, PBitStringAux pBsAux, int32_t* pPicW · 15 unmodified lines
10101009 int32_t ParsePps (PWelsDecoderContext pCtx, PPps pPpsList, PBitStringAux pBsAux) {
10111010
10121011 PPps pPps = NULL;
1012+ SPps sTempPps;
10131013 uint32_t uiPpsId = 0;
10141014 uint32_t iTmp;
10151015 uint32_t uiCode;
@@ -1022,7 +1022,8 @@ int32_t ParsePps (PWelsDecoderContext pCtx, PPps pPpsList, PBitStringAux pBsAux) · 6 unmodified lines
10221022 }
10231023
10241024 pCtx->bPpsAvailFlags[uiPpsId] = false;
1025− pPps = &pPpsList[uiPpsId];
1025+ pPps = &sTempPps;
1026+ memset (pPps, 0, sizeof(SPps));
10261027
10271028 pPps->iPpsId = uiPpsId;
10281029 WELS_READ_VERIFY (BsGetUe (pBsAux, &uiCode)); //seq_parameter_set_id
@@ -1104,6 +1105,7 @@ int32_t ParsePps (PWelsDecoderContext pCtx, PPps pPpsList, PBitStringAux pBsAux) · 75 unmodified lines
11041105 WELS_READ_VERIFY (BsGetOneBit (pBsAux, &uiCode)); //redundant_pic_cnt_present_flag
11051106 pPps->bRedundantPicCntPresentFlag = !!uiCode;
11061107
1108+ memcpy (&pCtx->sPpsBuffer[uiPpsId], pPps, sizeof(SPps));
11071109 pCtx->bPpsAvailFlags[uiPpsId] = true;
11081110
11091111 return ERR_NONE;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t