Showing the changes to codec/decoder/core/src/decoder_core.cpp (1 of 15 files). Show all
Unified · Split
| @@ -113,7 +113,9 @@ static inline int32_t DecodeFrameConstruction (PWelsDecoderContext pCtx, uint8_t · 112 unmodified lines | ||
| 113 | 113 | if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) //no buffer output if EC is disabled and frame incomplete |
| 114 | 114 | pDstInfo->iBufferStatus = (int32_t) (bFrameCompleteFlag |
| 115 | 115 | && pPic->bIsComplete); // When EC disable, ECed picture not output |
| 116 | − else if (pCtx->eErrorConMethod == ERROR_CON_SLICE_COPY_CROSS_IDR_FREEZE_RES_CHANGE && pCtx->iErrorCode && bOutResChange) | |
| 116 | + else if ((pCtx->eErrorConMethod == ERROR_CON_SLICE_COPY_CROSS_IDR_FREEZE_RES_CHANGE | |
| 117 | + || pCtx->eErrorConMethod == ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE) | |
| 118 | + && pCtx->iErrorCode && bOutResChange) | |
| 117 | 119 | pCtx->bFreezeOutput = true; |
| 118 | 120 | |
| 119 | 121 | if ((pDstInfo->iBufferStatus == 1) && (pCurDq->sLayerInfo.sNalHeaderExt.bIdrFlag)) { |
| @@ -620,6 +622,7 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 500 unmodified lines | ||
| 620 | 622 | pSliceHeadExt->pSubsetSps = pSubsetSps; |
| 621 | 623 | |
| 622 | 624 | bIdrFlag = (!kbExtensionFlag && eNalType == NAL_UNIT_CODED_SLICE_IDR) || (kbExtensionFlag && pNalHeaderExt->bIdrFlag); |
| 625 | + pSliceHead->bIdrFlag = bIdrFlag; | |
| 623 | 626 | |
| 624 | 627 | if (pSps->uiLog2MaxFrameNum == 0) { |
| 625 | 628 | WelsLog (pLogCtx, WELS_LOG_WARNING, "non existing SPS referenced"); |
| @@ -1961,6 +1964,8 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 1335 unmodified lines | ||
| 1961 | 1964 | memcpy (&pLayerInfo.sNalHeaderExt, &pNalCur->sNalHeaderExt, sizeof (SNalUnitHeaderExt)); //confirmed_safe_unsafe_usage |
| 1962 | 1965 | |
| 1963 | 1966 | pCtx->pDec->iFrameNum = pSh->iFrameNum; |
| 1967 | + pCtx->pDec->iFramePoc = pSh->iPicOrderCntLsb; // still can not obtain correct, because current do not support POCtype 2 | |
| 1968 | + pCtx->pDec->bIdrFlag = pNalCur->sNalHeaderExt.bIdrFlag; | |
| 1964 | 1969 | |
| 1965 | 1970 | memcpy (&pLayerInfo.sSliceInLayer.sSliceHeaderExt, pShExt, sizeof (SSliceHeaderExt)); //confirmed_safe_unsafe_usage |
| 1966 | 1971 | pLayerInfo.sSliceInLayer.bSliceHeaderExtFlag = pNalCur->sNalData.sVclNal.bSliceHeaderExtFlag; |
| @@ -2126,6 +2131,9 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 159 unmodified lines | ||
| 2126 | 2131 | pCtx->pDec->iLinesize, |
| 2127 | 2132 | pCtx->sExpandPicFunc.pfExpandLumaPicture, pCtx->sExpandPicFunc.pfExpandChromaPicture); |
| 2128 | 2133 | pCtx->pDec = NULL; |
| 2134 | + } else if (pCtx->eErrorConMethod == ERROR_CON_SLICE_MV_COPY_CROSS_IDR || pCtx->eErrorConMethod == ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE) { | |
| 2135 | + pCtx->pPreviousDecodedPictureInDpb = pCtx->pDec; //store latest decoded picture for MV Copy EC | |
| 2136 | + pCtx->pDec = NULL; | |
| 2129 | 2137 | } |
| 2130 | 2138 | } |
| 2131 | 2139 | |
| @@ -2156,6 +2164,8 @@ bool CheckAndFinishLastPic (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferIn · 24 unmodified lines | ||
| 2156 | 2164 | if (pCtx->sLastNalHdrExt.sNalUnitHeader.uiNalRefIdc > 0) { |
| 2157 | 2165 | pCtx->pPreviousDecodedPictureInDpb = pCtx->pDec; //save ECed pic for future use |
| 2158 | 2166 | MarkECFrameAsRef (pCtx); |
| 2167 | + } else if (pCtx->eErrorConMethod == ERROR_CON_SLICE_MV_COPY_CROSS_IDR || pCtx->eErrorConMethod == ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE) { | |
| 2168 | + pCtx->pPreviousDecodedPictureInDpb = pCtx->pDec; //save ECed pic for future MV Copy use | |
| 2159 | 2169 | } |
| 2160 | 2170 | } else { |
| 2161 | 2171 | if (DecodeFrameConstruction (pCtx, ppDst, pDstInfo)) |