diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index eede39cb4307f248d5e1546fd3f8495236503f78..7ddc155f2de2dbf32efd8909ec8509d1a19bc049 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -58,6 +58,9 @@ #define JVET_L0104_NO_4x4BI_INTER_CU 1 // Prohibit 4x4 bi-prediction for inter CU #define JVET_L0266_HMVP 1 //History-based MVP +#if JVET_L0266_HMVP +#define JVET_L0158_L0106_RESET_BUFFER 1 //reset the history buffer on HMVP +#endif #define JVET_L0553_FIX_INITQP 1 #define JVET_L0053_L0272_DM 1 // use center position of luma block to derive DM diff --git a/source/Lib/DecoderLib/DecSlice.cpp b/source/Lib/DecoderLib/DecSlice.cpp index 3ad162dd6c0d53af6c3f6ef882f28afc768c69fc..523619d8c998652859ff32e054e65b86fddf9ac9 100644 --- a/source/Lib/DecoderLib/DecSlice.cpp +++ b/source/Lib/DecoderLib/DecSlice.cpp @@ -230,6 +230,13 @@ void DecSlice::decompressSlice( Slice* slice, InputBitstream* bitstream ) } #endif +#if JVET_L0158_L0106_RESET_BUFFER + if (cs.slice->getSliceType() != I_SLICE && ctuXPosInCtus == 0) + { + cs.slice->resetMotionLUTs(); + } +#endif + isLastCtuOfSliceSegment = cabacReader.coding_tree_unit( cs, ctuArea, pic->m_prevQP, ctuRsAddr ); m_pcCuDecoder->decompressCtu( cs, ctuArea ); diff --git a/source/Lib/EncoderLib/EncSlice.cpp b/source/Lib/EncoderLib/EncSlice.cpp index 84994c21fa1caedb22671714471d3e72aae63503..108a61c76286efee9fd2fc79597643b6917c36fc 100644 --- a/source/Lib/EncoderLib/EncSlice.cpp +++ b/source/Lib/EncoderLib/EncSlice.cpp @@ -1538,6 +1538,13 @@ void EncSlice::encodeCtus( Picture* pcPic, const bool bCompressEntireSlice, cons const UnitArea ctuArea( cs.area.chromaFormat, Area( pos.x, pos.y, pcv.maxCUWidth, pcv.maxCUHeight ) ); DTRACE_UPDATE( g_trace_ctx, std::make_pair( "ctu", ctuRsAddr ) ); +#if JVET_L0158_L0106_RESET_BUFFER + if ( pcSlice->getSliceType() != I_SLICE && ctuXPosInCtus == 0) + { + pcSlice->resetMotionLUTs(); + } +#endif + #if ENABLE_WPP_PARALLELISM pcPic->scheduler.wait( ctuXPosInCtus, ctuYPosInCtus ); #endif