diff --git a/doc/software-manual.tex b/doc/software-manual.tex index a2d36e6b5df074ea20de43a27864f242e0c71e96..ae4908cf9c91414a03eaec50a0182170b521654d 100644 --- a/doc/software-manual.tex +++ b/doc/software-manual.tex @@ -1060,6 +1060,18 @@ Specifies the value of one_slice_per_pic_constraint_flag Specifies the value of one_subpic_per_pic_constraint_flag \\ +\Option{ExplicitScaleListConstraintFlag} & +%\ShortOption{\None} & +\Default{false} & +Specifies the value of gci_no_explicit_scaling_list_constraint_flag +\\ + +\Option{VirtualBoundaryConstraintFlag} & +%\ShortOption{\None} & +\Default{false} & +Specifies the value of gci_no_virtual_boundaries_constraint_flag +\\ + \Option{FrameOnly} & %\ShortOption{\None} & \Default{false} & diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index 118d86be00f7584202b9200b9f51228faf8f965e..308adde929b76e6d034dae5b421e29f86c1dbf51 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -304,7 +304,12 @@ void EncApp::xInitLibCfg() m_cEncLib.setNoPaletteConstraintFlag ( m_PLTMode == 1 ? false : true ); m_cEncLib.setNoActConstraintFlag ( !m_useColorTrans ); m_cEncLib.setNoLmcsConstraintFlag ( !m_lmcsEnabled ); - +#if JVET_S0050_GCI + m_cEncLib.setNoExplicitScaleListConstraintFlag ( m_noExplicitScaleListConstraintFlag ); + CHECK( m_noExplicitScaleListConstraintFlag && m_useScalingListId != SCALING_LIST_OFF, "Explicit scaling list shall be deactivated when m_noExplicitScaleListConstraintFlag is equal to 1"); + m_cEncLib.setNoVirtualBoundaryConstraintFlag ( m_noVirtualBoundaryConstraintFlag ); + CHECK( m_noVirtualBoundaryConstraintFlag && m_virtualBoundariesEnabledFlag, "Virtuall boundaries shall be deactivated when m_noVirtualBoundaryConstraintFlag is equal to 1"); +#endif //====== Coding Structure ======== m_cEncLib.setIntraPeriod ( m_iIntraPeriod ); diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index d1695029499bb98097613ee86710427ce28b4107..70f3c99b4d37ad9f7791b9b79227541ee20a0c14 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -837,6 +837,10 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) ("OneSlicePerPicConstraintFlag", m_oneSlicePerPicConstraintFlag, false, "Indicate that each picture shall contain only one slice") ("OneSubpicPerPicConstraintFlag", m_oneSubpicPerPicConstraintFlag, false, "Indicate that each picture shall contain only one subpicture") ("FrameOnly", m_frameOnlyConstraintFlag, false, "Indicate that the bitstream contains only frames") +#if JVET_S0050_GCI + ("ExplicitScaleListConstraintFlag", m_noExplicitScaleListConstraintFlag, false, "Indicate that explicit scaling list is deactivated") + ("VirtualBoundaryConstraintFlag", m_noVirtualBoundaryConstraintFlag, false, "Indicate that virtual boundary is deactivated") +#endif ("CTUSize", m_uiCTUSize, 128u, "CTUSize (specifies the CTU size if QTBT is on) [default: 128]") ("Log2MinCuSize", m_log2MinCuSize, 2u, "Log2 min CU size") ("SubPicInfoPresentFlag", m_subPicInfoPresentFlag, false, "equal to 1 specifies that subpicture parameters are present in in the SPS RBSP syntax") diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h index ac6f5aa71bb732a332ced053f6f435dc34226e43..9ca9febab842c1116bcd559a0e6bd1dc1205f5aa 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -150,6 +150,10 @@ protected: bool m_noPaletteConstraintFlag; bool m_noActConstraintFlag; bool m_noLmcsConstraintFlag; +#if JVET_S0050_GCI + bool m_noExplicitScaleListConstraintFlag; + bool m_noVirtualBoundaryConstraintFlag; +#endif bool m_bNoQtbttDualTreeIntraConstraintFlag; bool m_noPartitionConstraintsOverrideConstraintFlag; bool m_bNoSaoConstraintFlag; diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index 7696ad0055abb5926ff4cf98077e8c6df2a9a3d8..aff82d26bd2921e10fa779a1818ef22b8fd4b67f 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -4357,7 +4357,10 @@ bool operator == (const ConstraintInfo& op1, const ConstraintInfo& o if (op1.m_noPaletteConstraintFlag != op2.m_noPaletteConstraintFlag ) return false; if (op1.m_noActConstraintFlag != op2.m_noActConstraintFlag ) return false; if (op1.m_noLmcsConstraintFlag != op2.m_noLmcsConstraintFlag ) return false; - +#if JVET_S0050_GCI + if (op1.m_noExplicitScaleListConstraintFlag != op2.m_noExplicitScaleListConstraintFlag ) return false; + if (op1.m_noVirtualBoundaryConstraintFlag != op2.m_noVirtualBoundaryConstraintFlag ) return false; +#endif if( op1.m_noQtbttDualTreeIntraConstraintFlag != op2.m_noQtbttDualTreeIntraConstraintFlag ) return false; if( op1.m_noPartitionConstraintsOverrideConstraintFlag != op2.m_noPartitionConstraintsOverrideConstraintFlag ) return false; if( op1.m_noSaoConstraintFlag != op2.m_noSaoConstraintFlag ) return false; diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 324cffc40d192cccbb1f5d000e25ce13cb49b989..e7cbe11f2c9f3d044705f4ebda877f7ea7eb3630 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -267,6 +267,10 @@ class ConstraintInfo bool m_noActConstraintFlag; bool m_noLmcsConstraintFlag; +#if JVET_S0050_GCI + bool m_noExplicitScaleListConstraintFlag; + bool m_noVirtualBoundaryConstraintFlag; +#endif bool m_noQtbttDualTreeIntraConstraintFlag; bool m_noPartitionConstraintsOverrideConstraintFlag; bool m_noSaoConstraintFlag; @@ -339,7 +343,10 @@ public: , m_noPaletteConstraintFlag(false) , m_noActConstraintFlag(false) , m_noLmcsConstraintFlag(false) - +#if JVET_S0050_GCI + , m_noExplicitScaleListConstraintFlag(false) + , m_noVirtualBoundaryConstraintFlag(false) +#endif , m_noQtbttDualTreeIntraConstraintFlag(false) , m_noPartitionConstraintsOverrideConstraintFlag(false) , m_noSaoConstraintFlag (false) @@ -450,7 +457,12 @@ public: void setNoActConstraintFlag(bool b) { m_noActConstraintFlag = b; } bool getNoLmcsConstraintFlag() const { return m_noLmcsConstraintFlag; } void setNoLmcsConstraintFlag(bool b) { m_noLmcsConstraintFlag = b; } - +#if JVET_S0050_GCI + bool getNoExplicitScaleListConstraintFlag() const { return m_noExplicitScaleListConstraintFlag; } + void setNoExplicitScaleListConstraintFlag(bool b) { m_noExplicitScaleListConstraintFlag = b; } + bool getNoVirtualBoundaryConstraintFlag() const { return m_noVirtualBoundaryConstraintFlag; } + void setNoVirtualBoundaryConstraintFlag(bool b) { m_noVirtualBoundaryConstraintFlag = b; } +#endif bool getNoQtbttDualTreeIntraConstraintFlag() const { return m_noQtbttDualTreeIntraConstraintFlag; } void setNoQtbttDualTreeIntraConstraintFlag(bool bVal) { m_noQtbttDualTreeIntraConstraintFlag = bVal; } bool getNoPartitionConstraintsOverrideConstraintFlag() const { return m_noPartitionConstraintsOverrideConstraintFlag; } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 53f1e500073b7626d24ccdfee35b7073e5f13d32..aa2d6ede2d125166db7b3e029cb06b349b992457 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -101,6 +101,10 @@ #define JVET_S0181_PROPOSAL2_BUFFERING_PERIOD_CLEANUP 1 // JVET-S0181 Proposal2: Move signalling of bp_max_sublayers_minus1 and conditionally signal bp_cpb_removal_delay_deltas_present_flag, bp_num_cpb_removal_delay_deltas_minus1, and bp_cpb_removal_delay +#define JVET_S0050_GCI 1 // JVET-S0050: Signal new GCI flags no_virtual_boundaries_constraint_flag and no_explicit_scaling_list_constraint_flag + // Constrain the value of one_subpic_per_pic_constraint_flag, one_slice_per_pic_constraint_flag and no_aps_constraint_flag + // Remove all constraints that require GCI fields to be equal to a value that imposes a constraint + //########### place macros to be be kept below this line ############### #define JVET_S0257_DUMP_360SEI_MESSAGE 1 // Software support of 360 SEI messages diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index e02bc98bade5df02c58960aa49f4a97afe5f2072..736387f1fe8285c653103cd4d7d753a7dc5fd381 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -1757,10 +1757,22 @@ void DecLib::xCheckParameterSetConstraints(const int layerId) { CHECK(pps->getNumTiles() != 1, "When one_tile_per_pic_constraint_flag is equal to 1, each picture shall contain only one tile"); } + if (sps->getProfileTierLevel()->getConstraintInfo()->getOneSlicePerPicConstraintFlag()) { +#if JVET_S0050_GCI + CHECK( pps->getRectSliceFlag() && pps->getNumSlicesInPic() != 1, "When one_slice_per_pic_constraint_flag is equal to 1 and if pps_rect_slice_flag is equal to 1, the value of num_slices_in_pic_minus1 shall be equal to 0"); +#else CHECK( pps->getNumSlicesInPic() != 1, "When one_slice_per_pic_constraint_flag is equal to 1, each picture shall contain only one slice"); +#endif + } + +#if JVET_S0050_GCI + if (sps->getProfileTierLevel()->getConstraintInfo()->getOneSubpicPerPicConstraintFlag()) + { + CHECK(sps->getNumSubPics() != 0, "When one_subpic_per_pic_constraint_flag is equal to 1, the value of sps_num_subpics_minus1 shall be equal to 0") } +#endif if (sps->getMaxPicWidthInLumaSamples() == pps->getPicWidthInLumaSamples() && sps->getMaxPicHeightInLumaSamples() == pps->getPicHeightInLumaSamples()) @@ -2167,6 +2179,13 @@ bool DecLib::xDecodeSlice(InputNALUnit &nalu, int &iSkipFrame, int iPOCLastDispl m_pcPic->layerId = nalu.m_nuhLayerId; m_pcPic->subLayerNonReferencePictureDueToSTSA = false; +#if JVET_S0050_GCI + if (pcSlice->getSPS()->getProfileTierLevel()->getConstraintInfo()->getNoApsConstraintFlag()) + { + bool flag = pcSlice->getSPS()->getCCALFEnabledFlag() || pcSlice->getPicHeader()->getNumAlfAps() || pcSlice->getPicHeader()->getAlfEnabledFlag(COMPONENT_Cb) || pcSlice->getPicHeader()->getAlfEnabledFlag(COMPONENT_Cr); + CHECK(flag, "When no_aps_constraint_flag is equal to 1, the values of ph_num_alf_aps_ids_luma, sh_num_alf_aps_ids_luma, ph_alf_cb_flag, ph_alf_cr_flag, sh_alf_cb_flag, sh_alf_cr_flag, and sps_ccalf_enabled_flag shall all be equal to 0") + } +#endif if( pcSlice->getNalUnitLayerId() != pcSlice->getSPS()->getLayerId() ) { CHECK( pcSlice->getSPS()->getLayerId() > pcSlice->getNalUnitLayerId(), "Layer Id of SPS cannot be greater than layer Id of VCL NAL unit the refer to it" ); diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index c4a19743dc059101de0d90daf566f5c32339fb58..4b3cb438d14b9c25f8ea12a9f052c69fee1e2df6 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -4431,120 +4431,160 @@ void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo) READ_CODE(2, symbol, "max_chroma_format_constraint_idc" ); cinfo->setMaxChromaFormatConstraintIdc((ChromaFormat)symbol); READ_FLAG(symbol, "single_layer_constraint_flag"); cinfo->setSingleLayerConstraintFlag(symbol ? true : false); READ_FLAG(symbol, "all_layers_independent_constraint_flag"); cinfo->setAllLayersIndependentConstraintFlag(symbol ? true : false); +#if !JVET_S0050_GCI if (cinfo->getSingleLayerConstraintFlag()) { CHECK(symbol == 0, "When single_layer_constraint_flag is equal to 1, the value of all_layers_independent_ constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_res_change_in_clvs_constraint_flag" ); cinfo->setNoResChangeInClvsConstraintFlag(symbol ? true : false); READ_FLAG(symbol, "one_tile_per_pic_constraint_flag" ); cinfo->setOneTilePerPicConstraintFlag(symbol ? true : false); READ_FLAG(symbol, "pic_header_in_slice_header_constraint_flag"); cinfo->setPicHeaderInSliceHeaderConstraintFlag(symbol ? true : false); READ_FLAG(symbol, "one_slice_per_pic_constraint_flag" ); cinfo->setOneSlicePerPicConstraintFlag(symbol ? true : false); READ_FLAG(symbol, "one_subpic_per_pic_constraint_flag" ); cinfo->setOneSubpicPerPicConstraintFlag(symbol ? true : false); +#if !JVET_S0050_GCI if (cinfo->getOneSlicePerPicConstraintFlag()) { CHECK(symbol == 0, "When one_slice_per_pic_constraint_flag is equal to 1, the value of one_subpic_per_pic_constraint_flag shall be equal to 1"); } - +#endif READ_FLAG(symbol, "no_qtbtt_dual_tree_intra_constraint_flag" ); cinfo->setNoQtbttDualTreeIntraConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getMaxChromaFormatConstraintIdc() == 0) { CHECK(symbol == 0, "When max_chroma_format_constraint_idc is equal to 0, the value of no_qtbtt_dual_tree_intra_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_partition_constraints_override_constraint_flag"); cinfo->setNoPartitionConstraintsOverrideConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_sao_constraint_flag"); cinfo->setNoSaoConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_alf_constraint_flag"); cinfo->setNoAlfConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_ccalf_constraint_flag"); cinfo->setNoCCAlfConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getMaxChromaFormatConstraintIdc() == 0) { CHECK(symbol == 0, "When max_chroma_format_constraint_idc is equal to 0, the value of no_ccalf_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_joint_cbcr_constraint_flag"); cinfo->setNoJointCbCrConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getMaxChromaFormatConstraintIdc() == 0) { CHECK(symbol == 0, "When max_chroma_format_constraint_idc is equal to 0, the value of no_joint_cbcr_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_mrl_constraint_flag"); cinfo->setNoMrlConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_isp_constraint_flag"); cinfo->setNoIspConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_mip_constraint_flag"); cinfo->setNoMipConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_ref_wraparound_constraint_flag"); cinfo->setNoRefWraparoundConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_ref_wraparound_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_temporal_mvp_constraint_flag"); cinfo->setNoTemporalMvpConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_temporal_mvp_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_sbtmvp_constraint_flag"); cinfo->setNoSbtmvpConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_sbtmvp_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_amvr_constraint_flag"); cinfo->setNoAmvrConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_amvr_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_bdof_constraint_flag"); cinfo->setNoBdofConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_bdof_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_dmvr_constraint_flag"); cinfo->setNoDmvrConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_dmvr_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_cclm_constraint_flag"); cinfo->setNoCclmConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getMaxChromaFormatConstraintIdc() == 0) { CHECK(symbol == 0, "When max_chroma_format_constraint_idc is equal to 0, the value of no_cclm_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_mts_constraint_flag"); cinfo->setNoMtsConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_sbt_constraint_flag"); cinfo->setNoSbtConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_lfnst_constraint_flag"); cinfo->setNoLfnstConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_affine_motion_constraint_flag"); cinfo->setNoAffineMotionConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_affine_motion_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_mmvd_constraint_flag"); cinfo->setNoMmvdConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_mmvd_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_smvd_constraint_flag"); cinfo->setNoSmvdConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_smvd_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_prof_constraint_flag"); cinfo->setNoProfConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_prof_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_bcw_constraint_flag"); cinfo->setNoBcwConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_bcw_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_ibc_constraint_flag"); cinfo->setNoIbcConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_ciip_constraint_flag"); cinfo->setNoCiipConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_ciip_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_gpm_constraint_flag"); cinfo->setNoGeoConstraintFlag(symbol > 0 ? true : false); +#if !JVET_S0050_GCI if (cinfo->getIntraOnlyConstraintFlag() == 1) { CHECK(symbol == 0, "When intra_only_constraint_flag is equal to 1, the value of no_gpm_constraint_flag shall be equal to 1"); } +#endif READ_FLAG(symbol, "no_ladf_constraint_flag"); cinfo->setNoLadfConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_transform_skip_constraint_flag"); cinfo->setNoTransformSkipConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_bdpcm_constraint_flag"); cinfo->setNoBDPCMConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_palette_constraint_flag"); cinfo->setNoPaletteConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_act_constraint_flag"); cinfo->setNoActConstraintFlag(symbol > 0 ? true : false); +#if JVET_S0050_GCI + READ_FLAG(symbol, "no_explicit_scaling_list_constraint_flag"); cinfo->setNoExplicitScaleListConstraintFlag(symbol > 0 ? true : false); +#endif READ_FLAG(symbol, "no_lmcs_constraint_flag"); cinfo->setNoLmcsConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_qp_delta_constraint_flag"); cinfo->setNoQpDeltaConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_dep_quant_constraint_flag"); cinfo->setNoDepQuantConstraintFlag(symbol > 0 ? true : false); @@ -4558,6 +4598,9 @@ void HLSyntaxReader::parseConstraintInfo(ConstraintInfo *cinfo) READ_FLAG(symbol, "no_cra_constraint_flag"); cinfo->setNoCraConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_gdr_constraint_flag"); cinfo->setNoGdrConstraintFlag(symbol > 0 ? true : false); READ_FLAG(symbol, "no_aps_constraint_flag"); cinfo->setNoApsConstraintFlag(symbol > 0 ? true : false); +#if JVET_S0050_GCI + READ_FLAG(symbol, "no_virtual_boundaries_constraint_flag"); cinfo->setNoVirtualBoundaryConstraintFlag(symbol > 0 ? true : false); +#endif #if JVET_S0179_CONDITIONAL_SIGNAL_GCI READ_CODE(8, symbol, "gci_num_reserved_bits"); uint32_t const numReservedBits = symbol; diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index ab742a6549813a96abd999f544544dbcbcaae0d0..7c67f11157623f678b96a627a8850f2490f3401a 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -196,7 +196,10 @@ protected: bool m_noPaletteConstraintFlag; bool m_noActConstraintFlag; bool m_noLmcsConstraintFlag; - +#if JVET_S0050_GCI + bool m_noExplicitScaleListConstraintFlag; + bool m_noVirtualBoundaryConstraintFlag; +#endif bool m_bNoQtbttDualTreeIntraConstraintFlag; bool m_noPartitionConstraintsOverrideConstraintFlag; bool m_bNoSaoConstraintFlag; @@ -803,7 +806,12 @@ public: void setNoActConstraintFlag(bool bVal) { m_noActConstraintFlag = bVal; } bool getNoLmcsConstraintFlag() const { return m_noLmcsConstraintFlag; } void setNoLmcsConstraintFlag(bool bVal) { m_noLmcsConstraintFlag = bVal; } - +#if JVET_S0050_GCI + bool getNoExplicitScaleListConstraintFlag() const { return m_noExplicitScaleListConstraintFlag; } + void setNoExplicitScaleListConstraintFlag(bool bVal) { m_noExplicitScaleListConstraintFlag = bVal; } + bool getNoVirtualBoundaryConstraintFlag() const { return m_noVirtualBoundaryConstraintFlag; } + void setNoVirtualBoundaryConstraintFlag(bool bVal) { m_noVirtualBoundaryConstraintFlag = bVal; } +#endif bool getNoQtbttDualTreeIntraConstraintFlag() const { return m_bNoQtbttDualTreeIntraConstraintFlag; } void setNoQtbttDualTreeIntraConstraintFlag(bool bVal) { m_bNoQtbttDualTreeIntraConstraintFlag = bVal; } bool getNoPartitionConstraintsOverrideConstraintFlag() const { return m_noPartitionConstraintsOverrideConstraintFlag; } diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index f1e2de71a4ec6a32754b79b0cc1613042d6df98d..c2a66c66908d6337502b525a1ae08f0a86639224 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -1145,6 +1145,10 @@ void EncLib::xInitSPS( SPS& sps ) cinfo->setNoPaletteConstraintFlag (m_noPaletteConstraintFlag); cinfo->setNoActConstraintFlag (m_noActConstraintFlag); cinfo->setNoLmcsConstraintFlag (m_noLmcsConstraintFlag); +#if JVET_S0050_GCI + cinfo->setNoExplicitScaleListConstraintFlag(m_noExplicitScaleListConstraintFlag); + cinfo->setNoVirtualBoundaryConstraintFlag(m_noVirtualBoundaryConstraintFlag); +#endif cinfo->setNoQtbttDualTreeIntraConstraintFlag(m_bNoQtbttDualTreeIntraConstraintFlag); cinfo->setNoPartitionConstraintsOverrideConstraintFlag(m_noPartitionConstraintsOverrideConstraintFlag); cinfo->setNoSaoConstraintFlag(m_bNoSaoConstraintFlag); diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 2d20500b98206d26b7b9aa6bb7a14a1f81485f98..a1d1405b97592ff2a008eb258a2f2f8522bfc20b 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -2621,6 +2621,9 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) WRITE_FLAG(cinfo->getNoBDPCMConstraintFlag() ? 1 : 0, "no_bdpcm_constraint_flag"); WRITE_FLAG(cinfo->getNoPaletteConstraintFlag() ? 1 : 0, "no_palette_constraint_flag"); WRITE_FLAG(cinfo->getNoActConstraintFlag() ? 1 : 0, "no_act_constraint_flag"); +#if JVET_S0050_GCI + WRITE_FLAG(cinfo->getNoExplicitScaleListConstraintFlag() ? 1 : 0, "no_explicit_scaling_list_constraint_flag"); +#endif WRITE_FLAG(cinfo->getNoLmcsConstraintFlag() ? 1 : 0, "no_lmcs_constraint_flag"); WRITE_FLAG(cinfo->getNoQpDeltaConstraintFlag() ? 1 : 0, "no_qp_delta_constraint_flag"); WRITE_FLAG(cinfo->getNoDepQuantConstraintFlag() ? 1 : 0, "no_dep_quant_constraint_flag"); @@ -2634,6 +2637,9 @@ void HLSWriter::codeConstraintInfo ( const ConstraintInfo* cinfo ) WRITE_FLAG(cinfo->getNoCraConstraintFlag() ? 1 : 0, "no_cra_constraint_flag"); WRITE_FLAG(cinfo->getNoGdrConstraintFlag() ? 1 : 0, "no_gdr_constraint_flag"); WRITE_FLAG(cinfo->getNoApsConstraintFlag() ? 1 : 0, "no_aps_constraint_flag"); +#if JVET_S0050_GCI + WRITE_FLAG(cinfo->getNoVirtualBoundaryConstraintFlag() ? 1 : 0, "no_virtual_boundaries_constraint_flag"); +#endif #if JVET_S0179_CONDITIONAL_SIGNAL_GCI //The value of gci_num_reserved_bits shall be equal to 0 in bitstreams conforming to this version of this Specification. //Other values of gci_num_reserved_bits are reserved for future use by ITU-T | ISO/IEC.