diff --git a/source/Lib/CommonLib/DepQuant.cpp b/source/Lib/CommonLib/DepQuant.cpp index bddbb7d29c68c07049f519c907635eeb3caa995a..793a627441c342cb42546ff1ff82fe7c8c77761a 100644 --- a/source/Lib/CommonLib/DepQuant.cpp +++ b/source/Lib/CommonLib/DepQuant.cpp @@ -647,6 +647,11 @@ namespace DQIntern inline TCoeff getSSbbThreshold() const { return m_thresSSbb; } inline int64_t getQScale() const { return m_QScale; } + +#if JVET_AE0125_SHIFT_QUANTIZATION_CENTER + const int m_coeffShift[64]={0,63, 31, 21, 15, 12, 10, 9, 7, 7, 6, 5, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; +#endif + private: // quantization int m_QShift; @@ -788,6 +793,22 @@ namespace DQIntern Intermediate_Int qIdx = ( level << 1 ) + ( level > 0 ? -(state>>1) : (state>>1) ); #endif int64_t nomTCoeff = ((int64_t)qIdx * (int64_t)invQScale + add) >> ((shift < 0) ? 0 : shift); + +#if JVET_AE0125_SHIFT_QUANTIZATION_CENTER + // Latent Shift + int qIdx2=qIdx; + qIdx2+=(qIdx>0? 1: -1); + int64_t nomTCoeff2 = ((int64_t)qIdx2 *(int64_t)invQScale + add) >> ((shift < 0) ? 0 : shift) ; + int aqIdx = abs(qIdx); + int coef=0; + if (aqIdx<64) + { + coef=m_coeffShift[aqIdx]; + } + nomTCoeff=(int64_t)((1024-coef)*nomTCoeff+coef*nomTCoeff2)>>10; + // Latent Shift +#endif + tCoeff[rasterPos] = (TCoeff)Clip3<int64_t>(minTCoeff, maxTCoeff, nomTCoeff); } #if TCQ_8STATES diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index d914cf633e556905df0b27693b940ac454e80074..1f1a6d670922df015fb47eb8c62d5b251b3d89cc 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -329,6 +329,8 @@ #define JVET_AB0067_MIP_DIMD_LFNST 1 // JVET-AB0067: Modification of LFNST for MIP coded block #define JVET_AC0130_NSPT 1 // JVET-AC0130: NSPT replacing DCT-II + LFNST for certain block shapes #define JVET_AC0115_INTRA_TMP_DIMD_MTS_LFNST 1 // JVET-AC0115: Modifications of MTS/LFNST for Intra TMP coded block +#define JVET_AE0125_SHIFT_QUANTIZATION_CENTER 1 // JVET-AE0125: Shifting quantization center + // Entropy Coding #define EC_HIGH_PRECISION 1 // CABAC high precision