diff --git a/source/Lib/CommonLib/UnitTools.cpp b/source/Lib/CommonLib/UnitTools.cpp index 6dda51cbfa0bb4e6ffced8d8462d7760baf02f60..2bff868d192f9aeae18421988a6fce0ae9cb7831 100644 --- a/source/Lib/CommonLib/UnitTools.cpp +++ b/source/Lib/CommonLib/UnitTools.cpp @@ -2613,14 +2613,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 @@ -2635,20 +2634,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++) @@ -2656,6 +2659,7 @@ void PU::fillIBCMvpCand(PredictionUnit &pu, AMVPInfo &amvpInfo) pInfo->mvCand[i].roundToAmvrSignalPrecision(MV_PRECISION_INTERNAL, pu.cu->imv); } } +#endif if (pInfo->numCand == 2) { @@ -2684,7 +2688,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 8e80e7c12d477fecccbc5ee7057f323f206551bd..c7425aab0e3508fa21a7109d08ba79f80e38e0e0 100644 --- a/source/Lib/EncoderLib/InterSearch.cpp +++ b/source/Lib/EncoderLib/InterSearch.cpp @@ -2054,7 +2054,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--; @@ -4265,7 +4265,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--;