diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 2f43e0c0c74696bd4ff9702bbe67cf0e2ecbaffe..13d88d7961d534e421534b6509cffd85e46acaa9 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -1434,8 +1434,10 @@ private: bool m_bTemporalIdNestingFlag; // temporal_id_nesting_flag bool m_scalingListEnabledFlag; +#if DQ_SDH_SIGNALLING bool m_depQuantEnabledFlag; //!< dependent quantization enabled flag bool m_signDataHidingEnabledFlag; //!< sign data hiding enabled flag +#endif #if JVET_Q0246_VIRTUAL_BOUNDARY_ENABLE_FLAG bool m_virtualBoundariesEnabledFlag; //!< Enable virtual boundaries tool bool m_virtualBoundariesPresentFlag; //!< disable loop filtering across virtual boundaries @@ -1788,10 +1790,12 @@ void setCCALFEnabledFlag( bool b ) bool getScalingListFlag() const { return m_scalingListEnabledFlag; } void setScalingListFlag( bool b ) { m_scalingListEnabledFlag = b; } +#if DQ_SDH_SIGNALLING void setDepQuantEnabledFlag(bool b) { m_depQuantEnabledFlag = b; } bool getDepQuantEnabledFlag() const { return m_depQuantEnabledFlag; } void setSignDataHidingEnabledFlag(bool b) { m_signDataHidingEnabledFlag = b; } bool getSignDataHidingEnabledFlag() const { return m_signDataHidingEnabledFlag; } +#endif #if JVET_Q0246_VIRTUAL_BOUNDARY_ENABLE_FLAG void setVirtualBoundariesEnabledFlag( bool b ) { m_virtualBoundariesEnabledFlag = b; } bool getVirtualBoundariesEnabledFlag() const { return m_virtualBoundariesEnabledFlag; } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 9bb5a7431770e68b2bada8721b2afcf5ceb2ebec..3897957d5c3f58b24a273c202d4b82512a7dea0b 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -50,6 +50,8 @@ #include <assert.h> #include <cassert> +#define DQ_SDH_SIGNALLING 1 // Merge request !1506: add DQ and SDH signalling in SPS to align with spec. + #define JVET_Q0237_STSA_TID_ZERO_DEPLAYER 1 // JVET-Q0237: STSA picture with TemporalId equal to 0 in a dependent layer #define JVET_Q0798_SPS_NUMBER_MERGE_CANDIDATE 1 // JVET-Q0798: signal the number of merge candidates in SPS diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 581710d17e383f8a9ea264b784a9ee51243d5ed3..c5a320431658344035a7b56148e2273a3da3e639 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -2367,13 +2367,13 @@ void HLSyntaxReader::parseSPS(SPS* pcSPS) #else READ_FLAG( uiCode, "sps_scaling_list_enabled_flag" ); pcSPS->setScalingListFlag ( uiCode ); #endif - +#if DQ_SDH_SIGNALLING READ_FLAG(uiCode, "sps_dep_quant_enabled_flag"); pcSPS->setDepQuantEnabledFlag(uiCode); if (!pcSPS->getDepQuantEnabledFlag()) { READ_FLAG(uiCode, "sps_sign_data_hiding_enabled_flag"); pcSPS->setSignDataHidingEnabledFlag(uiCode); } - +#endif #if JVET_Q0246_VIRTUAL_BOUNDARY_ENABLE_FLAG READ_FLAG( uiCode, "sps_virtual_boundaries_enabled_flag" ); pcSPS->setVirtualBoundariesEnabledFlag( uiCode != 0 ); if( pcSPS->getVirtualBoundariesEnabledFlag() ) @@ -3959,22 +3959,37 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag #endif // dependent quantization -#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS - if (!pps->getPPSDepQuantEnabledIdc()) +#if DQ_SDH_SIGNALLING + if (sps->getDepQuantEnabledFlag()) { +#endif +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS + if (!pps->getPPSDepQuantEnabledIdc()) + { + READ_FLAG(uiCode, "ph_dep_quant_enabled_flag"); + } + else + { + uiCode = pps->getPPSDepQuantEnabledIdc() - 1; + } +#else READ_FLAG(uiCode, "ph_dep_quant_enabled_flag"); +#endif + picHeader->setDepQuantEnabledFlag(uiCode != 0); +#if DQ_SDH_SIGNALLING } else { - uiCode = pps->getPPSDepQuantEnabledIdc() - 1; + picHeader->setDepQuantEnabledFlag(false); } -#else - READ_FLAG(uiCode, "ph_dep_quant_enabled_flag"); #endif - picHeader->setDepQuantEnabledFlag( uiCode != 0 ); // sign data hiding +#if DQ_SDH_SIGNALLING + if (sps->getSignDataHidingEnabledFlag() && !picHeader->getDepQuantEnabledFlag()) +#else if( !picHeader->getDepQuantEnabledFlag() ) +#endif { READ_FLAG( uiCode, "pic_sign_data_hiding_enabled_flag" ); picHeader->setSignDataHidingEnabledFlag( uiCode != 0 ); diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index e8faa443d0741578f70942ba420b7995c2d32990..73e074cf3b29b576b5d5c487aab211877a53e369 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -1583,13 +1583,13 @@ void EncLib::xInitSPS( SPS& sps, VPS& vps ) } } #endif - +#if DQ_SDH_SIGNALLING sps.setDepQuantEnabledFlag( m_DepQuantEnabledFlag ); if (!sps.getDepQuantEnabledFlag()) { sps.setSignDataHidingEnabledFlag( m_SignDataHidingEnabledFlag ); } - +#endif #if JVET_Q0246_VIRTUAL_BOUNDARY_ENABLE_FLAG sps.setVirtualBoundariesEnabledFlag( m_virtualBoundariesEnabledFlag ); if( sps.getVirtualBoundariesEnabledFlag() ) @@ -2046,8 +2046,13 @@ void EncLib::xInitPicHeader(PicHeader &picHeader, const SPS &sps, const PPS &pps picHeader.setMaxTTSizes( sps.getMaxTTSizes() ); // quantization +#if DQ_SDH_SIGNALLING picHeader.setDepQuantEnabledFlag( sps.getDepQuantEnabledFlag() ); picHeader.setSignDataHidingEnabledFlag( sps.getSignDataHidingEnabledFlag() ); +#else + picHeader.setDepQuantEnabledFlag( getDepQuantEnabledFlag() ); + picHeader.setSignDataHidingEnabledFlag( getSignDataHidingEnabledFlag() ); +#endif bool bUseDQP = (getCuQpDeltaSubdiv() > 0)? true : false; diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index a77da8c7f44ab03df27503272e79e2195dad7891..303455d5301bd26fbe5a25bbf62ef2baec9e6b72 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1552,13 +1552,13 @@ void HLSWriter::codeSPS( const SPS* pcSPS ) // KJS: remove scaling lists? WRITE_FLAG( pcSPS->getScalingListFlag() ? 1 : 0, "sps_scaling_list_enabled_flag" ); - +#if DQ_SDH_SIGNALLING WRITE_FLAG(pcSPS->getDepQuantEnabledFlag(), "sps_dep_quant_enabled_flag"); if (!pcSPS->getDepQuantEnabledFlag()) { WRITE_FLAG(pcSPS->getSignDataHidingEnabledFlag(), "sps_sign_data_hiding_enabled_flag"); } - +#endif #if JVET_Q0246_VIRTUAL_BOUNDARY_ENABLE_FLAG WRITE_FLAG( pcSPS->getVirtualBoundariesEnabledFlag(), "sps_virtual_boundaries_enabled_flag" ); if( pcSPS->getVirtualBoundariesEnabledFlag() ) @@ -2762,20 +2762,35 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) #endif // dependent quantization -#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS - if (!pps->getPPSDepQuantEnabledIdc()) +#if DQ_SDH_SIGNALLING + if (sps->getDepQuantEnabledFlag()) { +#endif +#if !JVET_Q0482_REMOVE_CONSTANT_PARAMS + if (!pps->getPPSDepQuantEnabledIdc()) + { + WRITE_FLAG(picHeader->getDepQuantEnabledFlag(), "ph_dep_quant_enabled_flag"); + } + else + { + picHeader->setDepQuantEnabledFlag(pps->getPPSDepQuantEnabledIdc() - 1); + } +#else WRITE_FLAG(picHeader->getDepQuantEnabledFlag(), "ph_dep_quant_enabled_flag"); +#endif +#if DQ_SDH_SIGNALLING } else { - picHeader->setDepQuantEnabledFlag( pps->getPPSDepQuantEnabledIdc() - 1 ); + picHeader->setDepQuantEnabledFlag(false); } -#else - WRITE_FLAG(picHeader->getDepQuantEnabledFlag(), "ph_dep_quant_enabled_flag"); #endif // sign data hiding +#if DQ_SDH_SIGNALLING + if (sps->getSignDataHidingEnabledFlag() && !picHeader->getDepQuantEnabledFlag()) +#else if( !picHeader->getDepQuantEnabledFlag() ) +#endif { WRITE_FLAG( picHeader->getSignDataHidingEnabledFlag(), "pic_sign_data_hiding_enabled_flag" ); }