From f46e60c40785a0e756a8f48620e539e7787428e2 Mon Sep 17 00:00:00 2001 From: Peisong Chen <peisong.chen@broadcom.com> Date: Mon, 10 Feb 2020 16:56:52 -0800 Subject: [PATCH] JVET-Q0482: Remove constant slice header parameter settings in PPS --- cfg/encoder_lowdelay_P_vtm.cfg | 1 - cfg/encoder_lowdelay_vtm.cfg | 1 - cfg/encoder_randomaccess_vtm.cfg | 1 - source/App/EncoderApp/EncApp.cpp | 6 +++ source/App/EncoderApp/EncAppCfg.cpp | 4 ++ source/App/EncoderApp/EncAppCfg.h | 2 + source/Lib/CommonLib/Slice.cpp | 8 ++++ source/Lib/CommonLib/Slice.h | 11 +++++ source/Lib/CommonLib/TypeDef.h | 2 + source/Lib/DecoderLib/VLCReader.cpp | 66 ++++++++++++++++++++++++++++- source/Lib/EncoderLib/EncCfg.h | 2 + source/Lib/EncoderLib/EncGOP.cpp | 9 ++++ source/Lib/EncoderLib/EncLib.cpp | 3 +- source/Lib/EncoderLib/VLCWriter.cpp | 48 ++++++++++++++++++++- 14 files changed, 156 insertions(+), 8 deletions(-) diff --git a/cfg/encoder_lowdelay_P_vtm.cfg b/cfg/encoder_lowdelay_P_vtm.cfg index 5ee62bea4a..33ec38d4e1 100644 --- a/cfg/encoder_lowdelay_P_vtm.cfg +++ b/cfg/encoder_lowdelay_P_vtm.cfg @@ -126,7 +126,6 @@ MRL : 1 MIP : 0 JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable PROF : 1 -PPSorSliceMode : 3 ChromaTS : 1 # Fast tools diff --git a/cfg/encoder_lowdelay_vtm.cfg b/cfg/encoder_lowdelay_vtm.cfg index 0ae0e4b943..92763c14d5 100644 --- a/cfg/encoder_lowdelay_vtm.cfg +++ b/cfg/encoder_lowdelay_vtm.cfg @@ -130,7 +130,6 @@ MRL : 1 MIP : 0 JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable PROF : 1 -PPSorSliceMode : 2 ChromaTS : 1 # Fast tools diff --git a/cfg/encoder_randomaccess_vtm.cfg b/cfg/encoder_randomaccess_vtm.cfg index 8c12543f3d..b8f56a639b 100644 --- a/cfg/encoder_randomaccess_vtm.cfg +++ b/cfg/encoder_randomaccess_vtm.cfg @@ -145,7 +145,6 @@ DMVR : 1 SMVD : 1 JointCbCr : 1 # joint coding of chroma residuals (if available): 0: disable, 1: enable PROF : 1 -PPSorSliceMode : 1 # Fast tools PBIntraFast : 1 diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index 156f863d1c..ff6e9b30be 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -793,6 +793,7 @@ void EncApp::xInitLibCfg() m_cEncLib.setSliceLevelDeltaQp ( m_sliceLevelDeltaQp ); #endif m_cEncLib.setSliceLevelAlf ( m_sliceLevelAlf ); +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS m_cEncLib.setConstantSliceHeaderParamsEnabledFlag ( m_constantSliceHeaderParamsEnabledFlag ); m_cEncLib.setPPSDepQuantEnabledIdc ( m_PPSDepQuantEnabledIdc ); m_cEncLib.setPPSRefPicListSPSIdc0 ( m_PPSRefPicListSPSIdc0 ); @@ -800,10 +801,15 @@ void EncApp::xInitLibCfg() m_cEncLib.setPPSMvdL1ZeroIdc ( m_PPSMvdL1ZeroIdc ); m_cEncLib.setPPSCollocatedFromL0Idc ( m_PPSCollocatedFromL0Idc ); m_cEncLib.setPPSSixMinusMaxNumMergeCandPlus1 ( m_PPSSixMinusMaxNumMergeCandPlus1 ); +#endif #if !JVET_Q0806 +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS m_cEncLib.setPPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1 ( m_PPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1 ); +#endif #else +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS m_cEncLib.setPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1 ( m_PPSMaxNumMergeCandMinusMaxNumGeoCandPlus1 ); +#endif #endif m_cEncLib.setUseScalingListId ( m_useScalingListId ); m_cEncLib.setScalingListFileName ( m_scalingListFileName ); diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index 8376e59bab..1300551e7e 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -1217,8 +1217,10 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) "\t1: use MD5\n" "\t0: disable") ("TMVPMode", m_TMVPModeId, 1, "TMVP mode 0: TMVP disable for all slices. 1: TMVP enable for all slices (default) 2: TMVP enable for certain slices only") +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS ("PPSorSliceMode", m_PPSorSliceMode, 0, "Enable signalling certain parameters either in PPS or per slice\n" "\tmode 0: Always per slice (default), 1: RA settings, 2: LDB settings, 3: LDP settings") +#endif ("SliceLevelRpl", m_sliceLevelRpl, true, "Code reference picture lists in slice headers rather than picture header.") ("SliceLevelDblk", m_sliceLevelDblk, true, "Code deblocking filter parameters in slice headers rather than picture header.") ("SliceLevelSao", m_sliceLevelSao, true, "Code SAO parameters in slice headers rather than picture header.") @@ -3452,6 +3454,7 @@ bool EncAppCfg::xCheckParameter() m_BIO = false; } +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS // If m_PPSorSliceFlag is equal to 1, for each PPS parameter below, // 0: value is signaled in slice header // >0: value is derived from PPS parameter as value - 1 @@ -3518,6 +3521,7 @@ bool EncAppCfg::xCheckParameter() } xConfirmPara(m_drapPeriod > 0 && m_PPSRefPicListSPSIdc0 > 0, "PPSRefPicListSPSIdc0 shall be 0 when DRAP is used. This can be fixed by setting PPSorSliceMode=0."); xConfirmPara(m_drapPeriod > 0 && m_PPSRefPicListSPSIdc1 > 0, "PPSRefPicListSPSIdc1 shall be 0 when DRAP is used. This can be fixed by setting PPSorSliceMode=0."); +#endif #if HEVC_SEI if (m_toneMappingInfoSEIEnabled) diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h index b3b7c9e873..69f4ff737c 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -653,6 +653,7 @@ protected: #endif int m_TMVPModeId; +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS int m_PPSorSliceMode; bool m_constantSliceHeaderParamsEnabledFlag; int m_PPSDepQuantEnabledIdc; @@ -665,6 +666,7 @@ protected: uint32_t m_PPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1; #else uint32_t m_PPSMaxNumMergeCandMinusMaxNumGeoCandPlus1; +#endif #endif bool m_depQuantEnabledFlag; bool m_signDataHidingEnabledFlag; diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index 94b0c5405c..7542c32da1 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -1825,6 +1825,9 @@ PicHeader::PicHeader() , m_cuChromaQpOffsetSubdivIntra ( 0 ) , m_cuChromaQpOffsetSubdivInter ( 0 ) , m_enableTMVPFlag ( true ) +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS +, m_picColFromL0Flag ( true ) +#endif , m_mvdL1ZeroFlag ( 0 ) , m_maxNumMergeCand ( MRG_MAX_NUM_CANDS ) , m_maxNumAffineMergeCand ( AFFINE_MRG_MAX_NUM_CANDS ) @@ -1943,6 +1946,9 @@ void PicHeader::initPicHeader() m_cuChromaQpOffsetSubdivIntra = 0; m_cuChromaQpOffsetSubdivInter = 0; m_enableTMVPFlag = true; +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + m_picColFromL0Flag = true; +#endif m_mvdL1ZeroFlag = 0; m_maxNumMergeCand = MRG_MAX_NUM_CANDS; m_maxNumAffineMergeCand = AFFINE_MRG_MAX_NUM_CANDS; @@ -2375,6 +2381,7 @@ PPS::PPS() , m_log2MaxTransformSkipBlockSize (2) #endif , m_entropyCodingSyncEnabledFlag (false) +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS , m_constantSliceHeaderParamsEnabledFlag (false) , m_PPSDepQuantEnabledIdc (0) , m_PPSRefPicListSPSIdc0 (0) @@ -2387,6 +2394,7 @@ PPS::PPS() #else , m_PPSMaxNumMergeCandMinusMaxNumGeoCandPlus1 (0) #endif +#endif , m_cabacInitPresentFlag (false) , m_pictureHeaderExtensionPresentFlag(0) , m_sliceHeaderExtensionPresentFlag (false) diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 5add6de938..6778b7b4e5 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -1837,6 +1837,7 @@ private: #endif bool m_entropyCodingSyncEnabledFlag; //!< Indicates the presence of wavefronts +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS bool m_constantSliceHeaderParamsEnabledFlag; int m_PPSDepQuantEnabledIdc; int m_PPSRefPicListSPSIdc0; @@ -1848,6 +1849,7 @@ private: uint32_t m_PPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1; #else uint32_t m_PPSMaxNumMergeCandMinusMaxNumGeoCandPlus1; +#endif #endif bool m_cabacInitPresentFlag; @@ -2069,6 +2071,7 @@ public: void setEntropyCodingSyncEnabledFlag(bool val) { m_entropyCodingSyncEnabledFlag = val; } +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS bool getConstantSliceHeaderParamsEnabledFlag() const { return m_constantSliceHeaderParamsEnabledFlag; } void setConstantSliceHeaderParamsEnabledFlag(bool b) { m_constantSliceHeaderParamsEnabledFlag = b; } int getPPSDepQuantEnabledIdc() const { return m_PPSDepQuantEnabledIdc; } @@ -2090,6 +2093,7 @@ public: #else uint32_t getPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1() const { return m_PPSMaxNumMergeCandMinusMaxNumGeoCandPlus1; } void setPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1(uint32_t u) { m_PPSMaxNumMergeCandMinusMaxNumGeoCandPlus1 = u; } +#endif #endif void setCabacInitPresentFlag( bool flag ) { m_cabacInitPresentFlag = flag; } @@ -2271,6 +2275,9 @@ private: uint32_t m_cuChromaQpOffsetSubdivIntra; //!< CU chroma QP offset maximum subdivision for intra slices uint32_t m_cuChromaQpOffsetSubdivInter; //!< CU chroma QP offset maximum subdivision for inter slices bool m_enableTMVPFlag; //!< enable temporal motion vector prediction +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + bool m_picColFromL0Flag; //!< syntax element collocated_from_l0_flag +#endif bool m_mvdL1ZeroFlag; //!< L1 MVD set to zero flag uint32_t m_maxNumMergeCand; //!< max number of merge candidates uint32_t m_maxNumAffineMergeCand; //!< max number of sub-block merge candidates @@ -2424,6 +2431,10 @@ public: uint32_t getCuChromaQpOffsetSubdivInter() const { return m_cuChromaQpOffsetSubdivInter; } void setEnableTMVPFlag( bool b ) { m_enableTMVPFlag = b; } bool getEnableTMVPFlag() const { return m_enableTMVPFlag; } +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + void setPicColFromL0Flag(bool val) { m_picColFromL0Flag = val; } + bool getPicColFromL0Flag() const { return m_picColFromL0Flag; } +#endif void setMvdL1ZeroFlag( bool b ) { m_mvdL1ZeroFlag = b; } bool getMvdL1ZeroFlag() const { return m_mvdL1ZeroFlag; } void setMaxNumMergeCand(uint32_t val ) { m_maxNumMergeCand = val; } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index c3b0b4a289..af6a217f9b 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -50,6 +50,8 @@ #include <assert.h> #include <cassert> +#define JVET_Q0482_REMOVE_CONSTANT_PARAMS 1 // JVET-Q0482: Remove constant slice header parameter settings in PPS + #define JVET_Q0505_CHROAM_QM_SIGNALING_400 1 //JVET-Q0505: Cleanup of chroma quantization matrix signaling for 400 color format #define JVET_Q0786_PTL_only 1 // JVET-Q0786: modifications to VPS syntax - PTL part only (signal PTL for single layer OLSs) diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 05325441f3..5d97e985ee 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -780,6 +780,7 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS, ParameterSetManager *parameterSetMana READ_FLAG(uiCode, "qp_delta_info_in_ph_flag"); pcPPS->setQpDeltaInfoInPhFlag(uiCode ? true : false); #endif +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS READ_FLAG( uiCode, "constant_slice_header_params_enabled_flag"); pcPPS->setConstantSliceHeaderParamsEnabledFlag(uiCode); if ( pcPPS->getConstantSliceHeaderParamsEnabledFlag() ) { READ_CODE( 2, uiCode, "pps_dep_quant_enabled_idc"); pcPPS->setPPSDepQuantEnabledIdc(uiCode); @@ -808,6 +809,7 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS, ParameterSetManager *parameterSetMana pcPPS->setPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1(0); #endif } +#endif READ_FLAG( uiCode, "picture_header_extension_present_flag"); @@ -2673,6 +2675,12 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { uiCode = 0; } +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + else + { + READ_FLAG(uiCode, "pic_rpl_sps_flag[i]"); + } +#else else if (!pps->getPPSRefPicListSPSIdc( listIdx )) { READ_FLAG(uiCode, "pic_rpl_sps_flag[i]"); @@ -2681,7 +2689,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { uiCode = pps->getPPSRefPicListSPSIdc( listIdx ) - 1; } - +#endif // explicit RPL in picture header if (!uiCode) { @@ -2928,7 +2936,20 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag picHeader->setEnableTMVPFlag(false); } +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + if (picHeader->getEnableTMVPFlag() && pps->getRplInfoInPhFlag()) + { + READ_CODE( 1, uiCode, "pic_collocated_from_l0_flag"); + picHeader->setPicColFromL0Flag(uiCode); + } + else + { + picHeader->setPicColFromL0Flag(0); + } +#endif + // mvd L1 zero flag +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSMvdL1ZeroIdc()) { READ_FLAG(uiCode, "pic_mvd_l1_zero_flag"); @@ -2937,9 +2958,13 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { uiCode = pps->getPPSMvdL1ZeroIdc() - 1; } +#else + READ_FLAG(uiCode, "pic_mvd_l1_zero_flag"); +#endif picHeader->setMvdL1ZeroFlag( uiCode != 0 ); // merge candidate list size +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSSixMinusMaxNumMergeCandPlus1()) { READ_UVLC(uiCode, "pic_six_minus_max_num_merge_cand"); @@ -2948,6 +2973,9 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { uiCode = pps->getPPSSixMinusMaxNumMergeCandPlus1() - 1; } +#else + READ_UVLC(uiCode, "pic_six_minus_max_num_merge_cand"); +#endif CHECK(MRG_MAX_NUM_CANDS <= uiCode, "Incorrrect max number of merge candidates!"); picHeader->setMaxNumMergeCand(MRG_MAX_NUM_CANDS - uiCode); @@ -3008,6 +3036,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag // triangle merge candidate list size if (sps->getUseTriangle() && picHeader->getMaxNumMergeCand() >= 2) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1()) { READ_UVLC(uiCode, "pic_max_num_merge_cand_minus_max_num_triangle_cand"); @@ -3016,6 +3045,9 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { uiCode = pps->getPPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1() - 1; } +#else + READ_UVLC(uiCode, "pic_max_num_merge_cand_minus_max_num_triangle_cand"); +#endif CHECK(picHeader->getMaxNumMergeCand() < uiCode, "Incorrrect max number of triangle candidates!"); picHeader->setMaxNumTriangleCand((uint32_t)(picHeader->getMaxNumMergeCand() - uiCode)); } @@ -3027,6 +3059,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag // geometric merge candidate list size if (sps->getUseGeo() && picHeader->getMaxNumMergeCand() >= 2) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1()) { READ_UVLC(uiCode, "pic_max_num_merge_cand_minus_max_num_gpm_cand"); @@ -3035,6 +3068,9 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { uiCode = pps->getPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1() - 1; } +#else + READ_UVLC(uiCode, "pic_max_num_merge_cand_minus_max_num_gpm_cand"); +#endif CHECK(picHeader->getMaxNumMergeCand() < uiCode, "Incorrrect max number of gpm candidates!"); picHeader->setMaxNumGeoCand((uint32_t)(picHeader->getMaxNumMergeCand() - uiCode)); } @@ -3234,6 +3270,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag #endif // dependent quantization +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSDepQuantEnabledIdc()) { READ_FLAG(uiCode, "pic_dep_quant_enabled_flag"); @@ -3242,6 +3279,9 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { uiCode = pps->getPPSDepQuantEnabledIdc() - 1; } +#else + READ_FLAG(uiCode, "pic_dep_quant_enabled_flag"); +#endif picHeader->setDepQuantEnabledFlag( uiCode != 0 ); // sign data hiding @@ -3652,6 +3692,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par //Read L0 related syntax elements if (sps->getNumRPL0() > 0) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSRefPicListSPSIdc0()) { READ_FLAG(uiCode, "ref_pic_list_sps_flag[0]"); @@ -3660,6 +3701,9 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par { uiCode = pps->getPPSRefPicListSPSIdc0() - 1; } +#else + READ_FLAG(uiCode, "ref_pic_list_sps_flag[0]"); +#endif } else { @@ -3728,6 +3772,7 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par { if (sps->getNumRPL1() > 0) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSRefPicListSPSIdc1()) { READ_FLAG(uiCode, "ref_pic_list_sps_flag[1]"); @@ -3736,6 +3781,9 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par { uiCode = pps->getPPSRefPicListSPSIdc1() - 1; } +#else + READ_FLAG(uiCode, "ref_pic_list_sps_flag[1]"); +#endif } else { @@ -3895,8 +3943,13 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par if ( pcSlice->getPicHeader()->getEnableTMVPFlag() ) { +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + if ( !pps->getRplInfoInPhFlag()) + { +#endif if ( pcSlice->getSliceType() == B_SLICE ) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSCollocatedFromL0Idc()) { READ_FLAG(uiCode, "collocated_from_l0_flag"); @@ -3905,13 +3958,22 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par { uiCode = pps->getPPSCollocatedFromL0Idc() - 1; } +#else + READ_FLAG(uiCode, "collocated_from_l0_flag"); +#endif pcSlice->setColFromL0Flag(uiCode); } else { pcSlice->setColFromL0Flag( 1 ); } - +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + } + else + { + pcSlice->setColFromL0Flag(picHeader->getPicColFromL0Flag()); + } +#endif if ( pcSlice->getSliceType() != I_SLICE && ((pcSlice->getColFromL0Flag() == 1 && pcSlice->getNumRefIdx(REF_PIC_LIST_0) > 1)|| (pcSlice->getColFromL0Flag() == 0 && pcSlice->getNumRefIdx(REF_PIC_LIST_1) > 1))) diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index d9987a3e09..be310c8f47 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -1768,6 +1768,7 @@ public: bool getDisableScalingMatrixForLfnstBlks() const { return m_disableScalingMatrixForLfnstBlks; } void setTMVPModeId ( int u ) { m_TMVPModeId = u; } int getTMVPModeId () { return m_TMVPModeId; } +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS void setConstantSliceHeaderParamsEnabledFlag ( bool u ) { m_constantSliceHeaderParamsEnabledFlag = u; } bool getConstantSliceHeaderParamsEnabledFlag () { return m_constantSliceHeaderParamsEnabledFlag; } void setPPSDepQuantEnabledIdc ( int u ) { m_PPSDepQuantEnabledIdc = u; } @@ -1788,6 +1789,7 @@ public: #else void setPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1 ( uint32_t u ) { m_PPSMaxNumMergeCandMinusMaxNumGeoCandPlus1 = u; } uint32_t getPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1 () { return m_PPSMaxNumMergeCandMinusMaxNumGeoCandPlus1; } +#endif #endif WeightedPredictionMethod getWeightedPredictionMethod() const { return m_weightedPredictionMethod; } void setWeightedPredictionMethod( WeightedPredictionMethod m ) { m_weightedPredictionMethod = m; } diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp index 5770d6d4e6..234aac6acb 100644 --- a/source/Lib/EncoderLib/EncGOP.cpp +++ b/source/Lib/EncoderLib/EncGOP.cpp @@ -2562,16 +2562,25 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, } const uint32_t uiColFromL0 = refPicL0->slices[0]->getSliceQp() > refPicL1->slices[0]->getSliceQp(); +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + picHeader->setPicColFromL0Flag( uiColFromL0 ); +#endif pcSlice->setColFromL0Flag( uiColFromL0 ); pcSlice->setColRefIdx( uiColFromL0 ? colRefIdxL0 : colRefIdxL1 ); } else if( colRefIdxL0 < 0 && colRefIdxL1 >= 0 ) { +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + picHeader->setPicColFromL0Flag( false ); +#endif pcSlice->setColFromL0Flag( false ); pcSlice->setColRefIdx( colRefIdxL1 ); } else if( colRefIdxL0 >= 0 && colRefIdxL1 < 0 ) { +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + picHeader->setPicColFromL0Flag( true ); +#endif pcSlice->setColFromL0Flag( true ); pcSlice->setColRefIdx( colRefIdxL0 ); } diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index 6e23260e3f..d525d399e8 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -1579,7 +1579,7 @@ void EncLib::xInitPPS(PPS &pps, const SPS &sps) { // pps ID already initialised. pps.setSPSId(sps.getSPSId()); - +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS pps.setConstantSliceHeaderParamsEnabledFlag(getConstantSliceHeaderParamsEnabledFlag()); pps.setPPSDepQuantEnabledIdc(getPPSDepQuantEnabledIdc()); pps.setPPSRefPicListSPSIdc0(getPPSRefPicListSPSIdc0()); @@ -1591,6 +1591,7 @@ void EncLib::xInitPPS(PPS &pps, const SPS &sps) pps.setPPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1(getPPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1()); #else pps.setPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1(getPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1()); +#endif #endif pps.setNumSubPics(sps.getNumSubPics()); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 2ad1b2d30b..d2b2e16f6a 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -462,6 +462,7 @@ void HLSWriter::codePPS( const PPS* pcPPS, const SPS* pcSPS ) WRITE_FLAG(pcPPS->getQpDeltaInfoInPhFlag() ? 1 : 0, "qp_delta_info_in_ph_flag"); #endif +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS WRITE_FLAG( pcPPS->getConstantSliceHeaderParamsEnabledFlag(), "constant_slice_header_params_enabled_flag"); if ( pcPPS->getConstantSliceHeaderParamsEnabledFlag() ) { WRITE_CODE( pcPPS->getPPSDepQuantEnabledIdc(), 2, "pps_dep_quant_enabled_idc"); @@ -476,6 +477,7 @@ void HLSWriter::codePPS( const PPS* pcPPS, const SPS* pcSPS ) WRITE_UVLC(pcPPS->getPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1(), "pps_max_num_merge_cand_minus_max_num_gpm_cand_plus1"); #endif } +#endif WRITE_FLAG( pcPPS->getPictureHeaderExtensionPresentFlag() ? 1 : 0, "picture_header_extension_present_flag"); @@ -1860,6 +1862,7 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) // RPL in picture header or SPS else if (sps->getNumRPL(listIdx) > 0) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSRefPicListSPSIdc(listIdx)) { WRITE_FLAG(picHeader->getRPLIdx(listIdx) != -1 ? 1 : 0, "pic_rpl_sps_flag[i]"); @@ -1868,6 +1871,9 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) { picHeader->setRPLIdx( listIdx, -1); } +#else + WRITE_FLAG(picHeader->getRPLIdx(listIdx) != -1 ? 1 : 0, "pic_rpl_sps_flag[i]"); +#endif } else { @@ -2068,6 +2074,7 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) } // mvd L1 zero flag +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSMvdL1ZeroIdc()) { WRITE_FLAG(picHeader->getMvdL1ZeroFlag(), "pic_mvd_l1_zero_flag"); @@ -2076,18 +2083,30 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) { picHeader->setMvdL1ZeroFlag( pps->getPPSMvdL1ZeroIdc() - 1 ); } +#else + + if (picHeader->getEnableTMVPFlag() && pps->getRplInfoInPhFlag()) + { + WRITE_CODE(picHeader->getPicColFromL0Flag(), 1, "pic_collocated_from_l0_flag"); + } + + WRITE_FLAG(picHeader->getMvdL1ZeroFlag(), "pic_mvd_l1_zero_flag"); +#endif // merge candidate list size +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSSixMinusMaxNumMergeCandPlus1()) { +#endif CHECK(picHeader->getMaxNumMergeCand() > MRG_MAX_NUM_CANDS, "More merge candidates signalled than supported"); WRITE_UVLC(MRG_MAX_NUM_CANDS - picHeader->getMaxNumMergeCand(), "pic_six_minus_max_num_merge_cand"); +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS } else { picHeader->setMaxNumMergeCand(MRG_MAX_NUM_CANDS - (pps->getPPSSixMinusMaxNumMergeCandPlus1() - 1)); } - +#endif // subblock merge candidate list size if ( sps->getUseAffine() ) { @@ -2158,15 +2177,19 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) // geometric merge candidate list size if (sps->getUseGeo() && picHeader->getMaxNumMergeCand() >= 2) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1()) { +#endif CHECK(picHeader->getMaxNumMergeCand() < picHeader->getMaxNumGeoCand(), "Incorrrect max number of gpm candidates!"); WRITE_UVLC(picHeader->getMaxNumMergeCand() - picHeader->getMaxNumGeoCand(), "pic_max_num_merge_cand_minus_max_num_gpm_cand"); +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS } else { picHeader->setMaxNumGeoCand((uint32_t)(picHeader->getMaxNumMergeCand() - (pps->getPPSMaxNumMergeCandMinusMaxNumGeoCandPlus1() - 1))); } +#endif } #endif #if JVET_Q0819_PH_CHANGES @@ -2318,6 +2341,7 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) #endif // dependent quantization +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pps->getPPSDepQuantEnabledIdc()) { WRITE_FLAG(picHeader->getDepQuantEnabledFlag(), "pic_dep_quant_enabled_flag"); @@ -2326,7 +2350,9 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) { picHeader->setDepQuantEnabledFlag( pps->getPPSDepQuantEnabledIdc() - 1 ); } - +#else + WRITE_FLAG(picHeader->getDepQuantEnabledFlag(), "pic_dep_quant_enabled_flag"); +#endif // sign data hiding if( !picHeader->getDepQuantEnabledFlag() ) { @@ -2582,10 +2608,14 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) //Write L0 related syntax elements if (pcSlice->getSPS()->getNumRPL0() > 0) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pcSlice->getPPS()->getPPSRefPicListSPSIdc0()) { +#endif WRITE_FLAG(pcSlice->getRPL0idx() != -1 ? 1 : 0, "ref_pic_list_sps_flag[0]"); +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS } +#endif } if (pcSlice->getRPL0idx() != -1) { @@ -2637,10 +2667,14 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) { if (pcSlice->getSPS()->getNumRPL1() > 0) { +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS if (!pcSlice->getPPS()->getPPSRefPicListSPSIdc1()) { +#endif WRITE_FLAG(pcSlice->getRPL1idx() != -1 ? 1 : 0, "ref_pic_list_sps_flag[1]"); +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS } +#endif } if (pcSlice->getRPL1idx() != -1) { @@ -2744,6 +2778,15 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) if( pcSlice->getPicHeader()->getEnableTMVPFlag() ) { +#if JVET_Q0482_REMOVE_CONSTANT_PARAMS + if(!pcSlice->getPPS()->getRplInfoInPhFlag()) + { + if (pcSlice->getSliceType() == B_SLICE) + { + WRITE_FLAG(pcSlice->getColFromL0Flag(), "collocated_from_l0_flag"); + } + } +#else if( pcSlice->getSliceType() == B_SLICE ) { if (!pcSlice->getPPS()->getPPSCollocatedFromL0Idc()) @@ -2751,6 +2794,7 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) WRITE_FLAG( pcSlice->getColFromL0Flag(), "collocated_from_l0_flag" ); } } +#endif if( pcSlice->getSliceType() != I_SLICE && ( ( pcSlice->getColFromL0Flag() == 1 && pcSlice->getNumRefIdx( REF_PIC_LIST_0 ) > 1 ) || -- GitLab