diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index f7b2ead32d802791987157f3574cd8d564eab842..791b019ffa4436410f0018295a1e55d12f2a620a 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -577,7 +577,7 @@ void Slice::checkCRA(const ReferencePictureList* pRPL0, const ReferencePictureLi { if (pocCRA < MAX_UINT && getPOC() > pocCRA) { - uint32_t numRefPic = pRPL0->getNumberOfShorttermPictures() + pRPL0->getNumberOfLongtermPictures(); + uint32_t numRefPic = pRPL0->getNumberOfShorttermPictures() + pRPL0->getNumberOfLongtermPictures() + pRPL0->getNumberOfInterLayerPictures(); for (int i = 0; i < numRefPic; i++) { if (!pRPL0->isRefPicLongterm(i)) @@ -599,7 +599,7 @@ void Slice::checkCRA(const ReferencePictureList* pRPL0, const ReferencePictureLi CHECK(ltrp->getPOC() < pocCRA, "Invalid state"); } } - numRefPic = pRPL1->getNumberOfShorttermPictures() + pRPL1->getNumberOfLongtermPictures(); + numRefPic = pRPL1->getNumberOfShorttermPictures() + pRPL1->getNumberOfLongtermPictures() + pRPL1->getNumberOfInterLayerPictures(); for (int i = 0; i < numRefPic; i++) { if (!pRPL1->isRefPicLongterm(i)) @@ -1638,7 +1638,7 @@ void Slice::applyReferencePictureListBasedMarking( PicList& rcListPic, const Ref { curPoc = curPoc & (pocCycle - 1); } - if (rpcPic->longTerm && curPoc == refPoc && rpcPic->referenced) + if (rpcPic->longTerm && curPoc == refPoc && rpcPic->referenced && rpcPic->reconstructed && rpcPic->layerId == getNalUnitLayerId()) { isAvailable = 1; break; @@ -1666,7 +1666,7 @@ void Slice::applyReferencePictureListBasedMarking( PicList& rcListPic, const Ref { curPoc = curPoc & (pocCycle - 1); } - if (!rpcPic->longTerm && curPoc == refPoc && rpcPic->referenced) + if (!rpcPic->longTerm && curPoc == refPoc && rpcPic->referenced && rpcPic->reconstructed && rpcPic->layerId == getNalUnitLayerId()) { isAvailable = 1; rpcPic->longTerm = true; @@ -1945,7 +1945,7 @@ int Slice::checkThatAllRefPicsAreAvailable(PicList& rcListPic, const ReferencePi { curPoc = curPoc & (pocCycle - 1); } - if (rpcPic->longTerm && curPoc == refPoc && rpcPic->referenced) + if (rpcPic->longTerm && curPoc == refPoc && rpcPic->referenced && rpcPic->reconstructed && rpcPic->layerId == getNalUnitLayerId()) { isAvailable = 1; break; @@ -1969,7 +1969,7 @@ int Slice::checkThatAllRefPicsAreAvailable(PicList& rcListPic, const ReferencePi { curPoc = curPoc & (pocCycle - 1); } - if (!rpcPic->longTerm && curPoc == refPoc && rpcPic->referenced) + if (!rpcPic->longTerm && curPoc == refPoc && rpcPic->referenced && rpcPic->reconstructed && rpcPic->layerId == getNalUnitLayerId()) { isAvailable = 1; rpcPic->longTerm = true;