History

Add SPS/SubSPS/PPS update when AU number==0 and iOverwriteFlags==true Add TotalNumMbRec>0 judgement for EC

Haibo Zhu committed 11 years ago

Commit 586893c1 parent b455c031 file · +34 −10Browse files

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

Unified · Split

codec/decoder/core/src/decoder_core.cpp+34−10
@@ -562,10 +562,17 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 561 unmodified lines
562562 return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_PPS_ID);
563563 }
564564
565− if (pCtx->iOverwriteFlags & OVERWRITE_PPS)
566− pPps = &pCtx->sPpsBuffer[MAX_PPS_COUNT];
567− else
565+ if (pCtx->iOverwriteFlags & OVERWRITE_PPS) {
566+ if (pCtx->pAccessUnitList->uiAvailUnitsNum > 1 || pCtx->iTotalNumMbRec > 0) {
567+ pPps = &pCtx->sPpsBuffer[MAX_PPS_COUNT];
568+ } else {
569+ memcpy (&pCtx->sPpsBuffer[pCtx->sPpsBuffer[MAX_PPS_COUNT].iPpsId], &pCtx->sPpsBuffer[MAX_PPS_COUNT], sizeof (SPps));
570+ pCtx->iOverwriteFlags ^= OVERWRITE_PPS;
571+ pPps = &pCtx->sPpsBuffer[iPpsId];
572+ }
573+ } else {
568574 pPps = &pCtx->sPpsBuffer[iPpsId];
575+ }
569576
570577 if (pPps->uiNumSliceGroups == 0) {
571578 WelsLog (pLogCtx, WELS_LOG_WARNING, "Invalid PPS referenced");
@@ -574,10 +581,19 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 2 unmodified lines
574581 }
575582
576583 if (kbExtensionFlag) {
577− if (pCtx->iOverwriteFlags & OVERWRITE_SUBSETSPS)
578− pSubsetSps = &pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT];
579− else
580− pSubsetSps = &pCtx->sSubsetSpsBuffer[pPps->iSpsId];
584+ if (pCtx->iOverwriteFlags & OVERWRITE_SUBSETSPS) {
585+ if (pCtx->pAccessUnitList->uiAvailUnitsNum > 1 || pCtx->iTotalNumMbRec > 0) {
586+ pSubsetSps = &pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT];
587+ } else {
588+ memcpy (&pCtx->sSubsetSpsBuffer[pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT].sSps.iSpsId],
589+ &pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT], sizeof (SSubsetSps));
590+ pCtx->iOverwriteFlags ^= OVERWRITE_SUBSETSPS;
591+ pSubsetSps = &pCtx->sSubsetSpsBuffer[pPps->iSpsId];
592+ ResetActiveSPSForEachLayer (pCtx);
593+ }
594+ } else {
595+ pSubsetSps = &pCtx->sSubsetSpsBuffer[pPps->iSpsId];
596+ }
581597 pSps = &pSubsetSps->sSps;
582598 if (pCtx->bSubspsAvailFlags[pPps->iSpsId] == false) {
583599 WelsLog (pLogCtx, WELS_LOG_ERROR, "SPS id is invalid!");
@@ -590,10 +606,18 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 6 unmodified lines
590606 pCtx->iErrorCode |= dsNoParamSets;
591607 return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_SPS_ID);
592608 }
593− if (pCtx->iOverwriteFlags & OVERWRITE_SPS)
594− pSps = &pCtx->sSpsBuffer[MAX_SPS_COUNT];
595− else
609+ if (pCtx->iOverwriteFlags & OVERWRITE_SPS) {
610+ if (pCtx->pAccessUnitList->uiAvailUnitsNum > 1 || pCtx->iTotalNumMbRec > 0) {
611+ pSps = &pCtx->sSpsBuffer[MAX_SPS_COUNT];
612+ } else {
613+ memcpy (&pCtx->sSpsBuffer[pCtx->sSpsBuffer[MAX_SPS_COUNT].iSpsId], &pCtx->sSpsBuffer[MAX_SPS_COUNT], sizeof (SSps));
614+ pCtx->iOverwriteFlags ^= OVERWRITE_SPS;
615+ pSps = &pCtx->sSpsBuffer[pPps->iSpsId];
616+ ResetActiveSPSForEachLayer (pCtx);
617+ }
618+ } else {
596619 pSps = &pCtx->sSpsBuffer[pPps->iSpsId];
620+ }
597621 }
598622 pSliceHead->iPpsId = iPpsId;
599623 pSliceHead->iSpsId = pPps->iSpsId;

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