diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 9c7b28305120cff3f8323bd2ee438c5ff94f0452..5db939d534e518600aa51527b3f0945384e33eca 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -79,6 +79,8 @@ #define JVET_AD0067_INCLUDE_SYNTAX 1 // include nnpfc_full_range_flag syntax element in the nnpfc sei message when nnpfc_separate_colour_description_present_flag is equal to 1 and when nnpfc_out_format_idc is equal to 1. +#define JVET_AE0060_COND_SIG_INF 1 // signal nnpfc_chroma_loc_info_present_flag only when nnpfc_out_order_idc is not equal to 0 and infer nnpfc_chroma_loc_info_present_flag to be equal to 0 when not present. + #define REUSE_CU_RESULTS 1 #if REUSE_CU_RESULTS #define REUSE_CU_RESULTS_WITH_MULTIPLE_TUS 1 diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp index ab384e7e21669c35791534ede0fbeba7b23e9290..a783386a6c4287f6c25c46a3f7b23bd0d6102be7 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -3046,7 +3046,21 @@ void SEIReader::xParseSEINNPostFilterCharacteristics(SEINeuralNetworkPostFilterC } #endif - sei_read_flag(pDecodedMessageOutputStream,val,"nnpfc_chroma_loc_info_present_flag"); +#if JVET_AE0060_COND_SIG_INF + if (sei.m_outOrderIdc != 0) + { + sei_read_flag(pDecodedMessageOutputStream,val,"nnpfc_chroma_loc_info_present_flag"); + sei.m_chromaLocInfoPresentFlag = val; + } + else + { + sei.m_chromaLocInfoPresentFlag = 0; + } +#else + sei_read_flag(pDecodedMessageOutputStream,val,"nnpfc_chroma_loc_info_present_flag"); + sei.m_chromaLocInfoPresentFlag = val; +#endif + sei.m_chromaLocInfoPresentFlag = val; CHECK((sei.m_outColourFormatIdc != ChromaFormat::_420) && sei.m_chromaLocInfoPresentFlag, "When nnpfc_out_colour_format_idc is not equal to 1, the value of nnpfc_chroma_loc_info_present_flag shall be equal to 0"); CHECK((sei.m_purpose & NNPC_PurposeType::COLOURIZATION) && sei.m_chromaLocInfoPresentFlag,"When colourizationFlag is equal to 0, the value of nnpfc_chroma_loc_info_present_flag shall be equal to 0") diff --git a/source/Lib/EncoderLib/SEIEncoder.cpp b/source/Lib/EncoderLib/SEIEncoder.cpp index 9c641a2eeb9b73cd49d885ddef6a6559de11e09e..7af3e3dc68dc10316c0ee4cafa570054afeb83ac 100644 --- a/source/Lib/EncoderLib/SEIEncoder.cpp +++ b/source/Lib/EncoderLib/SEIEncoder.cpp @@ -1445,7 +1445,18 @@ void SEIEncoder::initSEINeuralNetworkPostFilterCharacteristics(SEINeuralNetworkP sei->m_outOrderIdc = m_pcCfg->getNNPostFilterSEICharacteristicsOutOrderIdc(filterIdx); CHECK((sei->m_purpose & NNPC_PurposeType::CHROMA_UPSAMPLING) != 0 && (sei->m_outOrderIdc == 0 || sei->m_outOrderIdc == 3), "When nnpfc_purpose & 0x02 is not equal to 0, nnpfc_out_order_idc shall not be equal to 0 or 3"); CHECK((sei->m_purpose & NNPC_PurposeType::COLOURIZATION) != 0 && sei->m_outOrderIdc == 0, "When nnpfc_purpose & 0x20 is not equal to 0, nnpfc_out_order_idc shall not be equal to 0"); - sei->m_chromaLocInfoPresentFlag = m_pcCfg->getNNPostFilterSEICharacteristicsChromaLocInfoPresentFlag(filterIdx); +#if JVET_AE0060_COND_SIG_INF + if(sei->m_outOrderIdc != 0) + { + sei->m_chromaLocInfoPresentFlag = m_pcCfg->getNNPostFilterSEICharacteristicsChromaLocInfoPresentFlag(filterIdx); + } + else + { + sei->m_chromaLocInfoPresentFlag = 0; + } +#else + sei->m_chromaLocInfoPresentFlag = m_pcCfg->getNNPostFilterSEICharacteristicsChromaLocInfoPresentFlag(filterIdx); +#endif if(sei->m_chromaLocInfoPresentFlag) { sei->m_chromaSampleLocTypeFrame = m_pcCfg->getNNPostFilterSEICharacteristicsChromaSampleLocTypeFrame(filterIdx);; diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp index 5d3f4c4fac97303820b54d55ce75525fcd84ea15..6c50bc3dc9e4540c08730b321a188f2e04b5a501 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -1779,7 +1779,14 @@ void SEIWriter::xWriteSEINeuralNetworkPostFilterCharacteristics(const SEINeuralN } #endif +#if JVET_AE0060_COND_SIG_INF + if (sei.m_outOrderIdc != 0) + { + xWriteFlag(sei.m_chromaLocInfoPresentFlag, "nnpfc_chroma_loc_info_present_flag"); + } +#else xWriteFlag(sei.m_chromaLocInfoPresentFlag, "nnpfc_chroma_loc_info_present_flag"); +#endif if(sei.m_chromaLocInfoPresentFlag) {