diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index c2986528df7067ae5c562207e5867fbe64341e9f..815fd1efbc77c1788050d648d8fb6064978b1aa3 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -224,10 +224,24 @@ void Slice::inheritFromPicHeader( PicHeader *picHeader, const PPS *pps, const SP setDeblockingFilterDisable( picHeader->getDeblockingFilterDisable() ); setDeblockingFilterBetaOffsetDiv2( picHeader->getDeblockingFilterBetaOffsetDiv2() ); setDeblockingFilterTcOffsetDiv2( picHeader->getDeblockingFilterTcOffsetDiv2() ); - setDeblockingFilterCbBetaOffsetDiv2( picHeader->getDeblockingFilterCbBetaOffsetDiv2() ); - setDeblockingFilterCbTcOffsetDiv2( picHeader->getDeblockingFilterCbTcOffsetDiv2() ); - setDeblockingFilterCrBetaOffsetDiv2( picHeader->getDeblockingFilterCrBetaOffsetDiv2() ); - setDeblockingFilterCrTcOffsetDiv2( picHeader->getDeblockingFilterCrTcOffsetDiv2() ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if (pps->getPPSChromaToolFlag()) + { +#endif + setDeblockingFilterCbBetaOffsetDiv2 ( picHeader->getDeblockingFilterCbBetaOffsetDiv2() ); + setDeblockingFilterCbTcOffsetDiv2 ( picHeader->getDeblockingFilterCbTcOffsetDiv2() ); + setDeblockingFilterCrBetaOffsetDiv2 ( picHeader->getDeblockingFilterCrBetaOffsetDiv2() ); + setDeblockingFilterCrTcOffsetDiv2 ( picHeader->getDeblockingFilterCrTcOffsetDiv2() ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + } + else + { + setDeblockingFilterCbBetaOffsetDiv2 ( getDeblockingFilterBetaOffsetDiv2() ); + setDeblockingFilterCbTcOffsetDiv2 ( getDeblockingFilterTcOffsetDiv2() ); + setDeblockingFilterCrBetaOffsetDiv2 ( getDeblockingFilterBetaOffsetDiv2() ); + setDeblockingFilterCrTcOffsetDiv2 ( getDeblockingFilterTcOffsetDiv2() ); + } +#endif setSaoEnabledFlag(CHANNEL_TYPE_LUMA, picHeader->getSaoEnabledFlag(CHANNEL_TYPE_LUMA)); setSaoEnabledFlag(CHANNEL_TYPE_CHROMA, picHeader->getSaoEnabledFlag(CHANNEL_TYPE_CHROMA)); @@ -2675,6 +2689,9 @@ PPS::PPS() , m_SPSId (0) , m_picInitQPMinus26 (0) , m_useDQP (false) +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING +, m_usePPSChromaTool (false) +#endif , m_bSliceChromaQpFlag (false) , m_chromaCbQpOffset (0) , m_chromaCrQpOffset (0) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 1dbe53ff1b5311482f64942b6e5627a7caa0cfb7..97d5b52aad7c715885c27a0e7b4456cebd0dc33f 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -51,6 +51,8 @@ #include <cassert> //########### place macros to be removed in next cycle below this line ############### +#define JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING 1 // JVET-R0078: disable chroma DBF offset signalling + #define JVET_R0194_CONSTRAINT_PS_SHARING_REFERENCING 1 // JVET-R0194: Constraint that if slice at layer A refer to PS at layer B, then all OLS that contains layer A must contain layer B as well. #define JVET_R0162_WRAPAROUND_OFFSET_SIGNALING 1 // JVET-R0162 proposal 1 : signal "picture width minus wraparound offset" instead of "wraparound offset" diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index cf70afbefdebfc20fb0b3a710ce07c3b5a5923e7..d38bc7b5e384add6fd51063909d416a530ade96d 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -865,21 +865,35 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS ) CHECK( pcPPS->getDeblockingFilterTcOffsetDiv2() < -12 || pcPPS->getDeblockingFilterTcOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); - READ_SVLC( iCode, "pps_cb_beta_offset_div2"); pcPPS->setDeblockingFilterCbBetaOffsetDiv2( iCode ); - CHECK( pcPPS->getDeblockingFilterCbBetaOffsetDiv2() < -12 || - pcPPS->getDeblockingFilterCbBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if( pcPPS->getPPSChromaToolFlag() ) + { +#endif + READ_SVLC( iCode, "pps_cb_beta_offset_div2" ); pcPPS->setDeblockingFilterCbBetaOffsetDiv2( iCode ); + CHECK( pcPPS->getDeblockingFilterCbBetaOffsetDiv2() < -12 || + pcPPS->getDeblockingFilterCbBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); - READ_SVLC( iCode, "pps_cb_tc_offset_div2"); pcPPS->setDeblockingFilterCbTcOffsetDiv2( iCode ); - CHECK( pcPPS->getDeblockingFilterCbTcOffsetDiv2() < -12 || - pcPPS->getDeblockingFilterCbTcOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); + READ_SVLC( iCode, "pps_cb_tc_offset_div2" ); pcPPS->setDeblockingFilterCbTcOffsetDiv2( iCode ); + CHECK( pcPPS->getDeblockingFilterCbTcOffsetDiv2() < -12 || + pcPPS->getDeblockingFilterCbTcOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); - READ_SVLC( iCode, "pps_cr_beta_offset_div2"); pcPPS->setDeblockingFilterCrBetaOffsetDiv2( iCode ); - CHECK( pcPPS->getDeblockingFilterCrBetaOffsetDiv2() < -12 || - pcPPS->getDeblockingFilterCrBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); + READ_SVLC( iCode, "pps_cr_beta_offset_div2") ; pcPPS->setDeblockingFilterCrBetaOffsetDiv2( iCode ); + CHECK( pcPPS->getDeblockingFilterCrBetaOffsetDiv2() < -12 || + pcPPS->getDeblockingFilterCrBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); - READ_SVLC( iCode, "pps_cr_tc_offset_div2"); pcPPS->setDeblockingFilterCrTcOffsetDiv2( iCode ); - CHECK( pcPPS->getDeblockingFilterCrTcOffsetDiv2() < -12 || - pcPPS->getDeblockingFilterCrTcOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); + READ_SVLC( iCode, "pps_cr_tc_offset_div2" ); pcPPS->setDeblockingFilterCrTcOffsetDiv2( iCode ); + CHECK(pcPPS->getDeblockingFilterCrTcOffsetDiv2() < -12 || + pcPPS->getDeblockingFilterCrTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + } + else + { + pcPPS->setDeblockingFilterCbBetaOffsetDiv2 ( pcPPS->getDeblockingFilterBetaOffsetDiv2() ); + pcPPS->setDeblockingFilterCbTcOffsetDiv2 ( pcPPS->getDeblockingFilterTcOffsetDiv2() ); + pcPPS->setDeblockingFilterCrBetaOffsetDiv2 ( pcPPS->getDeblockingFilterBetaOffsetDiv2() ); + pcPPS->setDeblockingFilterCrTcOffsetDiv2 ( pcPPS->getDeblockingFilterTcOffsetDiv2() ); + } +#endif } } else @@ -3443,25 +3457,39 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag CHECK( picHeader->getDeblockingFilterTcOffsetDiv2() < -12 || picHeader->getDeblockingFilterTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); - READ_SVLC( iCode, "ph_cb_beta_offset_div2" ); - picHeader->setDeblockingFilterCbBetaOffsetDiv2(iCode); - CHECK( picHeader->getDeblockingFilterCbBetaOffsetDiv2() < -12 || - picHeader->getDeblockingFilterCbBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration"); - - READ_SVLC( iCode, "ph_cb_tc_offset_div2" ); - picHeader->setDeblockingFilterCbTcOffsetDiv2(iCode); - CHECK( picHeader->getDeblockingFilterCbTcOffsetDiv2() < -12 || - picHeader->getDeblockingFilterCbTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); - - READ_SVLC( iCode, "ph_cr_beta_offset_div2" ); - picHeader->setDeblockingFilterCrBetaOffsetDiv2(iCode); - CHECK( picHeader->getDeblockingFilterCrBetaOffsetDiv2() < -12 || - picHeader->getDeblockingFilterCrBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration"); - - READ_SVLC( iCode, "ph_cr_tc_offset_div2" ); - picHeader->setDeblockingFilterCrTcOffsetDiv2(iCode); - CHECK( picHeader->getDeblockingFilterCrTcOffsetDiv2() < -12 || - picHeader->getDeblockingFilterCrTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if( pps->getPPSChromaToolFlag() ) + { +#endif + READ_SVLC( iCode, "ph_cb_beta_offset_div2" ); + picHeader->setDeblockingFilterCbBetaOffsetDiv2(iCode); + CHECK( picHeader->getDeblockingFilterCbBetaOffsetDiv2() < -12 || + picHeader->getDeblockingFilterCbBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration"); + + READ_SVLC( iCode, "ph_cb_tc_offset_div2" ); + picHeader->setDeblockingFilterCbTcOffsetDiv2(iCode); + CHECK( picHeader->getDeblockingFilterCbTcOffsetDiv2() < -12 || + picHeader->getDeblockingFilterCbTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); + + READ_SVLC( iCode, "ph_cr_beta_offset_div2" ); + picHeader->setDeblockingFilterCrBetaOffsetDiv2(iCode); + CHECK( picHeader->getDeblockingFilterCrBetaOffsetDiv2() < -12 || + picHeader->getDeblockingFilterCrBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration"); + + READ_SVLC( iCode, "ph_cr_tc_offset_div2" ); + picHeader->setDeblockingFilterCrTcOffsetDiv2(iCode); + CHECK( picHeader->getDeblockingFilterCrTcOffsetDiv2() < -12 || + picHeader->getDeblockingFilterCrTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + } + else + { + picHeader->setDeblockingFilterCbBetaOffsetDiv2 ( picHeader->getDeblockingFilterBetaOffsetDiv2() ); + picHeader->setDeblockingFilterCbTcOffsetDiv2 ( picHeader->getDeblockingFilterTcOffsetDiv2() ); + picHeader->setDeblockingFilterCrBetaOffsetDiv2 ( picHeader->getDeblockingFilterBetaOffsetDiv2() ); + picHeader->setDeblockingFilterCrTcOffsetDiv2 ( picHeader->getDeblockingFilterTcOffsetDiv2() ); + } +#endif } } else @@ -4419,19 +4447,33 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par CHECK( pcSlice->getDeblockingFilterTcOffsetDiv2() < -12 || pcSlice->getDeblockingFilterTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); - READ_SVLC( iCode, "slice_cb_beta_offset_div2" ); pcSlice->setDeblockingFilterCbBetaOffsetDiv2( iCode ); - CHECK( pcSlice->getDeblockingFilterCbBetaOffsetDiv2() < -12 || - pcSlice->getDeblockingFilterCbBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration"); - READ_SVLC( iCode, "slice_cb_tc_offset_div2" ); pcSlice->setDeblockingFilterCbTcOffsetDiv2( iCode ); - CHECK( pcSlice->getDeblockingFilterCbTcOffsetDiv2() < -12 || - pcSlice->getDeblockingFilterCbTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); - - READ_SVLC( iCode, "slice_cr_beta_offset_div2" ); pcSlice->setDeblockingFilterCrBetaOffsetDiv2( iCode ); - CHECK( pcSlice->getDeblockingFilterCrBetaOffsetDiv2() < -12 || - pcSlice->getDeblockingFilterCrBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration"); - READ_SVLC( iCode, "slice_cr_tc_offset_div2" ); pcSlice->setDeblockingFilterCrTcOffsetDiv2( iCode ); - CHECK( pcSlice->getDeblockingFilterCrTcOffsetDiv2() < -12 || - pcSlice->getDeblockingFilterCrTcOffsetDiv2() > 12, "Invalid deblocking filter configuration"); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if( pps->getPPSChromaToolFlag() ) + { +#endif + READ_SVLC( iCode, "slice_cb_beta_offset_div2" ); pcSlice->setDeblockingFilterCbBetaOffsetDiv2( iCode ); + CHECK( pcSlice->getDeblockingFilterCbBetaOffsetDiv2() < -12 || + pcSlice->getDeblockingFilterCbBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); + READ_SVLC( iCode, "slice_cb_tc_offset_div2" ); pcSlice->setDeblockingFilterCbTcOffsetDiv2( iCode ); + CHECK( pcSlice->getDeblockingFilterCbTcOffsetDiv2() < -12 || + pcSlice->getDeblockingFilterCbTcOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); + + READ_SVLC( iCode, "slice_cr_beta_offset_div2" ); pcSlice->setDeblockingFilterCrBetaOffsetDiv2( iCode ); + CHECK( pcSlice->getDeblockingFilterCrBetaOffsetDiv2() < -12 || + pcSlice->getDeblockingFilterCrBetaOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); + READ_SVLC( iCode, "slice_cr_tc_offset_div2" ); pcSlice->setDeblockingFilterCrTcOffsetDiv2( iCode ); + CHECK( pcSlice->getDeblockingFilterCrTcOffsetDiv2() < -12 || + pcSlice->getDeblockingFilterCrTcOffsetDiv2() > 12, "Invalid deblocking filter configuration" ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + } + else + { + pcSlice->setDeblockingFilterCbBetaOffsetDiv2 ( pcSlice->getDeblockingFilterBetaOffsetDiv2() ); + pcSlice->setDeblockingFilterCbTcOffsetDiv2 ( pcSlice->getDeblockingFilterTcOffsetDiv2() ); + pcSlice->setDeblockingFilterCrBetaOffsetDiv2 ( pcSlice->getDeblockingFilterBetaOffsetDiv2() ); + pcSlice->setDeblockingFilterCrTcOffsetDiv2 ( pcSlice->getDeblockingFilterTcOffsetDiv2() ); + } +#endif } } else diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index f41c61ec452f19ef7888d9029f24b79cf6753dab..3f5e3970d69648e849c751b63a42c8a250ab11b9 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -1477,10 +1477,12 @@ void EncLib::xInitPPS(PPS &pps, const SPS &sps) bUseDQP = true; } #endif +#if !JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING if (sps.getChromaFormatIdc() != CHROMA_400) { - pps.setPPSChromaToolFlag (true); + pps.setPPSChromaToolFlag(true); } +#endif #if ENABLE_QPA if (getUsePerceptQPA() && !bUseDQP) { @@ -1534,7 +1536,11 @@ void EncLib::xInitPPS(PPS &pps, const SPS &sps) pps.setPicInitQPMinus26( std::min( maxDQP, std::max( minDQP, baseQp ) )); } +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if( sps.getJointCbCrEnabledFlag() == false || getChromaFormatIdc() == CHROMA_400 || m_chromaCbCrQpOffset == 0 ) +#else if (sps.getJointCbCrEnabledFlag() == false || getChromaFormatIdc() == CHROMA_400) +#endif { pps.setJointCbCrQpOffsetPresentFlag(false); } @@ -1722,6 +1728,28 @@ void EncLib::xInitPPS(PPS &pps, const SPS &sps) pps.setCabacInitPresentFlag(CABAC_INIT_PRESENT_FLAG); pps.setLoopFilterAcrossSlicesEnabledFlag( m_bLFCrossSliceBoundaryFlag ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + bool chromaQPOffsetNotZero = false; + if( pps.getQpOffset(COMPONENT_Cb) != 0 || pps.getQpOffset(COMPONENT_Cr) != 0 || pps.getJointCbCrQpOffsetPresentFlag() || pps.getSliceChromaQpFlag() || pps.getCuChromaQpOffsetListEnabledFlag() ) + { + chromaQPOffsetNotZero = true; + } + bool chromaDbfOffsetNotSameAsLuma = true; + if( pps.getDeblockingFilterCbBetaOffsetDiv2() == pps.getDeblockingFilterBetaOffsetDiv2() && pps.getDeblockingFilterCrBetaOffsetDiv2() == pps.getDeblockingFilterBetaOffsetDiv2() + && pps.getDeblockingFilterCbTcOffsetDiv2() == pps.getDeblockingFilterTcOffsetDiv2() && pps.getDeblockingFilterCrTcOffsetDiv2() == pps.getDeblockingFilterTcOffsetDiv2() ) + { + chromaDbfOffsetNotSameAsLuma = false; + } + const uint32_t chromaArrayType = (int)sps.getSeparateColourPlaneFlag() ? 0 : sps.getChromaFormatIdc(); + if( ( chromaArrayType != CHROMA_400 ) && ( chromaQPOffsetNotZero || chromaDbfOffsetNotSameAsLuma ) ) + { + pps.setPPSChromaToolFlag(true); + } + else + { + pps.setPPSChromaToolFlag(false); + } +#endif int histogram[MAX_NUM_REF + 1]; for( int i = 0; i <= MAX_NUM_REF; i++ ) diff --git a/source/Lib/EncoderLib/EncSlice.cpp b/source/Lib/EncoderLib/EncSlice.cpp index c821cdbe78ee9a95f5181fc9cca78ee8d70ea6cf..89c2bbedf4c5b3d1ac3d9d00d791d3b34de5c7e4 100644 --- a/source/Lib/EncoderLib/EncSlice.cpp +++ b/source/Lib/EncoderLib/EncSlice.cpp @@ -661,10 +661,24 @@ void EncSlice::initEncSlice(Picture* pcPic, const int pocLast, const int pocCurr { rpcSlice->setDeblockingFilterBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_betaOffsetDiv2 + m_pcCfg->getLoopFilterBetaOffset() ); rpcSlice->setDeblockingFilterTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_tcOffsetDiv2 + m_pcCfg->getLoopFilterTcOffset() ); - rpcSlice->setDeblockingFilterCbBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_CbBetaOffsetDiv2 + m_pcCfg->getLoopFilterCbBetaOffset() ); - rpcSlice->setDeblockingFilterCbTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_CbTcOffsetDiv2 + m_pcCfg->getLoopFilterCbTcOffset() ); - rpcSlice->setDeblockingFilterCrBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_CrBetaOffsetDiv2 + m_pcCfg->getLoopFilterCrBetaOffset() ); - rpcSlice->setDeblockingFilterCrTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_CrTcOffsetDiv2 + m_pcCfg->getLoopFilterCrTcOffset() ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if( rpcSlice->getPPS()->getPPSChromaToolFlag() ) + { +#endif + rpcSlice->setDeblockingFilterCbBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_CbBetaOffsetDiv2 + m_pcCfg->getLoopFilterCbBetaOffset() ); + rpcSlice->setDeblockingFilterCbTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_CbTcOffsetDiv2 + m_pcCfg->getLoopFilterCbTcOffset() ); + rpcSlice->setDeblockingFilterCrBetaOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_CrBetaOffsetDiv2 + m_pcCfg->getLoopFilterCrBetaOffset() ); + rpcSlice->setDeblockingFilterCrTcOffsetDiv2( m_pcCfg->getGOPEntry(iGOPid).m_CrTcOffsetDiv2 + m_pcCfg->getLoopFilterCrTcOffset() ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + } + else + { + rpcSlice->setDeblockingFilterCbBetaOffsetDiv2( rpcSlice->getDeblockingFilterBetaOffsetDiv2() ); + rpcSlice->setDeblockingFilterCbTcOffsetDiv2( rpcSlice->getDeblockingFilterTcOffsetDiv2() ); + rpcSlice->setDeblockingFilterCrBetaOffsetDiv2( rpcSlice->getDeblockingFilterBetaOffsetDiv2() ); + rpcSlice->setDeblockingFilterCrTcOffsetDiv2( rpcSlice->getDeblockingFilterTcOffsetDiv2() ); + } +#endif } else { diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index abc25a24c698076a6913f55e8437c460372095a1..96e0d4a95c2097f78c66362e93889febb14c2ff8 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -498,13 +498,19 @@ void HLSWriter::codePPS( const PPS* pcPPS ) { WRITE_SVLC( pcPPS->getDeblockingFilterBetaOffsetDiv2(), "pps_beta_offset_div2" ); WRITE_SVLC( pcPPS->getDeblockingFilterTcOffsetDiv2(), "pps_tc_offset_div2" ); - WRITE_SVLC( pcPPS->getDeblockingFilterCbBetaOffsetDiv2(), "pps_cb_beta_offset_div2" ); - WRITE_SVLC( pcPPS->getDeblockingFilterCbTcOffsetDiv2(), "pps_cb_tc_offset_div2" ); - WRITE_SVLC( pcPPS->getDeblockingFilterCrBetaOffsetDiv2(), "pps_cr_beta_offset_div2" ); - WRITE_SVLC( pcPPS->getDeblockingFilterCrTcOffsetDiv2(), "pps_cr_tc_offset_div2" ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if( pcPPS->getPPSChromaToolFlag() ) + { +#endif + WRITE_SVLC( pcPPS->getDeblockingFilterCbBetaOffsetDiv2(), "pps_cb_beta_offset_div2" ); + WRITE_SVLC( pcPPS->getDeblockingFilterCbTcOffsetDiv2(), "pps_cb_tc_offset_div2" ); + WRITE_SVLC( pcPPS->getDeblockingFilterCrBetaOffsetDiv2(), "pps_cr_beta_offset_div2" ); + WRITE_SVLC( pcPPS->getDeblockingFilterCrTcOffsetDiv2(), "pps_cr_tc_offset_div2" ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + } +#endif } } - #if JVET_R0113_AND_JVET_R0106_PPS_CLEANUP if (!pcPPS->getNoPicPartitionFlag()) { @@ -2176,10 +2182,17 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB { WRITE_SVLC( picHeader->getDeblockingFilterBetaOffsetDiv2(), "ph_beta_offset_div2" ); WRITE_SVLC( picHeader->getDeblockingFilterTcOffsetDiv2(), "ph_tc_offset_div2" ); - WRITE_SVLC( picHeader->getDeblockingFilterCbBetaOffsetDiv2(), "ph_cb_beta_offset_div2" ); - WRITE_SVLC( picHeader->getDeblockingFilterCbTcOffsetDiv2(), "ph_cb_tc_offset_div2" ); - WRITE_SVLC( picHeader->getDeblockingFilterCrBetaOffsetDiv2(), "ph_cr_beta_offset_div2" ); - WRITE_SVLC( picHeader->getDeblockingFilterCrTcOffsetDiv2(), "ph_cr_tc_offset_div2" ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if( pps->getPPSChromaToolFlag() ) + { +#endif + WRITE_SVLC( picHeader->getDeblockingFilterCbBetaOffsetDiv2(), "ph_cb_beta_offset_div2" ); + WRITE_SVLC( picHeader->getDeblockingFilterCbTcOffsetDiv2(), "ph_cb_tc_offset_div2" ); + WRITE_SVLC( picHeader->getDeblockingFilterCrBetaOffsetDiv2(), "ph_cr_beta_offset_div2" ); + WRITE_SVLC( picHeader->getDeblockingFilterCrTcOffsetDiv2(), "ph_cr_tc_offset_div2" ); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + } +#endif } } else @@ -2621,10 +2634,17 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) { WRITE_SVLC (pcSlice->getDeblockingFilterBetaOffsetDiv2(), "slice_beta_offset_div2"); WRITE_SVLC (pcSlice->getDeblockingFilterTcOffsetDiv2(), "slice_tc_offset_div2"); - WRITE_SVLC (pcSlice->getDeblockingFilterCbBetaOffsetDiv2(), "slice_cb_beta_offset_div2"); - WRITE_SVLC (pcSlice->getDeblockingFilterCbTcOffsetDiv2(), "slice_cb_tc_offset_div2"); - WRITE_SVLC (pcSlice->getDeblockingFilterCrBetaOffsetDiv2(), "slice_cr_beta_offset_div2"); - WRITE_SVLC (pcSlice->getDeblockingFilterCrTcOffsetDiv2(), "slice_cr_tc_offset_div2"); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + if( pcSlice->getPPS()->getPPSChromaToolFlag() ) + { +#endif + WRITE_SVLC (pcSlice->getDeblockingFilterCbBetaOffsetDiv2(), "slice_cb_beta_offset_div2"); + WRITE_SVLC (pcSlice->getDeblockingFilterCbTcOffsetDiv2(), "slice_cb_tc_offset_div2"); + WRITE_SVLC (pcSlice->getDeblockingFilterCrBetaOffsetDiv2(), "slice_cr_beta_offset_div2"); + WRITE_SVLC (pcSlice->getDeblockingFilterCrTcOffsetDiv2(), "slice_cr_tc_offset_div2"); +#if JVET_R0078_DISABLE_CHROMA_DBF_OFFSET_SINGALLING + } +#endif } } else