Showing the changes to codec/decoder/core/src/manage_dec_ref.cpp (1 of 2 files). Show all
Unified · Split
| @@ -131,14 +131,16 @@ int32_t WelsInitRefList (PWelsDecoderContext pCtx, int32_t iPoc) { · 130 unmodified lines | ||
| 131 | 131 | bCopyPrevious = bCopyPrevious && (pRef->iWidthInPixel == pCtx->pPreviousDecodedPictureInDpb->iWidthInPixel) |
| 132 | 132 | && (pRef->iHeightInPixel == pCtx->pPreviousDecodedPictureInDpb->iHeightInPixel); |
| 133 | 133 | |
| 134 | − if (bCopyPrevious) { | |
| 135 | − memcpy (pRef->pData[0], pCtx->pPreviousDecodedPictureInDpb->pData[0], pRef->iLinesize[0] * pRef->iHeightInPixel); | |
| 136 | − memcpy (pRef->pData[1], pCtx->pPreviousDecodedPictureInDpb->pData[1], pRef->iLinesize[1] * pRef->iHeightInPixel / 2); | |
| 137 | − memcpy (pRef->pData[2], pCtx->pPreviousDecodedPictureInDpb->pData[2], pRef->iLinesize[2] * pRef->iHeightInPixel / 2); | |
| 138 | − } else { | |
| 134 | + if (!bCopyPrevious) { | |
| 139 | 135 | memset (pRef->pData[0], 128, pRef->iLinesize[0] * pRef->iHeightInPixel); |
| 140 | 136 | memset (pRef->pData[1], 128, pRef->iLinesize[1] * pRef->iHeightInPixel / 2); |
| 141 | 137 | memset (pRef->pData[2], 128, pRef->iLinesize[2] * pRef->iHeightInPixel / 2); |
| 138 | + } else if (pRef == pCtx->pPreviousDecodedPictureInDpb) { | |
| 139 | + WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "WelsInitRefList()::EC memcpy overlap."); | |
| 140 | + } else { | |
| 141 | + memcpy (pRef->pData[0], pCtx->pPreviousDecodedPictureInDpb->pData[0], pRef->iLinesize[0] * pRef->iHeightInPixel); | |
| 142 | + memcpy (pRef->pData[1], pCtx->pPreviousDecodedPictureInDpb->pData[1], pRef->iLinesize[1] * pRef->iHeightInPixel / 2); | |
| 143 | + memcpy (pRef->pData[2], pCtx->pPreviousDecodedPictureInDpb->pData[2], pRef->iLinesize[2] * pRef->iHeightInPixel / 2); | |
| 142 | 144 | } |
| 143 | 145 | pRef->iFrameNum = 0; |
| 144 | 146 | pRef->iFramePoc = 0; |