diff --git a/source/Lib/CommonLib/UnitTools.cpp b/source/Lib/CommonLib/UnitTools.cpp index 015d752caabcd45aeb384609307b8d6cbb718351..00a7560ca0d887993e24cb5343170c777c6566ab 100644 --- a/source/Lib/CommonLib/UnitTools.cpp +++ b/source/Lib/CommonLib/UnitTools.cpp @@ -2597,14 +2597,13 @@ void PU::fillIBCMvpCand(PredictionUnit &pu, AMVPInfo &amvpInfo) Position posLB = pu.Y().bottomLeft(); bool isScaledFlagLX = false; /// variable name from specification; true when the PUs below left or left are available (availableA0 || availableA1). + + const PredictionUnit* tmpPU = cs.getPURestricted(posLB.offset(-1, 1), pu, pu.chType); // getPUBelowLeft(idx, partIdxLB); + isScaledFlagLX = tmpPU != NULL && CU::isIBC(*tmpPU->cu); + if (!isScaledFlagLX) { - const PredictionUnit* tmpPU = cs.getPURestricted(posLB.offset(-1, 1), pu, pu.chType); // getPUBelowLeft(idx, partIdxLB); + tmpPU = cs.getPURestricted(posLB.offset(-1, 0), pu, pu.chType); isScaledFlagLX = tmpPU != NULL && CU::isIBC(*tmpPU->cu); - if (!isScaledFlagLX) - { - tmpPU = cs.getPURestricted(posLB.offset(-1, 0), pu, pu.chType); - isScaledFlagLX = tmpPU != NULL && CU::isIBC(*tmpPU->cu); - } } // Left predictor search @@ -2619,20 +2618,24 @@ void PU::fillIBCMvpCand(PredictionUnit &pu, AMVPInfo &amvpInfo) } // Above predictor search + bool isAdded = addIBCMVPCand(pu, posRT, MD_ABOVE_RIGHT, *pInfo); + + if (!isAdded) { - bool isAdded = addIBCMVPCand(pu, posRT, MD_ABOVE_RIGHT, *pInfo); + isAdded = addIBCMVPCand(pu, posRT, MD_ABOVE, *pInfo); if (!isAdded) { - isAdded = addIBCMVPCand(pu, posRT, MD_ABOVE, *pInfo); - - if (!isAdded) - { - addIBCMVPCand(pu, posLT, MD_ABOVE_LEFT, *pInfo); - } + addIBCMVPCand(pu, posLT, MD_ABOVE_LEFT, *pInfo); } } +#if JVET_M0281_AMVP_ROUNDING || JVET_M0117_AMVP_LIST_GEN + for( int i = 0; i < pInfo->numCand; i++ ) + { + pInfo->mvCand[i].roundToAmvrSignalPrecision(MV_PRECISION_INTERNAL, pu.cu->imv); + } +#else if (pu.cu->imv != 0) { for (int i = 0; i < pInfo->numCand; i++) @@ -2640,6 +2643,7 @@ void PU::fillIBCMvpCand(PredictionUnit &pu, AMVPInfo &amvpInfo) pInfo->mvCand[i].roundToAmvrSignalPrecision(MV_PRECISION_INTERNAL, pu.cu->imv); } } +#endif if (pInfo->numCand == 2) { @@ -2668,7 +2672,9 @@ void PU::fillIBCMvpCand(PredictionUnit &pu, AMVPInfo &amvpInfo) for (Mv &mv : pInfo->mvCand) { mv.changePrecision(MV_PRECISION_INTERNAL, MV_PRECISION_QUARTER); +#if !JVET_M0281_AMVP_ROUNDING && !JVET_M0117_AMVP_LIST_GEN mv.roundToAmvrSignalPrecision(MV_PRECISION_QUARTER, pu.cu->imv); +#endif } } diff --git a/source/Lib/EncoderLib/InterSearch.cpp b/source/Lib/EncoderLib/InterSearch.cpp index 5ba59aa8b0c0de14bf95ffe4f79d67ac4637407d..99244cacca58cb1fb84bcb81bd5273fdbea9786e 100644 --- a/source/Lib/EncoderLib/InterSearch.cpp +++ b/source/Lib/EncoderLib/InterSearch.cpp @@ -2052,7 +2052,7 @@ void InterSearch::predInterSearch(CodingUnit& cu, Partitioner& partitioner) { RefPicList eRefPicList = ( iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 ); #if JVET_M0483_IBC==0 - int refPicNumber = cs.sl#ice->getNumRefIdx(eRefPicList); + int refPicNumber = cs.slice->getNumRefIdx(eRefPicList); if (cs.slice->getSPS()->getIBCMode() && eRefPicList == REF_PIC_LIST_0) { refPicNumber--; @@ -4263,7 +4263,7 @@ void InterSearch::xPredAffineInterSearch( PredictionUnit& pu, { RefPicList eRefPicList = ( iRefList ? REF_PIC_LIST_1 : REF_PIC_LIST_0 ); #if JVET_M0483_IBC==0 - int refPicNumber = s#lice.getNumRefIdx(eRefPicList); + int refPicNumber = slice.getNumRefIdx(eRefPicList); if (slice.getSPS()->getIBCMode() && eRefPicList == REF_PIC_LIST_0) { refPicNumber--;