diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 0add5d415e883f0c4d060bc295d90dacd78da681..c65687241633f297c1bb7f108074f814d76642cd 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -50,6 +50,8 @@ #include <assert.h> #include <cassert> +#define JVET_M0228_REMOVE_CPMV_COMPARE 1 // Remove CPMV comparisons for construnted affine merge candidates from JVET-M0228, M0166, M0477 + #define JVET_M0145_AFFINE_MV_CLIP 1 // Missing clipping for MV storage in affine #define JVET_M0381_ONE_CTX_FOR_SUBBLOCK_MRG_IDX 1 // CE2.2.2 a: one context for subblock Merge index diff --git a/source/Lib/CommonLib/UnitTools.cpp b/source/Lib/CommonLib/UnitTools.cpp index 0559434c4c32ce673f4b8957d3582c84bd2098c7..4b435d2ced5c87f2845de90836032a8e81d41560 100644 --- a/source/Lib/CommonLib/UnitTools.cpp +++ b/source/Lib/CommonLib/UnitTools.cpp @@ -2544,7 +2544,11 @@ void PU::getAffineControlPointCand( const PredictionUnit &pu, MotionInfo mi[4], if ( mi[idx0].refIdx[l] >= 0 && mi[idx1].refIdx[l] >= 0 ) { // check same refidx and different mv +#if JVET_M0228_REMOVE_CPMV_COMPARE + if ( mi[idx0].refIdx[l] == mi[idx1].refIdx[l]) +#else if ( mi[idx0].refIdx[l] == mi[idx1].refIdx[l] && mi[idx0].mv[l] != mi[idx1].mv[l] ) +#endif { dir |= (l + 1); refIdx[l] = mi[idx0].refIdx[l]; @@ -2565,7 +2569,11 @@ void PU::getAffineControlPointCand( const PredictionUnit &pu, MotionInfo mi[4], if ( mi[idx0].refIdx[l] >= 0 && mi[idx1].refIdx[l] >= 0 && mi[idx2].refIdx[l] >= 0 ) { // check same refidx and different mv +#if JVET_M0228_REMOVE_CPMV_COMPARE + if ( mi[idx0].refIdx[l] == mi[idx1].refIdx[l] && mi[idx0].refIdx[l] == mi[idx2].refIdx[l]) +#else if ( mi[idx0].refIdx[l] == mi[idx1].refIdx[l] && mi[idx0].refIdx[l] == mi[idx2].refIdx[l] && (mi[idx0].mv[l] != mi[idx1].mv[l] || mi[idx0].mv[l] != mi[idx2].mv[l]) ) +#endif { dir |= (l + 1); refIdx[l] = mi[idx0].refIdx[l];