diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 1a40d38b4f965d156e72bf3c1ae6fc7f22167f01..cdb4ca999225ab9abdb972582581fe484fdee37e 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -2312,8 +2312,10 @@ public: int getNumAlfAps() const { return m_numAlfAps; } void setAlfApsIdChroma(int i) { m_alfChromaApsId = i; } int getAlfApsIdChroma() const { return m_alfChromaApsId; } +#if !JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA void setAlfChromaIdc(int i) { m_alfChromaIdc = i; } int getAlfChromaIdc() const { return m_alfChromaIdc; } +#endif void setCcAlfEnabledFlag(ComponentID compId, bool b) { m_ccalfEnabledFlag[compId] = b; } bool getCcAlfEnabledFlag(ComponentID compId) const { return m_ccalfEnabledFlag[compId]; } diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index b03001080d23a5cef156e2262a87e1aa6441ba67..dac41d2c428f2767fa04a65c797c654d77ae6cda 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_R0225_SEPERATE_FLAGS_ALF_CHROMA 1 // Use two separate flags (one for Cb, one for Cr) to replace ph_alf_chroma_idc in PH and sh_alf_chroma_idc in SH + #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 8193a66945070203cdc902f63a9d79f31f30a5fc..7abd714509f0e177f1f74a476e318cbfd923e28e 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -2328,7 +2328,12 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag READ_FLAG(uiCode, "ph_alf_enabled_flag"); picHeader->setAlfEnabledFlag(COMPONENT_Y, uiCode); +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + int alfCbEnabledFlag = 0; + int alfCrEnabledFlag = 0; +#else int alfChromaIdc = 0; +#endif if (uiCode) { READ_CODE(3, uiCode, "ph_num_alf_aps_ids_luma"); @@ -2345,15 +2350,29 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag if (sps->getChromaFormatIdc() != CHROMA_400) { +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + READ_CODE(1, uiCode, "ph_alf_cb_enabled_flag"); alfCbEnabledFlag = uiCode; + READ_CODE(1, uiCode, "ph_alf_cr_enabled_flag"); alfCrEnabledFlag = uiCode; +#else READ_CODE(2, uiCode, "ph_alf_chroma_idc"); alfChromaIdc = uiCode; +#endif } else { +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + alfCbEnabledFlag = 0; + alfCrEnabledFlag = 0; +#else alfChromaIdc = 0; +#endif } +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + if (alfCbEnabledFlag || alfCrEnabledFlag) +#else picHeader->setAlfChromaIdc(alfChromaIdc); if (alfChromaIdc) +#endif { READ_CODE(3, uiCode, "ph_alf_aps_id_chroma"); picHeader->setAlfApsIdChroma(uiCode); @@ -2385,8 +2404,13 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag { picHeader->setNumAlfAps(0); } +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + picHeader->setAlfEnabledFlag(COMPONENT_Cb, alfCbEnabledFlag); + picHeader->setAlfEnabledFlag(COMPONENT_Cr, alfCrEnabledFlag); +#else picHeader->setAlfEnabledFlag(COMPONENT_Cb, alfChromaIdc & 1); picHeader->setAlfEnabledFlag(COMPONENT_Cr, alfChromaIdc >> 1); +#endif } else { @@ -3070,7 +3094,11 @@ void HLSyntaxReader::checkAlfNaluTidAndPicTid(Slice* pcSlice, PicHeader* picHea CHECK(aps->getTemporalId() > curPicTid, "The TemporalId of the APS NAL unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to ph_alf_aps_id_luma[ i ] shall be less than or equal to the TemporalId of the picture associated with the PH."); } //chroma +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + if (picHeader->getAlfEnabledFlag(COMPONENT_Cb) || picHeader->getAlfEnabledFlag(COMPONENT_Cr)) +#else if (picHeader->getAlfChromaIdc()) +#endif { int chromaAlfApsId = picHeader->getAlfApsIdChroma(); aps = parameterSetManager->getAPS(chromaAlfApsId, ALF_APS); @@ -3283,7 +3311,13 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par { READ_FLAG(uiCode, "slice_alf_enabled_flag"); pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Y, uiCode); +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + int alfCbEnabledFlag = 0; + int alfCrEnabledFlag = 0; +#else int alfChromaIdc = 0; +#endif + if (uiCode) { READ_CODE(3, uiCode, "slice_num_alf_aps_ids_luma"); @@ -3303,13 +3337,27 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par pcSlice->setAlfAPSs(apsId); if (bChroma) { +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + READ_CODE(1, uiCode, "slice_alf_cb_enabled_flag"); alfCbEnabledFlag = uiCode; + READ_CODE(1, uiCode, "slice_alf_cr_enabled_flag"); alfCrEnabledFlag = uiCode; +#else READ_CODE(2, uiCode, "slice_alf_chroma_idc"); alfChromaIdc = uiCode; +#endif } else { +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + alfCbEnabledFlag = 0; + alfCrEnabledFlag = 0; +#else alfChromaIdc = 0; +#endif } +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + if (alfCbEnabledFlag || alfCrEnabledFlag) +#else if (alfChromaIdc) +#endif { READ_CODE(3, uiCode, "slice_alf_aps_id_chroma"); pcSlice->setTileGroupApsIdChroma(uiCode); @@ -3322,8 +3370,13 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, PicHeader* picHeader, Par { pcSlice->setTileGroupNumAps(0); } +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Cb, alfCbEnabledFlag); + pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Cr, alfCrEnabledFlag); +#else pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Cb, alfChromaIdc & 1); pcSlice->setTileGroupAlfEnabledFlag(COMPONENT_Cr, alfChromaIdc >> 1); +#endif CcAlfFilterParam &filterParam = pcSlice->m_ccAlfFilterParam; if (sps->getCCALFEnabledFlag() && pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Y)) diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index 6a6cb98491fe9e0a1ee126cb9ccf2d6d1953c86c..11b63da15829d5eeeaa3940cc012d86b45394d2d 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1495,7 +1495,12 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader, bool writeRbspTrailingB const int alfChromaIdc = picHeader->getAlfEnabledFlag(COMPONENT_Cb) + picHeader->getAlfEnabledFlag(COMPONENT_Cr) * 2 ; if (sps->getChromaFormatIdc() != CHROMA_400) { +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + WRITE_CODE(picHeader->getAlfEnabledFlag(COMPONENT_Cb), 1, "ph_alf_cb_enabled_flag"); + WRITE_CODE(picHeader->getAlfEnabledFlag(COMPONENT_Cr), 1, "ph_alf_cr_enabled_flag"); +#else WRITE_CODE(alfChromaIdc, 2, "ph_alf_chroma_idc"); +#endif } if (alfChromaIdc) { @@ -2088,7 +2093,12 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) const int alfChromaIdc = pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cb) + pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cr) * 2; if (chromaEnabled) { +#if JVET_R0225_SEPERATE_FLAGS_ALF_CHROMA + WRITE_CODE(pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cb), 1, "slice_alf_cb_enabled_flag"); + WRITE_CODE(pcSlice->getTileGroupAlfEnabledFlag(COMPONENT_Cr), 1, "slice_alf_cr_enabled_flag"); +#else WRITE_CODE(alfChromaIdc, 2, "slice_alf_chroma_idc"); +#endif } if (alfChromaIdc) {