From c02c03104b77cb423a91f9ebd25eeaeb34bb247d Mon Sep 17 00:00:00 2001 From: Takashi Yano Date: Fri, 14 Mar 2025 16:19:26 +0900 Subject: [PATCH] Fix the issue #3837 Revive the code removed in the commit c0e5ea286c31. Not quite sure now, why it was decided to be removed. --- codec/decoder/plus/src/welsDecoderExt.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/codec/decoder/plus/src/welsDecoderExt.cpp b/codec/decoder/plus/src/welsDecoderExt.cpp index 08f2a2743d..08e037a3d2 100644 --- a/codec/decoder/plus/src/welsDecoderExt.cpp +++ b/codec/decoder/plus/src/welsDecoderExt.cpp @@ -1143,6 +1143,24 @@ DECODING_STATE CWelsDecoder::ReorderPicturesInDisplay(PWelsDecoderContext pDecCo m_bIsBaseline = pDecContext->pSps->uiProfileIdc == 66 || pDecContext->pSps->uiProfileIdc == 83; if (!m_bIsBaseline) { if (pDstInfo->iBufferStatus == 1) { + if (pDecContext->pSliceHeader->eSliceType == B_SLICE && + ((pDecContext->iSeqNum == m_sReoderingStatus.iLastWrittenSeqNum) ? + (pDecContext->pSliceHeader->iPicOrderCntLsb <= m_sReoderingStatus.iLastWrittenPOC + 2) : + (pDecContext->iSeqNum - m_sReoderingStatus.iLastWrittenSeqNum == 1 && pDecContext->pSliceHeader->iPicOrderCntLsb == 0))) { + m_sReoderingStatus.iLastWrittenPOC = pDecContext->pSliceHeader->iPicOrderCntLsb; + m_sReoderingStatus.iLastWrittenSeqNum = pDecContext->iSeqNum; + //issue #3478, use b-slice type to determine correct picture order as the first priority as POC order is not as reliable as based on b-slice + ppDst[0] = pDstInfo->pDst[0]; + ppDst[1] = pDstInfo->pDst[1]; + ppDst[2] = pDstInfo->pDst[2]; +#if defined (_DEBUG) +#ifdef _MOTION_VECTOR_DUMP_ + fprintf (stderr, "Output POC: #%d uiDecodingTimeStamp=%d\n", pDecContext->pSliceHeader->iPicOrderCntLsb, + pDecContext->uiDecodingTimeStamp); +#endif +#endif + return iRet; + } BufferingReadyPicture(pDecContext, ppDst, pDstInfo); if (!m_sReoderingStatus.bHasBSlice && m_sReoderingStatus.iNumOfPicts > 1) { ReleaseBufferedReadyPictureNoReorder (pDecContext, ppDst, pDstInfo);