Fix the issue #3837 (#3868)
Revive the code removed in the commit c0e5ea286c31. Not quite sure now,
why it was decided to be removed.
diff --git a/codec/decoder/plus/src/welsDecoderExt.cpp b/codec/decoder/plus/src/welsDecoderExt.cpp
index 08f2a27..08e037a 100644
--- a/codec/decoder/plus/src/welsDecoderExt.cpp
+++ b/codec/decoder/plus/src/welsDecoderExt.cpp
@@ -1143,6 +1143,24 @@
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);