diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index b805e4b61400945392a504ce74c652da7fdc8b80..9c0c6f5f1d51404c18bb2c3c2a15bebf572a26b7 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -1196,8 +1196,13 @@ void EncApp::xInitLibCfg( int layerIdx ) m_cEncLib.setNNPostFilterSEICharacteristicsLumaPadding (m_nnPostFilterSEICharacteristicsLumaPadding[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsCrPadding (m_nnPostFilterSEICharacteristicsCrPadding[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsCbPadding (m_nnPostFilterSEICharacteristicsCbPadding[i], i); +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + m_cEncLib.setNNPostFilterSEICharacteristicsComplexityInfoPresentFlag (m_nnPostFilterSEICharacteristicsComplexityInfoPresentFlag[i], i); + if (m_cEncLib.getNNPostFilterSEICharacteristicsComplexityInfoPresentFlag(i)) +#else m_cEncLib.setNNPostFilterSEICharacteristicsComplexityIdc ( m_nnPostFilterSEICharacteristicsComplexityIdc[i], i); if (m_cEncLib.getNNPostFilterSEICharacteristicsComplexityIdc(i) > 0) +#endif { m_cEncLib.setNNPostFilterSEICharacteristicsLumaPadding (m_nnPostFilterSEICharacteristicsLumaPadding[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsCrPadding (m_nnPostFilterSEICharacteristicsCrPadding[i], i); @@ -1206,6 +1211,10 @@ void EncApp::xInitLibCfg( int layerIdx ) m_cEncLib.setNNPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3 ( m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsNumParametersIdc ( m_nnPostFilterSEICharacteristicsNumParametersIdc[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsNumKmacOperationsIdc ( m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[i], i); +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + m_cEncLib.setNNPostFilterSEICharacteristicsTotalKilobyteSize ( m_nnPostFilterSEICharacteristicsTotalKilobyteSize[i], i); +#endif + } m_cEncLib.setNNPostFilterSEICharacteristicsUriTag ( m_nnPostFilterSEICharacteristicsUriTag[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsUri ( m_nnPostFilterSEICharacteristicsUri[i], i); diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index 9dc79c8c64040f1198c2a4cac88f83de08966da3..bec86b713c4d4ab97da2babb3260da7cfffc1463 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -1814,9 +1814,15 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) cbPadding << "SEINNPostFilterCharacteristicsCbPadding" << i; opts.addOptions()(cbPadding.str(), m_nnPostFilterSEICharacteristicsCbPadding[i], 0u, "Specifies the Cb padding when when the padding type is fixed padding "); +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + std::ostringstream complexityInfoPresentFlag; + complexityInfoPresentFlag << "SEINNPostFilterCharacteristicsComplexityInfoPresentFlag" << i; + opts.addOptions()(complexityInfoPresentFlag.str(), m_nnPostFilterSEICharacteristicsComplexityInfoPresentFlag[i], false, "Specifies the value of nnpfc_complexity_info_present_flag in the Neural Network Post Filter Characteristics SEI message"); +#else std::ostringstream complexityIdc; complexityIdc << "SEINNPostFilterCharacteristicsComplexityIdc" << i; opts.addOptions()(complexityIdc.str(), m_nnPostFilterSEICharacteristicsComplexityIdc[i], 0u, "Specifies the value of nnpfc_complexity_idc in the Neural Network Post Filter Characteristics SEI message"); +#endif std::ostringstream uriTag; uriTag << "SEINNPostFilterCharacteristicsUriTag" << i; @@ -1842,6 +1848,12 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) numKmacOperationsIdc << "SEINNPostFilterCharacteristicsNumKmacOperationsIdc" << i; opts.addOptions()(numKmacOperationsIdc.str(), m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[i], 0u, "Specifies the maximum number of operations (KMAC) per pixel in the Neural Network Post Filter Characteristics SEI message"); +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + std::ostringstream totalKilobyteSize; + totalKilobyteSize << "SEINNPostFilterCharacteristicsTotalKilobyteSize" << i; + opts.addOptions()(totalKilobyteSize.str(), m_nnPostFilterSEICharacteristicsTotalKilobyteSize[i], 0u, "Indicates the total size in kilobytes required to store the uncompressed NN parameters in the Neural Network Post Filter Characteristics SEI message"); +#endif + std::ostringstream payloadFilename; payloadFilename << "SEINNPostFilterCharacteristicsPayloadFilename" << i; opts.addOptions()(payloadFilename.str(), m_nnPostFilterSEICharacteristicsPayloadFilename[i], string(""), "Specifies the NNR bitstream in the Neural Network Post Filter Characteristics SEI message"); @@ -4769,9 +4781,14 @@ bool EncAppCfg::xCheckParameter() xConfirmPara(m_nnPostFilterSEICharacteristicsPatchHeightMinus1[i] > 32766, "SEINNPostFilterCharacteristicsPatchHeightMinus1 must be in the range of 0 to 32766"); xConfirmPara(m_nnPostFilterSEICharacteristicsOverlap[i] > 16383, "SEINNPostFilterCharacteristicsOverlap must be in the range of 0 to 16383"); xConfirmPara(m_nnPostFilterSEICharacteristicsPaddingType[i] > (1 << 4) - 1, "SEINNPostFilterPaddingType must be in the range of 0 to 2^4-1"); +#if !JVET_AB0135_NN_SEI_COMPLEXITY_MOD xConfirmPara(m_nnPostFilterSEICharacteristicsComplexityIdc[i] > 255, "SEINNPostFilterCharacteristicsComplexityIdc must be in the range of 0 to 255"); +#endif xConfirmPara(m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[i] > 3, "SEINNPostFilterCharacteristicsLog2ParameterBitLengthMinus3 must be in the range of 0 to 3"); xConfirmPara(m_nnPostFilterSEICharacteristicsNumParametersIdc[i] > 52, "SEINNPostFilterCharacteristicsNumParametersIdc must be in the range of 0 to 52"); +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + xConfirmPara(m_nnPostFilterSEICharacteristicsTotalKilobyteSize[i] > (uint32_t) (((uint64_t) 1 << 32) - 1), "SEINNPostFilterCharacteristicsTotalKilobyteSize must be in the range of 0 to 2^32-1"); +#endif } } diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h index 1612e801313927c4ac62423ee4ba4fea45daeace..4159d6425697dd06601cb5d951fabae1968c1d2e 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -746,13 +746,21 @@ protected: uint32_t m_nnPostFilterSEICharacteristicsCbPadding[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsCrPadding[MAX_NUM_NN_POST_FILTERS]; std::string m_nnPostFilterSEICharacteristicsPayloadFilename[MAX_NUM_NN_POST_FILTERS]; +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + bool m_nnPostFilterSEICharacteristicsComplexityInfoPresentFlag[MAX_NUM_NN_POST_FILTERS]; +#else uint32_t m_nnPostFilterSEICharacteristicsComplexityIdc[MAX_NUM_NN_POST_FILTERS]; +#endif std::string m_nnPostFilterSEICharacteristicsUriTag[MAX_NUM_NN_POST_FILTERS]; std::string m_nnPostFilterSEICharacteristicsUri[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsParameterTypeIdc[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsNumParametersIdc[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[MAX_NUM_NN_POST_FILTERS]; +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + uint32_t m_nnPostFilterSEICharacteristicsTotalKilobyteSize[MAX_NUM_NN_POST_FILTERS]; +#endif + bool m_nnPostFilterSEIActivationEnabled; uint32_t m_nnPostFilterSEIActivationId; diff --git a/source/Lib/CommonLib/SEI.h b/source/Lib/CommonLib/SEI.h index 6c770711455aa1bad0a69337fc790252c76ad972..bfcd61d8a09861b681310061f2d2fc14a6d72ae5 100644 --- a/source/Lib/CommonLib/SEI.h +++ b/source/Lib/CommonLib/SEI.h @@ -1199,13 +1199,20 @@ public: , m_cbPadding(0) , m_crPadding(0) , m_payloadByte(nullptr) +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + , m_complexityInfoPresentFlag(false) +#else , m_complexityIdc(0) +#endif , m_uriTag("") , m_uri("") , m_parameterTypeIdc(0) , m_log2ParameterBitLengthMinus3(0) , m_numParametersIdc(0) , m_numKmacOperationsIdc(0) +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + , m_totalKilobyteSize(0) +#endif {} ~SEINeuralNetworkPostFilterCharacteristics() override @@ -1248,13 +1255,20 @@ public: uint32_t m_crPadding; uint64_t m_payloadLength; char* m_payloadByte; +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + bool m_complexityInfoPresentFlag; +#else uint32_t m_complexityIdc; +#endif std::string m_uriTag; std::string m_uri; uint32_t m_parameterTypeIdc; uint32_t m_log2ParameterBitLengthMinus3; uint32_t m_numParametersIdc; uint32_t m_numKmacOperationsIdc; +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + uint32_t m_totalKilobyteSize; +#endif }; class SEINeuralNetworkPostFilterActivation : public SEI diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index da80fa73021c5fed2655fdb9e8358e13983422e1..8517b97013098296e9daaf2fdd7c11efd34a53de 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -57,6 +57,7 @@ #define JVET_T0056_SEI_MANIFEST 1 // JVET-T0056: SEI manifest SEI message #define JVET_T0056_SEI_PREFIX_INDICATION 1 // JVET-T0056: SEI prefix indication SEI message #define JVET_AB0069_SEI_PROCESSING_ORDER 1 // JVET-AB0069: SEI processing order SEI message update +#define JVET_AB0135_NN_SEI_COMPLEXITY_MOD 1 // JVET-AB0135: Modification of comlexity parameters in NN characteristics SEI message #define JVET_AB0080 1 // GOP-based RPR encoder control #if JVET_AB0080 #define JVET_AB0080_CHROMA_QP_FIX 1 // fix to align chroma QP changes with luma QP changes diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp index f93d0ec9a46ed25f2909322c4d6423982efd1123..bc6d97e87f7ded65d1e7f48f898abaa5c6fcf46e 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -2780,6 +2780,13 @@ void SEIReader::xParseSEINNPostFilterCharacteristics(SEINeuralNetworkPostFilterC sei.m_crPadding = val; } +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + sei_read_flag(pDecodedMessageOutputStream, val, "nnpfc_complexity_info_present_flag"); + sei.m_complexityInfoPresentFlag = val; + + if (sei.m_complexityInfoPresentFlag) + { +#else sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_complexity_idc"); sei.m_complexityIdc = val; @@ -2787,6 +2794,7 @@ void SEIReader::xParseSEINNPostFilterCharacteristics(SEINeuralNetworkPostFilterC { if(sei.m_complexityIdc == 1) { +#endif sei_read_code(pDecodedMessageOutputStream, 2, val, "nnpfc_parameter_type_idc"); sei.m_parameterTypeIdc = val; if (sei.m_parameterTypeIdc != 2) @@ -2800,7 +2808,13 @@ void SEIReader::xParseSEINNPostFilterCharacteristics(SEINeuralNetworkPostFilterC sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_num_kmac_operations_idc"); sei.m_numKmacOperationsIdc = val; + +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_total_kilobyte_size"); + sei.m_totalKilobyteSize = val; +#else } +#endif } } #if !JVET_AB0047_MOVE_GATED_SYNTAX_OF_NNPFC_URIS_AFTER_NNPFC_MODEIDC diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index e8ebfe039e26e2342d960f6c1a8961e409cb0796..9431935354991d18e6273dd0decd974d9de50f61 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -707,13 +707,20 @@ protected: uint32_t m_nnPostFilterSEICharacteristicsCrPadding[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsCbPadding[MAX_NUM_NN_POST_FILTERS]; std::string m_nnPostFilterSEICharacteristicsPayloadFilename[MAX_NUM_NN_POST_FILTERS]; +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + bool m_nnPostFilterSEICharacteristicsComplexityInfoPresentFlag[MAX_NUM_NN_POST_FILTERS]; +#else uint32_t m_nnPostFilterSEICharacteristicsComplexityIdc[MAX_NUM_NN_POST_FILTERS]; +#endif std::string m_nnPostFilterSEICharacteristicsUriTag[MAX_NUM_NN_POST_FILTERS]; std::string m_nnPostFilterSEICharacteristicsUri[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsParameterTypeIdc[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsNumParametersIdc[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[MAX_NUM_NN_POST_FILTERS]; +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + uint32_t m_nnPostFilterSEICharacteristicsTotalKilobyteSize[MAX_NUM_NN_POST_FILTERS]; +#endif bool m_nnPostFilterSEIActivationEnabled; uint32_t m_nnPostFilterSEIActivationId; @@ -1911,8 +1918,13 @@ public: void setNNPostFilterSEICharacteristicsCrPadding(uint32_t crPadding, int filterIdx) { m_nnPostFilterSEICharacteristicsCrPadding[filterIdx] = crPadding; } uint32_t getNNPostFilterSEICharacteristicsCrPadding(int filterIdx) const { return m_nnPostFilterSEICharacteristicsCrPadding[filterIdx]; } +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + void setNNPostFilterSEICharacteristicsComplexityInfoPresentFlag(bool complexityInfoPresentFlag, int filterIdx) { m_nnPostFilterSEICharacteristicsComplexityInfoPresentFlag[filterIdx] = complexityInfoPresentFlag; } + bool getNNPostFilterSEICharacteristicsComplexityInfoPresentFlag(int filterIdx) const { return m_nnPostFilterSEICharacteristicsComplexityInfoPresentFlag[filterIdx]; } +#else void setNNPostFilterSEICharacteristicsComplexityIdc (uint32_t complexityIdc , int filterIdx) { m_nnPostFilterSEICharacteristicsComplexityIdc[filterIdx] = complexityIdc ; } uint32_t getNNPostFilterSEICharacteristicsComplexityIdc (int filterIdx) const { return m_nnPostFilterSEICharacteristicsComplexityIdc[filterIdx]; } +#endif void setNNPostFilterSEICharacteristicsUriTag(std::string uriTag, int filterIdx) { m_nnPostFilterSEICharacteristicsUriTag[filterIdx] = uriTag; } std::string getNNPostFilterSEICharacteristicsUriTag(int filterIdx) const { return m_nnPostFilterSEICharacteristicsUriTag[filterIdx]; } void setNNPostFilterSEICharacteristicsUri(std::string uri, int filterIdx) { m_nnPostFilterSEICharacteristicsUri[filterIdx] = uri; } @@ -1925,6 +1937,10 @@ public: uint32_t getNNPostFilterSEICharacteristicsNumParametersIdc (int filterIdx) const { return m_nnPostFilterSEICharacteristicsNumParametersIdc[filterIdx]; } void setNNPostFilterSEICharacteristicsNumKmacOperationsIdc(uint32_t numKmacOperationsIdc , int filterIdx) { m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[filterIdx] = numKmacOperationsIdc ; } uint32_t getNNPostFilterSEICharacteristicsNumKmacOperationsIdc(int filterIdx) const { return m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[filterIdx]; } +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + void setNNPostFilterSEICharacteristicsTotalKilobyteSize(uint32_t totalKilobyteSize, int filterIdx) { m_nnPostFilterSEICharacteristicsTotalKilobyteSize[filterIdx] = totalKilobyteSize; } + uint32_t getNNPostFilterSEICharacteristicsTotalKilobyteSize(int filterIdx) const { return m_nnPostFilterSEICharacteristicsTotalKilobyteSize[filterIdx]; } +#endif void setNNPostFilterSEICharacteristicsPayloadFilename(std::string payloadFilename, int filterIdx) { m_nnPostFilterSEICharacteristicsPayloadFilename[filterIdx] = payloadFilename; } std::string getNNPostFilterSEICharacteristicsPayloadFilename(int filterIdx) const { return m_nnPostFilterSEICharacteristicsPayloadFilename[filterIdx]; } diff --git a/source/Lib/EncoderLib/SEIEncoder.cpp b/source/Lib/EncoderLib/SEIEncoder.cpp index 4bdf276a292e571a05003d7fd6855b0bec168e2e..1b121db9feb173f5e864fc323877f94efebc53f1 100644 --- a/source/Lib/EncoderLib/SEIEncoder.cpp +++ b/source/Lib/EncoderLib/SEIEncoder.cpp @@ -1331,16 +1331,26 @@ void SEIEncoder::initSEINeuralNetworkPostFilterCharacteristics(SEINeuralNetworkP sei->m_cbPadding = m_pcCfg->getNNPostFilterSEICharacteristicsCbPadding(filterIdx); sei->m_crPadding = m_pcCfg->getNNPostFilterSEICharacteristicsCrPadding(filterIdx); +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + sei->m_complexityInfoPresentFlag = m_pcCfg->getNNPostFilterSEICharacteristicsComplexityInfoPresentFlag(filterIdx); + if (sei->m_complexityInfoPresentFlag) + { +#else sei->m_complexityIdc = m_pcCfg->getNNPostFilterSEICharacteristicsComplexityIdc(filterIdx); if(sei->m_complexityIdc > 0) { if(sei->m_complexityIdc == 1) { +#endif sei->m_parameterTypeIdc = m_pcCfg->getNNPostFilterSEICharacteristicsParameterTypeIdc(filterIdx); sei->m_log2ParameterBitLengthMinus3 = m_pcCfg->getNNPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3(filterIdx); sei->m_numParametersIdc = m_pcCfg->getNNPostFilterSEICharacteristicsNumParametersIdc(filterIdx); sei->m_numKmacOperationsIdc = m_pcCfg->getNNPostFilterSEICharacteristicsNumKmacOperationsIdc(filterIdx); +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + sei->m_totalKilobyteSize = m_pcCfg->getNNPostFilterSEICharacteristicsTotalKilobyteSize(filterIdx); +#else } +#endif } #if !JVET_AB0047_MOVE_GATED_SYNTAX_OF_NNPFC_URIS_AFTER_NNPFC_MODEIDC sei->m_uriTag = m_pcCfg->getNNPostFilterSEICharacteristicsUriTag(filterIdx); diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp index 048c2eda34894bc013999c20784d2ce5e1b1ed85..28d75164ff858a073cd61227e28d8324a0e2e39f 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -1810,12 +1810,28 @@ void SEIWriter::xWriteSEINeuralNetworkPostFilterCharacteristics(const SEINeuralN WRITE_UVLC(sei.m_crPadding, "nnpfc_cr_padding_val"); } +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + WRITE_FLAG(sei.m_complexityInfoPresentFlag, "nnpfc_complexity_info_present_flag"); + if (sei.m_complexityInfoPresentFlag) + { + WRITE_CODE(sei.m_parameterTypeIdc, 2, "nnpfc_parameter_type_idc"); + if (sei.m_parameterTypeIdc != 2) + { + WRITE_CODE(sei.m_log2ParameterBitLengthMinus3, 2, "nnpfc_log2_parameter_bit_length_minus3"); + } + WRITE_CODE(sei.m_numParametersIdc, 6, "nnpfc_num_parameters_idc"); + WRITE_UVLC(sei.m_numKmacOperationsIdc, "nnpfc_num_kmac_operations_idc"); + WRITE_UVLC(sei.m_totalKilobyteSize, "nnpfc_total_kilobyte_size"); + } + } +#else WRITE_UVLC(sei.m_complexityIdc, "nnpfc_complexity_idc"); if(sei.m_complexityIdc > 0) { xWriteNNPFCComplexityElement(sei); } } +#endif #if !JVET_AB0047_MOVE_GATED_SYNTAX_OF_NNPFC_URIS_AFTER_NNPFC_MODEIDC if (sei.m_modeIdc == POST_FILTER_MODE::URI) { @@ -1840,6 +1856,7 @@ void SEIWriter::xWriteSEINeuralNetworkPostFilterCharacteristics(const SEINeuralN } } +#if !JVET_AB0135_NN_SEI_COMPLEXITY_MOD void SEIWriter::xWriteNNPFCComplexityElement(const SEINeuralNetworkPostFilterCharacteristics &sei) { if(sei.m_complexityIdc == 1) @@ -1851,8 +1868,12 @@ void SEIWriter::xWriteNNPFCComplexityElement(const SEINeuralNetworkPostFilterCha } WRITE_CODE(sei.m_numParametersIdc, 6, "nnpfc_num_parameters_idc"); WRITE_UVLC(sei.m_numKmacOperationsIdc, "nnpfc_num_kmac_operations_idc"); +#if JVET_AB0135_NN_SEI_COMPLEXITY_MOD + WRITE_UVLC(sei.m_totalKilobyteSize, "nnpfc_total_kilobyte_size"); +#endif } } +#endif void SEIWriter::xWriteSEINeuralNetworkPostFilterActivation(const SEINeuralNetworkPostFilterActivation &sei) { diff --git a/source/Lib/EncoderLib/SEIwrite.h b/source/Lib/EncoderLib/SEIwrite.h index a346dfc1f79982bc9ce28aeeb2a183cb52edf6e7..9a280b92ffe2415059df80721b6603b70979478a 100644 --- a/source/Lib/EncoderLib/SEIwrite.h +++ b/source/Lib/EncoderLib/SEIwrite.h @@ -134,7 +134,9 @@ protected: void xWriteSEIShutterInterval(const SEIShutterIntervalInfo& sei); void xWriteByteAlign(); void xWriteSEINeuralNetworkPostFilterCharacteristics(const SEINeuralNetworkPostFilterCharacteristics& sei); +#if !JVET_AB0135_NN_SEI_COMPLEXITY_MOD void xWriteNNPFCComplexityElement(const SEINeuralNetworkPostFilterCharacteristics& sei); +#endif void xWriteSEINeuralNetworkPostFilterActivation(const SEINeuralNetworkPostFilterActivation &sei); void xWriteSEIProcessingOrder(const SEIProcessingOrderInfo &sei); #if GREEN_METADATA_SEI_ENABLED