From e1af3f03472a137b4d7f63033e43ab96a03e59e7 Mon Sep 17 00:00:00 2001 From: ywchen <yiwenchen@kuaishou.com> Date: Mon, 4 May 2020 12:36:41 -0700 Subject: [PATCH] Integration of R0324 to modfy PH syntax condition --- source/Lib/CommonLib/TypeDef.h | 2 + source/Lib/DecoderLib/VLCReader.cpp | 64 ++++++++++++++++++++++++++++- source/Lib/EncoderLib/VLCWriter.cpp | 26 +++++++++++- 3 files changed, 90 insertions(+), 2 deletions(-) diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 4b8af774b..b7468eab0 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 R0324_PH_SYNTAX_CONDITION_MODIFY 1 // JVET-R0324 add conditions on PH syntax to conder whether current pic is bi-predictive picture + #define JVET_R0330_CRS_CLIP_REM 1 // JVET-R0330: Remove redundant clipping in chroma residual scaling factor derivation #define JVET_R0059_RPL_CLEANUP 1 // JVET-R0059 aspect 2: Condition the signalling of ltrp_in_header_flag[ listIdx ][ rplsIdx ]. diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 550b5e23d..e6bf1df10 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -2771,8 +2771,11 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { picHeader->setEnableTMVPFlag(false); } - +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (picHeader->getEnableTMVPFlag() && pps->getRplInfoInPhFlag() && picHeader->getRPL(1)->getNumRefEntries() > 0) +#else if (picHeader->getEnableTMVPFlag() && pps->getRplInfoInPhFlag()) +#endif { READ_CODE( 1, uiCode, "ph_collocated_from_l0_flag"); picHeader->setPicColFromL0Flag(uiCode); @@ -2787,13 +2790,31 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag picHeader->setColRefIdx(0); } } +#if R0324_PH_SYNTAX_CONDITION_MODIFY + else if (picHeader->getEnableTMVPFlag() && pps->getRplInfoInPhFlag() && picHeader->getRPL(1)->getNumRefEntries() == 0) + { + picHeader->setPicColFromL0Flag(1); + } +#else else { picHeader->setPicColFromL0Flag(0); } +#endif // mvd L1 zero flag + #if R0324_PH_SYNTAX_CONDITION_MODIFY + if (!pps->getRplInfoInPhFlag() || picHeader->getRPL(1)->getNumRefEntries() > 0) + { + READ_FLAG(uiCode, "pic_mvd_l1_zero_flag"); + } + else + { + uiCode = 1; + } +#else READ_FLAG(uiCode, "mvd_l1_zero_flag"); +#endif picHeader->setMvdL1ZeroFlag( uiCode != 0 ); // merge candidate list size @@ -2819,23 +2840,53 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag } // picture level BDOF disable flags +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (sps->getBdofControlPresentFlag() && (!pps->getRplInfoInPhFlag() || picHeader->getRPL(1)->getNumRefEntries() > 0)) +#else if (sps->getBdofControlPresentFlag()) +#endif { READ_FLAG(uiCode, "ph_disable_bdof_flag"); picHeader->setDisBdofFlag(uiCode != 0); } else { +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (sps->getBdofControlPresentFlag() == 0) + { + picHeader->setDisBdofFlag(1 - (int)(sps->getBDOFEnabledFlag())); + } + else + { + picHeader->setDisBdofFlag(1); + } +#else picHeader->setDisBdofFlag(0); +#endif } // picture level DMVR disable flags +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (sps->getDmvrControlPresentFlag() && (!pps->getRplInfoInPhFlag() || picHeader->getRPL(1)->getNumRefEntries() > 0)) +#else if (sps->getDmvrControlPresentFlag()) +#endif { READ_FLAG(uiCode, "ph_disable_dmvr_flag"); picHeader->setDisDmvrFlag(uiCode != 0); } else { +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (sps->getDmvrControlPresentFlag() == 0) + { + picHeader->setDisDmvrFlag(1 - (int)(sps->getUseDMVR())); + } + else + { + picHeader->setDisDmvrFlag(1); + } +#else picHeader->setDisDmvrFlag(0); +#endif } // picture level PROF disable flags @@ -4533,7 +4584,18 @@ void HLSyntaxReader::parsePredWeightTable(PicHeader *picHeader, const SPS *sps) if (numRef == 0) { +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (picHeader->getRPL(1)->getNumRefEntries() > 0) + { + READ_UVLC(numLxWeights, "num_l1_weights"); + } + else + { + numLxWeights = 0; + } +#else READ_UVLC(numLxWeights, "num_l1_weights"); +#endif moreSyntaxToBeParsed = (numLxWeights == 0) ? false : true; picHeader->setNumL1Weights(numLxWeights); } diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index ab444f215..e80c66254 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1778,7 +1778,11 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB if (sps->getSPSTemporalMVPEnabledFlag()) { WRITE_FLAG( picHeader->getEnableTMVPFlag(), "ph_temporal_mvp_enabled_flag" ); +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (picHeader->getEnableTMVPFlag() && pps->getRplInfoInPhFlag() && picHeader->getRPL(1)->getNumRefEntries() > 0) +#else if (picHeader->getEnableTMVPFlag() && pps->getRplInfoInPhFlag()) +#endif { WRITE_CODE(picHeader->getPicColFromL0Flag(), 1, "ph_collocated_from_l0_flag"); if ((picHeader->getPicColFromL0Flag() && picHeader->getRPL(0)->getNumRefEntries() > 1) || @@ -1794,8 +1798,14 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB } // mvd L1 zero flag +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (!pps->getRplInfoInPhFlag() || picHeader->getRPL(1)->getNumRefEntries() > 0) + { + WRITE_FLAG(picHeader->getMvdL1ZeroFlag(), "pic_mvd_l1_zero_flag"); + } +#else WRITE_FLAG(picHeader->getMvdL1ZeroFlag(), "mvd_l1_zero_flag"); - +#endif // merge candidate list size // subblock merge candidate list size if ( sps->getUseAffine() ) @@ -1818,7 +1828,11 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB } // picture level BDOF disable flags +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (sps->getBdofControlPresentFlag() && (!pps->getRplInfoInPhFlag() || picHeader->getRPL(1)->getNumRefEntries() > 0)) +#else if (sps->getBdofControlPresentFlag()) +#endif { WRITE_FLAG(picHeader->getDisBdofFlag(), "ph_disable_bdof_flag"); } @@ -1828,7 +1842,11 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB } // picture level DMVR disable flags +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (sps->getDmvrControlPresentFlag() && (!pps->getRplInfoInPhFlag() || picHeader->getRPL(1)->getNumRefEntries() > 0)) +#else if (sps->getDmvrControlPresentFlag()) +#endif { WRITE_FLAG(picHeader->getDisDmvrFlag(), "ph_disable_dmvr_flag"); } @@ -2767,6 +2785,12 @@ void HLSWriter::xCodePredWeightTable(PicHeader *picHeader, const SPS *sps) if (numRef == 0) { numLxWeights = picHeader->getNumL1Weights(); +#if R0324_PH_SYNTAX_CONDITION_MODIFY + if (picHeader->getRPL(1)->getNumRefEntries() > 0) + { + WRITE_UVLC(numLxWeights, "num_l1_weights"); + } +#endif moreSyntaxToBeParsed = (numLxWeights == 0) ? false : true; } } -- GitLab