...
 
Commits (17)
......@@ -51,10 +51,6 @@ SAOLcuBoundary : 0 # SAOLcuBoundary using non-deblocked
#============ Tiles / Slices ================
EnablePicPartitioning : 0 # Enable picture partitioning (0: single tile, single slice, 1: multiple tiles/slices can be used)
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ VTM settings ======================
LoopFilterTcOffset_div2 : 0
SEIDecodedPictureHash : 0
......@@ -100,6 +96,7 @@ LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 1 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
LMCSOffset : 2 # chroma residual scaling offset
MRL : 1
MIP : 1
JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable
ChromaTS : 1
......
......@@ -68,10 +68,6 @@ TemporalFilterStrengthFrame4 : 0.4 # Enable filter at every 4th frame w
#============ Tiles / Slices ================
EnablePicPartitioning : 0 # Enable picture partitioning (0: single tile, single slice, 1: multiple tiles/slices can be used)
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
......@@ -116,7 +112,7 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
MHIntra : 1
CIIP : 1
IBC : 0 # turned off in CTC
AllowDisFracMMVD : 1
AffineAmvr : 0
......@@ -124,6 +120,7 @@ LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 2 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
LMCSOffset : 1 # chroma residual scaling offset
MRL : 1
MIP : 0
JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable
PROF : 1
......
......@@ -68,10 +68,6 @@ TemporalFilterStrengthFrame4 : 0.4 # Enable filter at every 4th frame w
#============ Tiles / Slices ================
EnablePicPartitioning : 0 # Enable picture partitioning (0: single tile, single slice, 1: multiple tiles/slices can be used)
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
......@@ -117,9 +113,9 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
GBi : 1
GBiFast : 1
MHIntra : 1
BCW : 1
BcwFast : 1
CIIP : 1
Triangle : 1
IBC : 0 # turned off in CTC
AllowDisFracMMVD : 1
......@@ -128,6 +124,7 @@ LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 2 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
LMCSOffset : 1 # chroma residual scaling offset
MRL : 1
MIP : 0
JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable
PROF : 1
......
......@@ -79,10 +79,6 @@ TemporalFilterStrengthFrame16 : 1.5 # Enable filter at every 16th frame
#============ Tiles / Slices ================
EnablePicPartitioning : 0 # Enable picture partitioning (0: single tile, single slice, 1: multiple tiles/slices can be used)
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
......@@ -129,10 +125,10 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
GBi : 1
GBiFast : 1
BCW : 1
BcwFast : 1
BIO : 1
MHIntra : 1
CIIP : 1
Triangle : 1
IBC : 0 # turned off in CTC
AllowDisFracMMVD : 1
......@@ -141,6 +137,7 @@ LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 0 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
LMCSOffset : 6 # chroma residual scaling offset
MRL : 1
MIP : 1
DMVR : 1
SMVD : 1
......
......@@ -81,10 +81,6 @@ RasterSliceSizes : 2 5 5 # Raster-scan slice sizes
DisableLoopFilterAcrossTiles : 0 # Loop filtering (DBLK/SAO/ALF) applied across tile boundaries or not (0: filter across tile boundaries 1: do not filter across tile boundaries)
DisableLoopFilterAcrossSlices : 0 # Loop filtering (DBLK/SAO/ALF) applied across slice boundaries or not (0: filter across slice boundaries 1: do not filter across slice boundaries)
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
......@@ -129,10 +125,10 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
GBi : 1
GBiFast : 1
BCW : 1
BcwFast : 1
BIO : 1
MHIntra : 1
CIIP : 1
Triangle : 1
IBC : 0 # turned off in CTC
AllowDisFracMMVD : 1
......@@ -140,6 +136,7 @@ AffineAmvr : 1
LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 0 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
MRL : 1
MIP : 1
DMVR : 1
SMVD : 1
......
......@@ -81,10 +81,6 @@ RectSlicePositions : 0 206 9 35 45 107 117 215 # Rectangular slice po
DisableLoopFilterAcrossTiles : 0 # Loop filtering (DBLK/SAO/ALF) applied across tile boundaries or not (0: filter across tile boundaries 1: do not filter across tile boundaries)
DisableLoopFilterAcrossSlices : 0 # Loop filtering (DBLK/SAO/ALF) applied across slice boundaries or not (0: filter across slice boundaries 1: do not filter across slice boundaries)
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
......@@ -129,10 +125,10 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
GBi : 1
GBiFast : 1
BCW : 1
BcwFast : 1
BIO : 1
MHIntra : 1
CIIP : 1
Triangle : 1
IBC : 0 # turned off in CTC
AllowDisFracMMVD : 1
......@@ -140,6 +136,7 @@ AffineAmvr : 1
LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 0 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
MRL : 1
MIP : 1
DMVR : 1
SMVD : 1
......
......@@ -82,10 +82,6 @@ RectSliceFixedHeight : 2 # Fixed rectangular sl
DisableLoopFilterAcrossTiles : 0 # Loop filtering (DBLK/SAO/ALF) applied across tile boundaries or not (0: filter across tile boundaries 1: do not filter across tile boundaries)
DisableLoopFilterAcrossSlices : 0 # Loop filtering (DBLK/SAO/ALF) applied across slice boundaries or not (0: filter across slice boundaries 1: do not filter across slice boundaries)
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
......@@ -130,10 +126,10 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
GBi : 1
GBiFast : 1
BCW : 1
BcwFast : 1
BIO : 1
MHIntra : 1
CIIP : 1
Triangle : 1
IBC : 0 # turned off in CTC
AllowDisFracMMVD : 1
......@@ -141,6 +137,7 @@ AffineAmvr : 1
LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 0 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
MRL : 1
MIP : 1
DMVR : 1
SMVD : 1
......
......@@ -79,10 +79,6 @@ RasterSliceSizes : 1 # Raster-scan slice sizes
DisableLoopFilterAcrossTiles : 0 # Loop filtering (DBLK/SAO/ALF) applied across tile boundaries or not (0: filter across tile boundaries 1: do not filter across tile boundaries)
DisableLoopFilterAcrossSlices : 0 # Loop filtering (DBLK/SAO/ALF) applied across slice boundaries or not (0: filter across slice boundaries 1: do not filter across slice boundaries)
#============ Lossless ================
TransquantBypassEnable : 0 # Value of PPS flag.
CUTransquantBypassFlagForce: 0 # Force transquant bypass mode, when transquant_bypass_enable_flag is enabled
#============ Rate Control ======================
RateControl : 0 # Rate control: enable rate control
TargetBitrate : 1000000 # Rate control: target bitrate, in bps
......@@ -127,10 +123,10 @@ LMChroma : 1 # use CCLM only
DepQuant : 1
IMV : 1
ALF : 1
GBi : 1
GBiFast : 1
BCW : 1
BcwFast : 1
BIO : 1
MHIntra : 1
CIIP : 1
Triangle : 1
IBC : 0 # turned off in CTC
AllowDisFracMMVD : 1
......@@ -138,6 +134,7 @@ AffineAmvr : 1
LMCSEnable : 1 # LMCS: 0: disable, 1:enable
LMCSSignalType : 0 # Input signal type: 0:SDR, 1:HDR-PQ, 2:HDR-HLG
LMCSUpdateCtrl : 0 # LMCS model update control: 0:RA, 1:AI, 2:LDB/LDP
MRL : 1
MIP : 1
DMVR : 1
SMVD : 1
......
SEISampleAspectRatioInfo: 1
SEISARICancelFlag: 0
SEISARIPersistenceFlag: 1
SEISARIAspectRatioIdc: 255
SEISARISarWidth: 1
SEISARISarHeight: 1
......@@ -1874,6 +1874,12 @@ Specifies the locations of the horizontal virtual boundaries in units of luma sa
\begin{OptionTableNoShorthand}{Coding tools parameters}{tab:coding-tools}
\Option{MRL} &
%\ShortOption{\None} &
\Default{false} &
Enables or disables the use of multiple reference line intra prediction (MRL).
\\
\Option{MIP} &
%\ShortOption{\None} &
\Default{true} &
......@@ -1967,32 +1973,6 @@ If enabled use a fast ME for generalised B Low Delay slices
Enables use of B-Lambda for non-key low-delay pictures
\\
%\Option{TransquantBypassEnable} &
%%\ShortOption{\None} &
%\Default{false} &
%Enables or disables the ability to bypass the transform,
%quantization and filtering stages at CU level.
%This option corresponds to the value of
%transquant_bypass_enabled_flag that is transmitted in the PPS.
%
%See CUTransquantBypassFlagForce for further details.
%\\
%
%\Option{CUTransquantBypassFlagForce} &
%%\ShortOption{\None} &
%\Default{0} &
%Controls the per CU transformation, quantization and filtering
%mode decision.
%This option controls the value of the per CU cu_transquant_bypass_flag.
%\par
%\begin{tabular}{cp{0.45\textwidth}}
% 0 & Bypass is searched on a CU-by-CU basis and will be used if the cost is lower than not bypassing. \\
% 1 & Bypass is forced for all CUs. \\
%\end{tabular}
%
%This option has no effect if TransquantBypassEnable is disabled.
%\\
\Option{PCMEnabledFlag} &
%\ShortOption{\None} &
\Default{false} &
......@@ -3518,6 +3498,32 @@ An array that indicates the elevation range of the i-th recommended viewport reg
\\
\end{OptionTableNoShorthand}
\begin{OptionTableNoShorthand}{Sample Aspect Ratio Information SEI message encoder parameters}{tab:sei-sari}
\Option{SEISampleAspectRatioInfo} &
\Default{false} &
Enables (true) or disables (false) the insertion of Sample Aspect Ratio Information SEI message.
\\
\Option{SEISARICancelFlag} &
\Default{true} &
Indicates that the Sample Aspect Ratio Information SEI message cancels the persistence (true) or follows (false).
\\
\Option{SEISARIPersistenceFlag} &
\Default{false} &
Specifies the persistence of the Sample Aspect Ratio Information SEI message.
\\
\Option{SEISARIAspectRatioIdc} &
\Default{0} &
Specifies aspect ratio IDC as defined in the standard.
\\
\Option{SEISARISarWidth} &
\Default{0} &
Specifies the horizontal size of the sample aspect ratio, if SEISARIAspectRatioIdc is equal to 255.
\\
\Option{SEISARISarHeight} &
\Default{0} &
Specifies the vertical size of the sample aspect ratio, if SEISARIAspectRatioIdc is equal to 255.
\\
\end{OptionTableNoShorthand}
......
......@@ -157,9 +157,9 @@ void EncApp::xInitLibCfg()
m_cEncLib.setNoMtsConstraintFlag ( (m_MTS || m_MTSImplicit) ? false : true );
m_cEncLib.setNoSbtConstraintFlag ( !m_SBT );
m_cEncLib.setNoAffineMotionConstraintFlag ( !m_Affine );
m_cEncLib.setNoGbiConstraintFlag ( !m_GBi );
m_cEncLib.setNoBcwConstraintFlag ( !m_bcw );
m_cEncLib.setNoIbcConstraintFlag ( m_IBCMode ? false : true );
m_cEncLib.setNoMhIntraConstraintFlag ( !m_MHIntra );
m_cEncLib.setNoCiipConstraintFlag ( !m_ciip );
m_cEncLib.setNoFPelMmvdConstraintFlag ( !(m_MMVD && m_allowDisFracMMVD) );
m_cEncLib.setNoTriangleConstraintFlag ( !m_Triangle );
m_cEncLib.setNoLadfConstraintFlag ( !m_LadfEnabed );
......@@ -181,7 +181,7 @@ void EncApp::xInitLibCfg()
m_cEncLib.setNoIdrConstraintFlag ( false ); // Not yet possible to encode bitstream starting with a GDR picture
m_cEncLib.setNoCraConstraintFlag ( m_iDecodingRefreshType != 1 );
m_cEncLib.setNoGdrConstraintFlag ( false ); // Not yet possible to encode GDR using config parameters
m_cEncLib.setNoApsConstraintFlag ( !m_alf && !m_lumaReshapeEnable && m_useScalingListId == SCALING_LIST_OFF);
m_cEncLib.setNoApsConstraintFlag ( !m_alf && !m_lmcsEnabled && m_useScalingListId == SCALING_LIST_OFF);
#endif
//====== Coding Structure ========
......@@ -326,8 +326,8 @@ void EncApp::xInitLibCfg()
#endif
m_cEncLib.setUseCompositeRef ( m_compositeRefEnabled );
m_cEncLib.setUseSMVD ( m_SMVD );
m_cEncLib.setUseGBi ( m_GBi );
m_cEncLib.setUseGBiFast ( m_GBiFast );
m_cEncLib.setUseBcw ( m_bcw );
m_cEncLib.setUseBcwFast ( m_BcwFast );
#if LUMA_ADAPTIVE_DEBLOCKING_FILTER_QP_OFFSET
m_cEncLib.setUseLadf ( m_LadfEnabed );
if ( m_LadfEnabed )
......@@ -340,7 +340,7 @@ void EncApp::xInitLibCfg()
}
}
#endif
m_cEncLib.setUseMHIntra ( m_MHIntra );
m_cEncLib.setUseCiip ( m_ciip );
m_cEncLib.setUseTriangle ( m_Triangle );
m_cEncLib.setUseHashME ( m_HashME );
......@@ -401,6 +401,9 @@ void EncApp::xInitLibCfg()
m_cEncLib.setUseNonLinearAlfLuma ( m_useNonLinearAlfLuma );
m_cEncLib.setUseNonLinearAlfChroma ( m_useNonLinearAlfChroma );
m_cEncLib.setMaxNumAlfAlternativesChroma ( m_maxNumAlfAlternativesChroma );
#if JVET_P2001_SYNTAX_ORDER_MISMATCHES
m_cEncLib.setUseMRL ( m_MRL );
#endif
m_cEncLib.setUseMIP ( m_MIP );
m_cEncLib.setUseFastMIP ( m_useFastMIP );
m_cEncLib.setFastLocalDualTreeMode ( m_fastLocalDualTreeMode );
......@@ -599,6 +602,14 @@ void EncApp::xInitLibCfg()
m_cEncLib.setRwpSEIRwpBottomGuardBandHeight (m_rwpSEIRwpBottomGuardBandHeight);
m_cEncLib.setRwpSEIRwpGuardBandNotUsedForPredFlag (m_rwpSEIRwpGuardBandNotUsedForPredFlag);
m_cEncLib.setRwpSEIRwpGuardBandType (m_rwpSEIRwpGuardBandType);
#endif
#if JVET_P0450_SEI_SARI
m_cEncLib.setSampleAspectRatioInfoSEIEnabled (m_sampleAspectRatioInfoSEIEnabled);
m_cEncLib.setSariCancelFlag (m_sariCancelFlag);
m_cEncLib.setSariPersistenceFlag (m_sariPersistenceFlag);
m_cEncLib.setSariAspectRatioIdc (m_sariAspectRatioIdc);
m_cEncLib.setSariSarWidth (m_sariSarWidth);
m_cEncLib.setSariSarHeight (m_sariSarHeight);
#endif
m_cEncLib.setMCTSEncConstraint ( m_MCTSEncConstraint);
#if HEVC_SEI
......@@ -703,8 +714,10 @@ void EncApp::xInitLibCfg()
m_cEncLib.setCpbSize ( m_RCCpbSize );
m_cEncLib.setInitialCpbFullness ( m_RCInitialCpbFullness );
#endif
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
m_cEncLib.setTransquantBypassEnabledFlag ( m_TransquantBypassEnabledFlag );
m_cEncLib.setCUTransquantBypassFlagForceValue ( m_CUTransquantBypassFlagForce );
#endif
m_cEncLib.setCostMode ( m_costMode );
m_cEncLib.setUseRecalculateQPAccordingToLambda ( m_recalculateQPAccordingToLambda );
m_cEncLib.setDecodingParameterSetEnabled ( m_decodingParameterSetEnabled );
......@@ -755,7 +768,7 @@ void EncApp::xInitLibCfg()
#endif
m_cEncLib.setUseALF ( m_alf );
m_cEncLib.setReshaper ( m_lumaReshapeEnable );
m_cEncLib.setLmcs ( m_lmcsEnabled );
m_cEncLib.setReshapeSignalType ( m_reshapeSignalType );
m_cEncLib.setReshapeIntraCMD ( m_intraCMD );
m_cEncLib.setReshapeCW ( m_reshapeCW );
......
This diff is collapsed.
......@@ -151,9 +151,9 @@ protected:
bool m_bNoMtsConstraintFlag;
bool m_noSbtConstraintFlag;
bool m_bNoAffineMotionConstraintFlag;
bool m_bNoGbiConstraintFlag;
bool m_bNoBcwConstraintFlag;
bool m_noIbcConstraintFlag;
bool m_bNoMhIntraConstraintFlag;
bool m_bNoCiipConstraintFlag;
bool m_noFPelMmvdConstraintFlag;
bool m_bNoTriangleConstraintFlag;
bool m_bNoLadfConstraintFlag;
......@@ -306,8 +306,8 @@ protected:
#endif
bool m_SMVD;
bool m_compositeRefEnabled;
bool m_GBi;
bool m_GBiFast;
bool m_bcw;
bool m_BcwFast;
#if LUMA_ADAPTIVE_DEBLOCKING_FILTER_QP_OFFSET
bool m_LadfEnabed;
int m_LadfNumIntervals;
......@@ -315,7 +315,7 @@ protected:
int m_LadfIntervalLowerBound[MAX_LADF_INTERVALS];
#endif
bool m_MHIntra;
bool m_ciip;
bool m_Triangle;
bool m_HashME;
bool m_allowDisFracMMVD;
......@@ -350,7 +350,7 @@ protected:
unsigned m_numHorVirtualBoundaries;
std::vector<unsigned> m_virtualBoundariesPosX;
std::vector<unsigned> m_virtualBoundariesPosY;
bool m_lumaReshapeEnable;
bool m_lmcsEnabled;
uint32_t m_reshapeSignalType;
uint32_t m_intraCMD;
ReshapeCW m_reshapeCW;
......@@ -376,6 +376,9 @@ protected:
bool m_useNonLinearAlfLuma;
bool m_useNonLinearAlfChroma;
unsigned m_maxNumAlfAlternativesChroma;
#if JVET_P2001_SYNTAX_ORDER_MISMATCHES
bool m_MRL;
#endif
bool m_MIP;
bool m_useFastMIP;
int m_fastLocalDualTreeMode;
......@@ -621,6 +624,15 @@ protected:
std::vector<uint8_t> m_rwpSEIRwpGuardBandType;
#endif
#if JVET_P0450_SEI_SARI
bool m_sampleAspectRatioInfoSEIEnabled;
bool m_sariCancelFlag;
bool m_sariPersistenceFlag;
int m_sariAspectRatioIdc;
int m_sariSarWidth;
int m_sariSarHeight;
#endif
bool m_MCTSEncConstraint;
// weighted prediction
......@@ -674,8 +686,10 @@ protected:
#if JVET_P0365_SCALING_MATRIX_LFNST
bool m_disableScalingMatrixForLfnstBlks;
#endif
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
bool m_TransquantBypassEnabledFlag; ///< transquant_bypass_enabled_flag setting in PPS.
bool m_CUTransquantBypassFlagForce; ///< if transquant_bypass_enabled_flag, then, if true, all CU transquant bypass flags will be set to true.
#endif
CostMode m_costMode; ///< Cost mode to use
bool m_recalculateQPAccordingToLambda; ///< recalculate QP value according to the lambda value
......
......@@ -100,14 +100,14 @@ void applyBiPROFCore (Pel* dst, int dstStride, const Pel* src0, const Pel* src1,
#endif
const int clipbd = clpRng.bd;
const int shiftNum = std::max<int>(2, (IF_INTERNAL_PREC - clipbd)) + g_GbiLog2WeightBase;
const int offset = (1 << (shiftNum - 1)) + (IF_INTERNAL_OFFS << g_GbiLog2WeightBase);
const int shiftNum = std::max<int>(2, (IF_INTERNAL_PREC - clipbd)) + g_BcwLog2WeightBase;
const int offset = (1 << (shiftNum - 1)) + (IF_INTERNAL_OFFS << g_BcwLog2WeightBase);
#if JVET_P0154_PROF_SAMPLE_OFFSET_CLIPPING
const int dILimit = 1 << std::max<int>(clpRng.bd + 1, 13);
#endif
const int8_t w1 = g_GbiWeightBase - w0;
const int8_t w1 = g_BcwWeightBase - w0;
for (int h = 0; h < height; h++)
{
......@@ -354,12 +354,12 @@ void calcBlkGradientCore(int sx, int sy, int *arraysGx2, int *arraysGxGy
}
}
#if ENABLE_SIMD_OPT_GBI
void removeWeightHighFreq(int16_t* dst, int dstStride, const int16_t* src, int srcStride, int width, int height, int shift, int gbiWeight)
#if ENABLE_SIMD_OPT_BCW
void removeWeightHighFreq(int16_t* dst, int dstStride, const int16_t* src, int srcStride, int width, int height, int shift, int bcwWeight)
{
int normalizer = ((1 << 16) + (gbiWeight > 0 ? (gbiWeight >> 1) : -(gbiWeight >> 1))) / gbiWeight;
int weight0 = normalizer << g_GbiLog2WeightBase;
int weight1 = (g_GbiWeightBase - gbiWeight)*normalizer;
int normalizer = ((1 << 16) + (bcwWeight > 0 ? (bcwWeight >> 1) : -(bcwWeight >> 1))) / bcwWeight;
int weight0 = normalizer << g_BcwLog2WeightBase;
int weight1 = (g_BcwWeightBase - bcwWeight)*normalizer;
#define REM_HF_INC \
src += srcStride; \
dst += dstStride; \
......@@ -436,7 +436,7 @@ PelBufferOps::PelBufferOps()
copyBuffer = copyBufferCore;
padding = paddingCore;
#if ENABLE_SIMD_OPT_GBI
#if ENABLE_SIMD_OPT_BCW
removeWeightHighFreq8 = removeWeightHighFreq;
removeWeightHighFreq4 = removeWeightHighFreq;
removeHighFreq8 = removeHighFreq;
......@@ -489,11 +489,11 @@ void paddingCore(Pel *ptr, int stride, int width, int height, int padSize)
}
}
template<>
void AreaBuf<Pel>::addWeightedAvg(const AreaBuf<const Pel> &other1, const AreaBuf<const Pel> &other2, const ClpRng& clpRng, const int8_t gbiIdx)
void AreaBuf<Pel>::addWeightedAvg(const AreaBuf<const Pel> &other1, const AreaBuf<const Pel> &other2, const ClpRng& clpRng, const int8_t bcwIdx)
{
const int8_t w0 = getGbiWeight(gbiIdx, REF_PIC_LIST_0);
const int8_t w1 = getGbiWeight(gbiIdx, REF_PIC_LIST_1);
const int8_t log2WeightBase = g_GbiLog2WeightBase;
const int8_t w0 = getBcwWeight(bcwIdx, REF_PIC_LIST_0);
const int8_t w1 = getBcwWeight(bcwIdx, REF_PIC_LIST_1);
const int8_t log2WeightBase = g_BcwLog2WeightBase;
const Pel* src0 = other1.buf;
const Pel* src2 = other2.buf;
......
......@@ -74,9 +74,9 @@ struct PelBufferOps
void(*calcBlkGradient)(int sx, int sy, int *arraysGx2, int *arraysGxGy, int *arraysGxdI, int *arraysGy2, int *arraysGydI, int &sGx2, int &sGy2, int &sGxGy, int &sGxdI, int &sGydI, int width, int height, int unitSize);
void(*copyBuffer)(Pel *src, int srcStride, Pel *dst, int dstStride, int width, int height);
void(*padding)(Pel *dst, int stride, int width, int height, int padSize);
#if ENABLE_SIMD_OPT_GBI
void ( *removeWeightHighFreq8) ( Pel* src0, int src0Stride, const Pel* src1, int src1Stride, int width, int height, int shift, int gbiWeight);
void ( *removeWeightHighFreq4) ( Pel* src0, int src0Stride, const Pel* src1, int src1Stride, int width, int height, int shift, int gbiWeight);
#if ENABLE_SIMD_OPT_BCW
void ( *removeWeightHighFreq8) ( Pel* src0, int src0Stride, const Pel* src1, int src1Stride, int width, int height, int shift, int bcwWeight);
void ( *removeWeightHighFreq4) ( Pel* src0, int src0Stride, const Pel* src1, int src1Stride, int width, int height, int shift, int bcwWeight);
void ( *removeHighFreq8) ( Pel* src0, int src0Stride, const Pel* src1, int src1Stride, int width, int height);
void ( *removeHighFreq4) ( Pel* src0, int src0Stride, const Pel* src1, int src1Stride, int width, int height);
#endif
......@@ -85,7 +85,7 @@ struct PelBufferOps
void (*applyPROF) (Pel* dst, int dstStride, const Pel* src, int srcStride, int width, int height, const Pel* gradX, const Pel* gradY, int gradStride, const int* dMvX, const int* dMvY, int dMvStride, const bool& bi, int shiftNum, Pel offset, const ClpRng& clpRng);
#else
void (*applyPROF) (Pel* dst, int dstStride, const Pel* src, int srcStride, int width, int height, const Pel* gradX, const Pel* gradY, int gradStride, const int* dMvX, const int* dMvY, int dMvStride, int shiftNum, Pel offset, const ClpRng& clpRng);
void (*applyBiPROF[2]) (Pel* dst, int dstStride, const Pel* src0, const Pel* src1, int srcStride, int width, int height, const Pel* gradX0, const Pel* gradY0, const Pel* gradX1, const Pel* gradY1, int gradStride, const int* dMvX0, const int* dMvY0, const int* dMvX1, const int* dMvY1, int dMvStride, const int8_t gbiWeightL0, const ClpRng& clpRng);
void (*applyBiPROF[2]) (Pel* dst, int dstStride, const Pel* src0, const Pel* src1, int srcStride, int width, int height, const Pel* gradX0, const Pel* gradY0, const Pel* gradX1, const Pel* gradY1, int gradStride, const int* dMvX0, const int* dMvY0, const int* dMvX1, const int* dMvY1, int dMvStride, const int8_t bcwWeightL0, const ClpRng& clpRng);
#endif
void (*roundIntVector) (int* v, int size, unsigned int nShift, const int dmvLimit);
};
......@@ -128,8 +128,8 @@ struct AreaBuf : public Size
#if JVET_P1038_ALF_PAD_RASTER_SLICE
void padBorderPel ( unsigned marginX, unsigned marginY, int dir );
#endif
void addWeightedAvg ( const AreaBuf<const T> &other1, const AreaBuf<const T> &other2, const ClpRng& clpRng, const int8_t gbiIdx);
void removeWeightHighFreq ( const AreaBuf<T>& other, const bool bClip, const ClpRng& clpRng, const int8_t iGbiWeight);
void addWeightedAvg ( const AreaBuf<const T> &other1, const AreaBuf<const T> &other2, const ClpRng& clpRng, const int8_t bcwIdx);
void removeWeightHighFreq ( const AreaBuf<T>& other, const bool bClip, const ClpRng& clpRng, const int8_t iBcwWeight);
void addAvg ( const AreaBuf<const T> &other1, const AreaBuf<const T> &other2, const ClpRng& clpRng );
void removeHighFreq ( const AreaBuf<T>& other, const bool bClip, const ClpRng& clpRng);
void updateHistogram ( std::vector<int32_t>& hist ) const;
......@@ -423,10 +423,10 @@ template<>
void AreaBuf<Pel>::toLast( const ClpRng& clpRng );
template<typename T>
void AreaBuf<T>::removeWeightHighFreq(const AreaBuf<T>& other, const bool bClip, const ClpRng& clpRng, const int8_t gbiWeight)
void AreaBuf<T>::removeWeightHighFreq(const AreaBuf<T>& other, const bool bClip, const ClpRng& clpRng, const int8_t bcwWeight)
{
const int8_t gbiWeightOther = g_GbiWeightBase - gbiWeight;
const int8_t log2WeightBase = g_GbiLog2WeightBase;
const int8_t bcwWeightOther = g_BcwWeightBase - bcwWeight;
const int8_t log2WeightBase = g_BcwLog2WeightBase;
const Pel* src = other.buf;
const int srcStride = other.stride;
......@@ -434,22 +434,22 @@ void AreaBuf<T>::removeWeightHighFreq(const AreaBuf<T>& other, const bool bClip,
Pel* dst = buf;
const int dstStride = stride;
#if ENABLE_SIMD_OPT_GBI
#if ENABLE_SIMD_OPT_BCW
if(!bClip)
{
if(!(width & 7))
g_pelBufOP.removeWeightHighFreq8(dst, dstStride, src, srcStride, width, height, 16, gbiWeight);
g_pelBufOP.removeWeightHighFreq8(dst, dstStride, src, srcStride, width, height, 16, bcwWeight);
else if(!(width & 3))
g_pelBufOP.removeWeightHighFreq4(dst, dstStride, src, srcStride, width, height, 16, gbiWeight);
g_pelBufOP.removeWeightHighFreq4(dst, dstStride, src, srcStride, width, height, 16, bcwWeight);
else
CHECK(true, "Not supported");
}
else
{
#endif
int normalizer = ((1 << 16) + (gbiWeight > 0 ? (gbiWeight >> 1) : -(gbiWeight >> 1))) / gbiWeight;
int normalizer = ((1 << 16) + (bcwWeight > 0 ? (bcwWeight >> 1) : -(bcwWeight >> 1))) / bcwWeight;
int weight0 = normalizer << log2WeightBase;
int weight1 = gbiWeightOther * normalizer;
int weight1 = bcwWeightOther * normalizer;
#define REM_HF_INC \
src += srcStride; \
dst += dstStride; \
......@@ -469,7 +469,7 @@ void AreaBuf<T>::removeWeightHighFreq(const AreaBuf<T>& other, const bool bClip,
#undef REM_HF_INC
#undef REM_HF_OP
#undef REM_HF_OP_CLIP
#if ENABLE_SIMD_OPT_GBI
#if ENABLE_SIMD_OPT_BCW
}
#endif
}
......@@ -483,7 +483,7 @@ void AreaBuf<T>::removeHighFreq( const AreaBuf<T>& other, const bool bClip, cons
T* dst = buf;
const int dstStride = stride;
#if ENABLE_SIMD_OPT_GBI
#if ENABLE_SIMD_OPT_BCW
if (!bClip)
{
if(!(width & 7))
......@@ -517,7 +517,7 @@ void AreaBuf<T>::removeHighFreq( const AreaBuf<T>& other, const bool bClip, cons
#undef REM_HF_OP
#undef REM_HF_OP_CLIP
#if ENABLE_SIMD_OPT_GBI
#if ENABLE_SIMD_OPT_BCW
}
#endif
}
......@@ -788,7 +788,7 @@ struct UnitBuf
void copyClip ( const UnitBuf<const T> &src, const ClpRngs& clpRngs );
#endif
void subtract ( const UnitBuf<const T> &other );
void addWeightedAvg ( const UnitBuf<const T> &other1, const UnitBuf<const T> &other2, const ClpRngs& clpRngs, const uint8_t gbiIdx = GBI_DEFAULT, const bool chromaOnly = false, const bool lumaOnly = false);
void addWeightedAvg ( const UnitBuf<const T> &other1, const UnitBuf<const T> &other2, const ClpRngs& clpRngs, const uint8_t bcwIdx = BCW_DEFAULT, const bool chromaOnly = false, const bool lumaOnly = false);
void addAvg ( const UnitBuf<const T> &other1, const UnitBuf<const T> &other2, const ClpRngs& clpRngs, const bool chromaOnly = false, const bool lumaOnly = false);
void extendSingleBorderPel();
#if JVET_O0549_ENCODER_ONLY_FILTER
......@@ -799,7 +799,7 @@ struct UnitBuf
#endif
void extendBorderPel ( unsigned margin );
void removeHighFreq ( const UnitBuf<T>& other, const bool bClip, const ClpRngs& clpRngs
, const int8_t gbiWeight = g_GbiWeights[GBI_DEFAULT]
, const int8_t bcwWeight = g_BcwWeights[BCW_DEFAULT]
);
UnitBuf< T> subBuf (const UnitArea& subArea);
......@@ -895,7 +895,7 @@ void UnitBuf<T>::reconstruct(const UnitBuf<const T> &pred, const UnitBuf<const T
}
template<typename T>
void UnitBuf<T>::addWeightedAvg(const UnitBuf<const T> &other1, const UnitBuf<const T> &other2, const ClpRngs& clpRngs, const uint8_t gbiIdx /* = GBI_DEFAULT */, const bool chromaOnly /* = false */, const bool lumaOnly /* = false */)
void UnitBuf<T>::addWeightedAvg(const UnitBuf<const T> &other1, const UnitBuf<const T> &other2, const ClpRngs& clpRngs, const uint8_t bcwIdx /* = BCW_DEFAULT */, const bool chromaOnly /* = false */, const bool lumaOnly /* = false */)
{
const size_t istart = chromaOnly ? 1 : 0;
const size_t iend = lumaOnly ? 1 : bufs.size();
......@@ -904,7 +904,7 @@ void UnitBuf<T>::addWeightedAvg(const UnitBuf<const T> &other1, const UnitBuf<co
for(size_t i = istart; i < iend; i++)
{
bufs[i].addWeightedAvg(other1.bufs[i], other2.bufs[i], clpRngs.comp[i], gbiIdx);
bufs[i].addWeightedAvg(other1.bufs[i], other2.bufs[i], clpRngs.comp[i], bcwIdx);
}
}
......@@ -975,12 +975,12 @@ void UnitBuf<T>::extendBorderPel( unsigned margin )
template<typename T>
void UnitBuf<T>::removeHighFreq( const UnitBuf<T>& other, const bool bClip, const ClpRngs& clpRngs
, const int8_t gbiWeight
, const int8_t bcwWeight
)
{
if(gbiWeight != g_GbiWeights[GBI_DEFAULT])
if(bcwWeight != g_BcwWeights[BCW_DEFAULT])
{
bufs[0].removeWeightHighFreq(other.bufs[0], bClip, clpRngs.comp[0], gbiWeight);
bufs[0].removeWeightHighFreq(other.bufs[0], bClip, clpRngs.comp[0], bcwWeight);
return;
}
bufs[0].removeHighFreq(other.bufs[0], bClip, clpRngs.comp[0]);
......
......@@ -109,7 +109,7 @@ enum CodingStatisticsType
STATS__CABAC_BITS__OTHER,
STATS__CABAC_BITS__INVALID,
STATS__CABAC_BITS__IMV_FLAG,
STATS__CABAC_BITS__GBI_IDX,
STATS__CABAC_BITS__BCW_IDX,
STATS__CABAC_BITS__SBT_MODE,
STATS__CABAC_BITS__MH_INTRA_FLAG,
STATS__CABAC_BITS__TRIANGLE_FLAG,
......@@ -201,7 +201,7 @@ static inline const char* getName(CodingStatisticsType name)
"CABAC_BITS__OTHER",
"CABAC_BITS__INVALID",
"CABAC_BITS__IMV_FLAG",
"CABAC_BITS__GBI_IDX",
"CABAC_BITS__BCW_IDX",
"CABAC_BITS__SBT_MODE",
"CABAC_BITS__MH_INTRA_FLAG",
"CABAC_BITS__TRIANGLE_FLAG",
......
......@@ -1073,7 +1073,11 @@ void CodingStructure::initSubStructure( CodingStructure& subStruct, const Channe
subStruct.treeType = treeType;
subStruct.modeType = modeType;
#if JVET_P2001_REMOVE_TRANSQUANT_BYPASS
subStruct.initStructData( currQP[_chType] );
#else
subStruct.initStructData( currQP[_chType], isLossless );
#endif
if( isTuEnc )
{
......@@ -1366,7 +1370,11 @@ void CodingStructure::copyStructure( const CodingStructure& other, const Channel
}
}
#if JVET_P2001_REMOVE_TRANSQUANT_BYPASS
void CodingStructure::initStructData( const int &QP, const bool &skipMotBuf )
#else
void CodingStructure::initStructData( const int &QP, const bool &_isLosses, const bool &skipMotBuf )
#endif
{
clearPUs();
clearTUs();
......@@ -1375,7 +1383,9 @@ void CodingStructure::initStructData( const int &QP, const bool &_isLosses, cons
if( QP < MAX_INT )
{
currQP[0] = currQP[1] = QP;
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
isLossless = _isLosses;
#endif
}
if (!skipMotBuf && (!parent || ((!slice->isIntra() || slice->getSPS()->getIBCFlag()) && !m_isTuEnc)))
......
......@@ -89,7 +89,9 @@ public:
Position sharedBndPos;
Size sharedBndSize;
#endif
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
bool isLossless;
#endif
const SPS *sps;
const PPS *pps;
#if JVET_P1006_PICTURE_HEADER
......@@ -174,7 +176,11 @@ public:
TreeType treeType; //because partitioner can not go deep to tu and cu coding (e.g., addCU()), need another variable for indicating treeType
ModeType modeType;
#if JVET_P2001_REMOVE_TRANSQUANT_BYPASS
void initStructData (const int &QP = MAX_INT, const bool &skipMotBuf = false);
#else
void initStructData (const int &QP = MAX_INT, const bool &_isLosses = false, const bool &skipMotBuf = false);
#endif
void initSubStructure( CodingStructure& cs, const ChannelType chType, const UnitArea &subArea, const bool &isTuEnc);
void copyStructure (const CodingStructure& cs, const ChannelType chType, const bool copyTUs = false, const bool copyRecoBuffer = false);
......
......@@ -364,9 +364,9 @@ static const int BIO_TEMP_BUFFER_SIZE = (MAX_CU_SIZE
static const int PROF_BORDER_EXT_W = 1;
static const int PROF_BORDER_EXT_H = 1;
static const int GBI_NUM = 5; ///< the number of weight options
static const int GBI_DEFAULT = ((uint8_t)(GBI_NUM >> 1)); ///< Default weighting index representing for w=0.5
static const int GBI_SIZE_CONSTRAINT = 256; ///< disabling GBi if cu size is smaller than 256
static const int BCW_NUM = 5; ///< the number of weight options
static const int BCW_DEFAULT = ((uint8_t)(BCW_NUM >> 1)); ///< Default weighting index representing for w=0.5
static const int BCW_SIZE_CONSTRAINT = 256; ///< disabling Bcw if cu size is smaller than 256
static const int MAX_NUM_HMVP_CANDS = (MRG_MAX_NUM_CANDS-1); ///< maximum number of HMVP candidates to be stored and used in merge list
static const int MAX_NUM_HMVP_AVMPCANDS = 4; ///< maximum number of HMVP candidates to be used in AMVP list
......
......@@ -68,10 +68,18 @@ CoeffCodingContext::CoeffCodingContext( const TransformUnit& tu, ComponentID com
, m_lastOffsetY (0)
, m_lastShiftX (0)
, m_lastShiftY (0)
#if JVET_P2001_REMOVE_TRANSQUANT_BYPASS
#if JVET_P0058_CHROMA_TS
, m_TrafoBypass (tu.cs->sps->getSpsRangeExtension().getTransformSkipContextEnabledFlag() && (tu.mtsIdx[m_compID] == MTS_SKIP))
#else
, m_TrafoBypass (tu.cs->sps->getSpsRangeExtension().getTransformSkipContextEnabledFlag() && (tu.mtsIdx==MTS_SKIP))
#endif
#else
#if JVET_P0058_CHROMA_TS
, m_TrafoBypass (tu.cs->sps->getSpsRangeExtension().getTransformSkipContextEnabledFlag() && (tu.cu->transQuantBypass || tu.mtsIdx[m_compID] == MTS_SKIP))
#else
, m_TrafoBypass (tu.cs->sps->getSpsRangeExtension().getTransformSkipContextEnabledFlag() && (tu.cu->transQuantBypass || tu.mtsIdx==MTS_SKIP))
#endif
#endif
, m_scanPosLast (-1)
, m_subSetId (-1)
......@@ -332,7 +340,7 @@ unsigned DeriveCtx::CtxIBCFlag(const CodingUnit& cu)
void MergeCtx::setMergeInfo( PredictionUnit& pu, int candIdx )
{
CHECK( candIdx >= numValidMergeCand, "Merge candidate does not exist" );
pu.regularMergeFlag = !(pu.mhIntraFlag || pu.cu->triangle);
pu.regularMergeFlag = !(pu.ciipFlag || pu.cu->triangle);
pu.mergeFlag = true;
pu.mmvdMergeFlag = false;
pu.interDir = interDirNeighbours[candIdx];
......@@ -355,7 +363,7 @@ void MergeCtx::setMergeInfo( PredictionUnit& pu, int candIdx )
pu.bv.changePrecision(MV_PRECISION_INTERNAL, MV_PRECISION_INT); // used for only integer resolution
pu.cu->imv = pu.cu->imv == IMV_HPEL ? 0 : pu.cu->imv;
}
pu.cu->GBiIdx = ( interDirNeighbours[candIdx] == 3 ) ? GBiIdx[candIdx] : GBI_DEFAULT;
pu.cu->BcwIdx = ( interDirNeighbours[candIdx] == 3 ) ? BcwIdx[candIdx] : BCW_DEFAULT;
PU::restrictBiPredMergeCandsOne(pu);
pu.mmvdEncOptMode = 0;
......@@ -525,7 +533,7 @@ void MergeCtx::setMmvdMergeCandiInfo(PredictionUnit& pu, int candIdx)
pu.mvpNum[REF_PIC_LIST_1] = NOT_VALID;
pu.cu->imv = mmvdUseAltHpelIf[fPosBaseIdx] ? IMV_HPEL : 0;
pu.cu->GBiIdx = (interDirNeighbours[fPosBaseIdx] == 3) ? GBiIdx[fPosBaseIdx] : GBI_DEFAULT;
pu.cu->BcwIdx = (interDirNeighbours[fPosBaseIdx] == 3) ? BcwIdx[fPosBaseIdx] : BCW_DEFAULT;
for (int refList = 0; refList < 2; refList++)
{
......
......@@ -484,7 +484,7 @@ public:
~MergeCtx() {}
public:
MvField mvFieldNeighbours [ MRG_MAX_NUM_CANDS << 1 ]; // double length for mv of both lists
uint8_t GBiIdx [ MRG_MAX_NUM_CANDS ];
uint8_t BcwIdx [ MRG_MAX_NUM_CANDS ];
unsigned char interDirNeighbours[ MRG_MAX_NUM_CANDS ];
MergeType mrgTypeNeighbours [ MRG_MAX_NUM_CANDS ];
int numValidMergeCand;
......@@ -508,7 +508,7 @@ public:
MvField mvFieldNeighbours[AFFINE_MRG_MAX_NUM_CANDS << 1][3]; // double length for mv of both lists
unsigned char interDirNeighbours[AFFINE_MRG_MAX_NUM_CANDS];
EAffineModel affineType[AFFINE_MRG_MAX_NUM_CANDS];
uint8_t GBiIdx[AFFINE_MRG_MAX_NUM_CANDS];
uint8_t BcwIdx[AFFINE_MRG_MAX_NUM_CANDS];
int numValidMergeCand;
int maxNumMergeCand;
......
......@@ -419,7 +419,7 @@ const CtxSet ContextSetCfg::AffMergeIdx = ContextSetCfg::addCtxSet
{ 0, },
});
const CtxSet ContextSetCfg::GBiIdx = ContextSetCfg::addCtxSet
const CtxSet ContextSetCfg::BcwIdx = ContextSetCfg::addCtxSet
({
{ 5, },
{ 4, },
......@@ -685,6 +685,7 @@ const CtxSet ContextSetCfg::SaoTypeIdx = ContextSetCfg::addCtxSet
{ 0, },
});
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
const CtxSet ContextSetCfg::TransquantBypassFlag = ContextSetCfg::addCtxSet
({
{ CNU, },
......@@ -693,6 +694,7 @@ const CtxSet ContextSetCfg::TransquantBypassFlag = ContextSetCfg::addCtxSet
{ DWS, },
});
#endif
const CtxSet ContextSetCfg::LFNSTIdx = ContextSetCfg::addCtxSet
({
#if JVET_P0350_LFNST_IDX_CTX
......@@ -893,7 +895,7 @@ const CtxSet ContextSetCfg::AlfUseTemporalFilt = ContextSetCfg::addCtxSet
{ 0, },
});
const CtxSet ContextSetCfg::MHIntraFlag = ContextSetCfg::addCtxSet
const CtxSet ContextSetCfg::CiipFlag = ContextSetCfg::addCtxSet
({
{ 50, },
{ 50, },
......@@ -1202,7 +1204,7 @@ const CtxSet ContextSetCfg::AffMergeIdx = ContextSetCfg::addCtxSet
{ 0, },
});
const CtxSet ContextSetCfg::GBiIdx = ContextSetCfg::addCtxSet
const CtxSet ContextSetCfg::BcwIdx = ContextSetCfg::addCtxSet
({
{ 20, },
{ 5, },
......@@ -1468,6 +1470,7 @@ const CtxSet ContextSetCfg::SaoTypeIdx = ContextSetCfg::addCtxSet
{ 0, },
});
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
const CtxSet ContextSetCfg::TransquantBypassFlag = ContextSetCfg::addCtxSet
({
{ CNU, },
......@@ -1476,6 +1479,7 @@ const CtxSet ContextSetCfg::TransquantBypassFlag = ContextSetCfg::addCtxSet
{ DWS, },
});
#endif
const CtxSet ContextSetCfg::LFNSTIdx = ContextSetCfg::addCtxSet
({
#if JVET_P0350_LFNST_IDX_CTX
......@@ -1676,7 +1680,7 @@ const CtxSet ContextSetCfg::AlfUseTemporalFilt = ContextSetCfg::addCtxSet
{ 0, },
});
const CtxSet ContextSetCfg::MHIntraFlag = ContextSetCfg::addCtxSet
const CtxSet ContextSetCfg::CiipFlag = ContextSetCfg::addCtxSet
({
{ 58, },
{ 58, },
......
......@@ -247,7 +247,9 @@ public:
static const CtxSet SaoTypeIdx;
static const CtxSet TransformSkipFlag;
static const CtxSet MTSIdx;
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
static const CtxSet TransquantBypassFlag;
#endif
static const CtxSet LFNSTIdx;
static const CtxSet PLTFlag;
static const CtxSet RotationFlag;
......@@ -264,14 +266,14 @@ public:
static const CtxSet ChromaQpAdjFlag;
static const CtxSet ChromaQpAdjIdc;
static const CtxSet ImvFlag;
static const CtxSet GBiIdx;
static const CtxSet BcwIdx;
static const CtxSet ctbAlfFlag;
static const CtxSet ctbAlfAlternative;
#if !JVET_P0162_REMOVE_ALF_CTB_FIRST_USE_APS_FLAG
static const CtxSet AlfUseLatestFilt;
#endif
static const CtxSet AlfUseTemporalFilt;
static const CtxSet MHIntraFlag;
static const CtxSet CiipFlag;
static const CtxSet SmvdFlag;
static const CtxSet IBCFlag;
static const CtxSet ISPMode;
......
......@@ -1495,10 +1495,18 @@ namespace DQIntern
bool zeroOut = false;
bool zeroOutforThres = false;
int effWidth = tuPars.m_width, effHeight = tuPars.m_height;
#if JVET_P2001_REMOVE_TRANSQUANT_BYPASS
#if JVET_P0058_CHROMA_TS
if( ( tu.mtsIdx[compID] > MTS_SKIP || (tu.cs->sps->getUseMTS() && tu.cu->sbtInfo != 0 && tuPars.m_height <= 32 && tuPars.m_width <= 32)) && compID == COMPONENT_Y)
#else
if( ( tu.mtsIdx > MTS_SKIP || ( tu.cs->sps->getUseMTS() && tu.cu->sbtInfo != 0 && tuPars.m_height <= 32 && tuPars.m_width <= 32 ) ) && compID == COMPONENT_Y )
#endif
#else
#if JVET_P0058_CHROMA_TS
if( ( tu.mtsIdx[compID] > MTS_SKIP || (tu.cs->sps->getUseMTS() && tu.cu->sbtInfo != 0 && tuPars.m_height <= 32 && tuPars.m_width <= 32)) && !tu.cu->transQuantBypass && compID == COMPONENT_Y)
#else
if( ( tu.mtsIdx > MTS_SKIP || ( tu.cs->sps->getUseMTS() && tu.cu->sbtInfo != 0 && tuPars.m_height <= 32 && tuPars.m_width <= 32 ) ) && !tu.cu->transQuantBypass && compID == COMPONENT_Y )
#endif
#endif
{
effHeight = (tuPars.m_height == 32) ? 16 : tuPars.m_height;
......
......@@ -424,7 +424,7 @@ void InterPrediction::xSubPuBio(PredictionUnit& pu, PelUnitBuf& predBuf, const R
subPu.mmvdMergeFlag = pu.mmvdMergeFlag;
subPu.mmvdEncOptMode = pu.mmvdEncOptMode;
subPu.mergeFlag = pu.mergeFlag;
subPu.mhIntraFlag = pu.mhIntraFlag;
subPu.ciipFlag = pu.ciipFlag;
subPu.mvRefine = pu.mvRefine;
subPu.refIdx[0] = pu.refIdx[0];
subPu.refIdx[1] = pu.refIdx[1];
......@@ -493,7 +493,10 @@ void InterPrediction::xPredInterUni(const PredictionUnit& pu, const RefPicList&
{
if( pu.cu->slice->getScalingRatio( eRefPicList, iRefIdx ) == SCALE_1X )
{
clipMv( mv[0], pu.cu->lumaPos(), pu.cu->lumaSize(), sps, *pu.cs->pps );
if( !sps.getWrapAroundEnabledFlag() )
{
clipMv( mv[0], pu.cu->lumaPos(), pu.cu->lumaSize(), sps, *pu.cs->pps );
}
}
}
......@@ -583,7 +586,7 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred, Pe
}
}
if (bioApplied && pu.mhIntraFlag)
if (bioApplied && pu.ciipFlag)
bioApplied = false;
if (bioApplied && pu.cu->smvdMode)
......@@ -591,7 +594,7 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred, Pe
bioApplied = false;
}
if (pu.cu->cs->sps->getUseGBi() && bioApplied && pu.cu->GBiIdx != GBI_DEFAULT)
if (pu.cu->cs->sps->getUseBcw() && bioApplied && pu.cu->BcwIdx != BCW_DEFAULT)
{
bioApplied = false;
}
......@@ -685,7 +688,7 @@ void InterPrediction::xPredInterBi(PredictionUnit& pu, PelUnitBuf &pcYuvPred, Pe
const bool lumaOnly = luma && !chroma;
const bool chromaOnly = !luma && chroma;
#endif
if( !pu.cu->triangle && (!dmvrApplied) && (!bioApplied) && pps.getWPBiPred() && slice.getSliceType() == B_SLICE && pu.cu->GBiIdx==GBI_DEFAULT)
if( !pu.cu->triangle && (!dmvrApplied) && (!bioApplied) && pps.getWPBiPred() && slice.getSliceType() == B_SLICE && pu.cu->BcwIdx==BCW_DEFAULT)
{
#if JVET_P0445_SUBBLOCK_MERGE_ENC_SPEEDUP
xWeightedPredictionBi( pu, srcPred0, srcPred1, pcYuvPred, m_maxCompIDToPred, lumaOnly, chromaOnly );
......@@ -1529,18 +1532,18 @@ void InterPrediction::xWeightedAverage(const PredictionUnit& pu, const CPelUnitB
#endif
{
xApplyBiPROF(pu, pcYuvSrc0.bufs[COMPONENT_Y], pcYuvSrc1.bufs[COMPONENT_Y], pcYuvDst.bufs[COMPONENT_Y], clpRngs.comp[COMPONENT_Y]);
pcYuvDst.addWeightedAvg(pcYuvSrc0, pcYuvSrc1, clpRngs, pu.cu->GBiIdx, true);
pcYuvDst.addWeightedAvg(pcYuvSrc0, pcYuvSrc1, clpRngs, pu.cu->BcwIdx, true);
CHECK(yuvDstTmp, "yuvDstTmp is disallowed with PROF");
return;
}
#endif
if( pu.cu->GBiIdx != GBI_DEFAULT && (yuvDstTmp || !pu.mhIntraFlag) )
if( pu.cu->BcwIdx != BCW_DEFAULT && (yuvDstTmp || !pu.ciipFlag) )
{
CHECK(bioApplied, "GBi is disallowed with BIO");
CHECK(bioApplied, "Bcw is disallowed with BIO");
#if JVET_P0445_SUBBLOCK_MERGE_ENC_SPEEDUP
pcYuvDst.addWeightedAvg(pcYuvSrc0, pcYuvSrc1, clpRngs, pu.cu->GBiIdx, chromaOnly, lumaOnly);
pcYuvDst.addWeightedAvg(pcYuvSrc0, pcYuvSrc1, clpRngs, pu.cu->BcwIdx, chromaOnly, lumaOnly);
#else
pcYuvDst.addWeightedAvg(pcYuvSrc0, pcYuvSrc1, clpRngs, pu.cu->GBiIdx);
pcYuvDst.addWeightedAvg(pcYuvSrc0, pcYuvSrc1, clpRngs, pu.cu->BcwIdx);
#endif
if (yuvDstTmp)
#if JVET_P0445_SUBBLOCK_MERGE_ENC_SPEEDUP
......@@ -1799,11 +1802,11 @@ void InterPrediction::xApplyBiPROF(const PredictionUnit &pu, const CPelBuf& pcYu
Pel* dstY = pcYuvDst.bufAt(0, 0);
if(m_applyPROF[0] && m_applyPROF[1])
g_pelBufOP.applyBiPROF[1](dstY, pcYuvDst.stride, srcY0, srcY1, pcYuvSrc0.stride, width, height, gX0, gY0, gX1, gY1, gradXExt0.stride, dMvX0, dMvY0, dMvX1, dMvY1, blockWidth, getGbiWeight(pu.cu->GBiIdx, REF_PIC_LIST_0), clpRng);
g_pelBufOP.applyBiPROF[1](dstY, pcYuvDst.stride, srcY0, srcY1, pcYuvSrc0.stride, width, height, gX0, gY0, gX1, gY1, gradXExt0.stride, dMvX0, dMvY0, dMvX1, dMvY1, blockWidth, getBcwWeight(pu.cu->BcwIdx, REF_PIC_LIST_0), clpRng);
else if (m_applyPROF[0])
g_pelBufOP.applyBiPROF[0](dstY, pcYuvDst.stride, srcY0, srcY1, pcYuvSrc0.stride, width, height, gX0, gY0, gX1, gY1, gradXExt0.stride, dMvX0, dMvY0, dMvX1, dMvY1, blockWidth, getGbiWeight(pu.cu->GBiIdx, REF_PIC_LIST_0), clpRng);
g_pelBufOP.applyBiPROF[0](dstY, pcYuvDst.stride, srcY0, srcY1, pcYuvSrc0.stride, width, height, gX0, gY0, gX1, gY1, gradXExt0.stride, dMvX0, dMvY0, dMvX1, dMvY1, blockWidth, getBcwWeight(pu.cu->BcwIdx, REF_PIC_LIST_0), clpRng);
else
g_pelBufOP.applyBiPROF[0](dstY, pcYuvDst.stride, srcY1, srcY0, pcYuvSrc0.stride, width, height, gX1, gY1, gX0, gY0, gradXExt0.stride, dMvX1, dMvY1, dMvX0, dMvY0, blockWidth, getGbiWeight(pu.cu->GBiIdx, REF_PIC_LIST_1), clpRng);
g_pelBufOP.applyBiPROF[0](dstY, pcYuvDst.stride, srcY1, srcY0, pcYuvSrc0.stride, width, height, gX1, gY1, gX0, gY0, gradXExt0.stride, dMvX1, dMvY1, dMvX0, dMvY0, blockWidth, getBcwWeight(pu.cu->BcwIdx, REF_PIC_LIST_1), clpRng);
}
#endif
......@@ -1812,7 +1815,7 @@ void InterPrediction::motionCompensation( PredictionUnit &pu, PelUnitBuf &predBu
, PelUnitBuf* predBufWOBIO /*= NULL*/
)
{
CHECK(predBufWOBIO && pu.mhIntraFlag, "the case should not happen!");
CHECK(predBufWOBIO && pu.ciipFlag, "the case should not happen!");
if (!pu.cs->pcv->isEncoder)
{
......@@ -1919,7 +1922,7 @@ void InterPrediction::motionCompensation( PredictionUnit &pu, PelUnitBuf &predBu
}
}
if (bioApplied && pu.mhIntraFlag)
if (bioApplied && pu.ciipFlag)
{
bioApplied = false;
}
......@@ -1928,7 +1931,7 @@ void InterPrediction::motionCompensation( PredictionUnit &pu, PelUnitBuf &predBu
{
bioApplied = false;
}
if (pu.cu->cs->sps->getUseGBi() && bioApplied && pu.cu->GBiIdx != GBI_DEFAULT)
if (pu.cu->cs->sps->getUseBcw() && bioApplied && pu.cu->BcwIdx != BCW_DEFAULT)
{
bioApplied = false;
}
......@@ -2271,7 +2274,10 @@ void InterPrediction::xFinalPaddedMCForDMVR(PredictionUnit& pu, PelUnitBuf &pcYu
m_iRefListIdx = refId;
const Picture* refPic = pu.cu->slice->getRefPic( refId, pu.refIdx[refId] )->unscaledPic;
Mv cMvClipped = cMv;
clipMv( cMvClipped, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps, *pu.cs->pps );
if( !pu.cs->sps->getWrapAroundEnabledFlag() )
{
clipMv( cMvClipped, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps, *pu.cs->pps );
}
Mv startMv = mergeMV[refId];
......@@ -2362,8 +2368,11 @@ void InterPrediction::xinitMC(PredictionUnit& pu, const ClpRngs &clpRngs)
Mv mergeMVL1(pu.mv[REF_PIC_LIST_1]);
/*Clip the starting MVs*/
clipMv( mergeMVL0, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps, *pu.cs->pps );
clipMv( mergeMVL1, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps, *pu.cs->pps );
if( !pu.cs->sps->getWrapAroundEnabledFlag() )
{
clipMv( mergeMVL0, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps, *pu.cs->pps );
clipMv( mergeMVL1, pu.lumaPos(), pu.lumaSize(), *pu.cs->sps, *pu.cs->pps );
}
/*L0 MC for refinement*/
{
......
......@@ -752,11 +752,13 @@ void IntraPrediction::xPredIntraBDPCM(const CPelBuf &pSrc, PelBuf &pDst, const u
}
}
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
bool IntraPrediction::useDPCMForFirstPassIntraEstimation(const PredictionUnit &pu, const uint32_t &uiDirMode)
{
return CU::isRDPCMEnabled(*pu.cu) && pu.cu->transQuantBypass && (uiDirMode == HOR_IDX || uiDirMode == VER_IDX);
}
#endif
void IntraPrediction::geneWeightedPred(const ComponentID compId, PelBuf &pred, const PredictionUnit &pu, Pel *srcBuf)
{
const int width = pred.width;
......@@ -815,7 +817,7 @@ void IntraPrediction::switchBuffer(const PredictionUnit &pu, ComponentID compID,
void IntraPrediction::geneIntrainterPred(const CodingUnit &cu)
{
if (!cu.firstPU->mhIntraFlag)
if (!cu.firstPU->ciipFlag)
{
return;
}
......
......@@ -176,8 +176,10 @@ public:
#endif
void predIntraMip (const ComponentID compId, PelBuf &piPred, const PredictionUnit &pu);
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
static bool useDPCMForFirstPassIntraEstimation(const PredictionUnit &pu, const uint32_t &uiDirMode);
#endif
void geneWeightedPred (const ComponentID compId, PelBuf &pred, const PredictionUnit &pu, Pel *srcBuf);
Pel* getPredictorPtr2 (const ComponentID compID, uint32_t idx) { return m_yuvExt2[compID][idx]; }
void switchBuffer (const PredictionUnit &pu, ComponentID compID, PelBuf srcBuff, Pel *dst);
......
......@@ -760,7 +760,7 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De
const TransformUnit& tuP = *cuP.cs->getTU(posP, cuQ.chType); //based on chType of the current cu, because cuQ.chType and cuP.chType are not the same when local dual-tree is applied
const PreCalcValues& pcv = *cu.cs->pcv;
const unsigned rasterIdx = getRasterIdx( Position{ localPos.x, localPos.y }, pcv );
if (m_aapucBS[edgeDir][rasterIdx] && (cuP.firstPU->mhIntraFlag || cuQ.firstPU->mhIntraFlag))
if (m_aapucBS[edgeDir][rasterIdx] && (cuP.firstPU->ciipFlag || cuQ.firstPU->ciipFlag))
{
return (BsSet(2, COMPONENT_Y) + BsSet(2, COMPONENT_Cb) + BsSet(2, COMPONENT_Cr));
}
......@@ -786,7 +786,7 @@ unsigned LoopFilter::xGetBoundaryStrengthSingle ( const CodingUnit& cu, const De
{
return tmpBs;
}
if ((cuP.firstPU->mhIntraFlag || cuQ.firstPU->mhIntraFlag))
if ((cuP.firstPU->ciipFlag || cuQ.firstPU->ciipFlag))
{
return 1;
}
......@@ -917,7 +917,9 @@ void LoopFilter::xEdgeFilterLuma( const CodingUnit& cu, const DeblockEdgeDir edg
const PPS &pps = *(cu.cs->pps);
const SPS &sps = *(cu.cs->sps);
const Slice &slice = *(cu.slice);
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
const bool ppsTransquantBypassEnabledFlag = pps.getTransquantBypassEnabledFlag();
#endif
const bool spsPaletteEnabledFlag = sps.getPLTMode();
const int bitDepthLuma = sps.getBitDepth(CHANNEL_TYPE_LUMA);
const ClpRng& clpRng( cu.cs->slice->clpRng(COMPONENT_Y) );
......@@ -1100,12 +1102,14 @@ void LoopFilter::xEdgeFilterLuma( const CodingUnit& cu, const DeblockEdgeDir edg
int dL = d0L + d3L;
bPartPNoFilter = bPartQNoFilter = false;
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
if (ppsTransquantBypassEnabledFlag)
{
// check if each of PUs is lossless coded
bPartPNoFilter = bPartPNoFilter || cuP.transQuantBypass;
bPartQNoFilter = bPartQNoFilter || cuQ.transQuantBypass;
}
#endif
if (spsPaletteEnabledFlag)
{
// check if each of PUs is palette coded
......@@ -1145,12 +1149,14 @@ void LoopFilter::xEdgeFilterLuma( const CodingUnit& cu, const DeblockEdgeDir edg
const int d = d0 + d3;
bPartPNoFilter = bPartQNoFilter = false;
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
if( ppsTransquantBypassEnabledFlag )
{
// check if each of PUs is lossless coded
bPartPNoFilter = bPartPNoFilter || cuP.transQuantBypass;
bPartQNoFilter = bPartQNoFilter || cuQ.transQuantBypass;
}
#endif
if( spsPaletteEnabledFlag)
{
// check if each of PUs is palette coded
......@@ -1313,12 +1319,14 @@ void LoopFilter::xEdgeFilterChroma(const CodingUnit& cu, const DeblockEdgeDir ed
}
bPartPNoFilter = bPartQNoFilter = false;
#if !JVET_P2001_REMOVE_TRANSQUANT_BYPASS
if( pps.getTransquantBypassEnabledFlag() )
{
// check if each of PUs is lossless coded
bPartPNoFilter = bPartPNoFilter || cuP.transQuantBypass;
bPartQNoFilter = bPartQNoFilter || cuQ.transQuantBypass;
}
#endif
if ( sps.getPLTMode())
{
// check if each of PUs is palette coded
......
......@@ -107,11 +107,11 @@ struct MotionInfo
uint16_t sliceIdx;
Mv mv [ NUM_REF_PIC_LIST_01 ];
int16_t refIdx [ NUM_REF_PIC_LIST_01 ];
uint8_t GBiIdx;
uint8_t BcwIdx;
Mv bv;
MotionInfo() : isInter(false), isIBCmot(false), interDir(0), useAltHpelIf(false), sliceIdx(0), refIdx{ NOT_VALID, NOT_VALID }, GBiIdx(0) { }
MotionInfo() : isInter(false), isIBCmot(false), interDir(0), useAltHpelIf(false), sliceIdx(0), refIdx{ NOT_VALID, NOT_VALID }, BcwIdx(0) { }
// ensure that MotionInfo(0) produces '\x000....' bit pattern - needed to work with AreaBuf - don't use this constructor for anything else
MotionInfo(int i) : isInter(i != 0), isIBCmot(false), interDir(0), useAltHpelIf(false), sliceIdx(0), refIdx{ 0, 0 }, GBiIdx(0) { CHECKD(i != 0, "The argument for this constructor has to be '0'"); }
MotionInfo(int i) : isInter(i != 0), isIBCmot(false), interDir(0), useAltHpelIf(false), sliceIdx(0), refIdx{ 0, 0 }, BcwIdx(0) { CHECKD(i != 0, "The argument for this constructor has to be '0'"); }
bool operator==( const MotionInfo& mi ) const
{
......@@ -144,7 +144,7 @@ struct MotionInfo
}
};
class GBiMotionParam
class BcwMotionParam
{
bool m_readOnly[2][33]; // 2 RefLists, 33 RefFrams
Mv m_mv[2][33];
......
......@@ -1039,6 +1039,9 @@ void Picture::allocateNewSlice()
slice.setPPS( cs->pps);
slice.setSPS( cs->sps);
#if JVET_P0218_AUD_TID_AND_LAYERID
slice.setVPS( cs->vps);
#endif
if(slices.size()>=2)
{
slice.copySliceInfo( slices[slices.size()-2] );
......@@ -1050,6 +1053,9 @@ Slice *Picture::swapSliceObject(Slice * p, uint32_t i)
{
p->setSPS(cs->sps);
p->setPPS(cs->pps);
#if JVET_P0218_AUD_TID_AND_LAYERID
p->setVPS(cs->vps);
#endif
p->setAlfAPSs(cs->alfApss);
#if !JVET_P1006_PICTURE_HEADER
......@@ -1063,6 +1069,9 @@ Slice *Picture::swapSliceObject(Slice * p, uint32_t i)
slices[i] = p;
pTmp->setSPS(0);
pTmp->setPPS(0);
#if JVET_P0218_AUD_TID_AND_LAYERID
pTmp->setVPS(0);
#endif
memset(pTmp->getAlfAPSs(), 0, sizeof(*pTmp->getAlfAPSs())*ALF_CTB_MAX_NUM_APS);
#if !JVET_P1006_PICTURE_HEADER
......
......@@ -82,6 +82,9 @@ void RdCost::setLambda( double dLambda, const BitDepths &bitDepths )
{
m_dLambda = dLambda;
m_DistScale = double(1<<SCALE_BITS) / m_dLambda;
#if JVET_P2001_REMOVE_TRANSQUANT_BYPASS
m_dLambdaMotionSAD = sqrt(m_dLambda);
#else
m_dLambdaMotionSAD[0] = sqrt(m_dLambda);
dLambda = 0.57
* pow(2.0, ((LOSSLESS_AND_MIXED_LOSSLESS_RD_COST_TEST_QP_PRIME - 12
......@@ -90,6 +93,7 @@ void RdCost::setLambda( double dLambda, const BitDepths &bitDepths )
- DISTORTION_PRECISION_ADJUSTMENT(bitDepths.recon[CHANNEL_TYPE_LUMA])))
/ 3.0));
m_dLambdaMotionSAD[1] = sqrt(dLambda);
#endif
}
#if JVET_P0517_ADAPTIVE_COLOR_TRANSFORM
......
......@@ -116,7 +116,11 @@ private:
ChromaFormat m_cf;
#endif
double m_DistScale;
#if JVET_P2001_REMOVE_TRANSQUANT_BYPASS
double m_dLambdaMotionSAD;
#else
double m_dLambdaMotionSAD[2 /* 0=standard, 1=for transquant bypass when mixed-lossless cost evaluation enabled*/];