From d3bd7d39b86cb40fbf17f65b1623c0ab793aa424 Mon Sep 17 00:00:00 2001 From: aqaror <aqaror@dolby.com> Date: Wed, 3 Aug 2022 03:58:58 -0700 Subject: [PATCH] added changes required for JVET_AA0100 NNPF SEI message additions --- ...al_network_post_filter_characteristics.cfg | 5 ++++ doc/software-manual.tex | 25 +++++++++++++++++ source/App/EncoderApp/EncApp.cpp | 9 +++++++ source/App/EncoderApp/EncAppCfg.cpp | 27 ++++++++++++++++++- source/App/EncoderApp/EncAppCfg.h | 7 +++++ source/Lib/CommonLib/SEI.h | 14 ++++++++++ source/Lib/CommonLib/TypeDef.h | 1 + source/Lib/DecoderLib/SEIread.cpp | 16 +++++++++++ source/Lib/EncoderLib/EncCfg.h | 20 +++++++++++++- source/Lib/EncoderLib/SEIEncoder.cpp | 9 +++++++ source/Lib/EncoderLib/SEIwrite.cpp | 10 +++++++ 11 files changed, 141 insertions(+), 2 deletions(-) diff --git a/cfg/sei_vui/neural_network_post_filter_characteristics.cfg b/cfg/sei_vui/neural_network_post_filter_characteristics.cfg index f8ab75867..46216c993 100644 --- a/cfg/sei_vui/neural_network_post_filter_characteristics.cfg +++ b/cfg/sei_vui/neural_network_post_filter_characteristics.cfg @@ -11,6 +11,11 @@ SEINNPostFilterCharacteristicsOutSubHeightCFlag0: 1 SEINNPostFilterCharacteristicsComponentLastFlag0: 0 SEINNPostFilterCharacteristicsInpSampleIdc0: 1 SEINNPostFilterCharacteristicsInpTensorBitDepthMinus80: 2 +SEINNPostFilterCharacteristicsAuxInpIdc0: 1 +SEINNPostFilterCharacteristicsSepColDescriptionFlag0: 0 +SEINNPostFilterCharacteristicsColPrimaries0: 9 +SEINNPostFilterCharacteristicsTransCharacteristics0: 16 +SEINNPostFilterCharacteristicsMatrixCoeffs0: 14 SEINNPostFilterCharacteristicsInpOrderIdc0: 2 SEINNPostFilterCharacteristicsOutSampleIdc0: 1 SEINNPostFilterCharacteristicsOutTensorBitDepthMinus80: 2 diff --git a/doc/software-manual.tex b/doc/software-manual.tex index 78ff157e9..c42940f77 100644 --- a/doc/software-manual.tex +++ b/doc/software-manual.tex @@ -5426,6 +5426,31 @@ Specifies sii_num_units_in_shutter_interval for single entry.If multiple entries \Default{0} & Specifies the bit depth of the input tensor - 8 for the \emph{i}-th neural network post-filter, when nnpfc_inp_sample_idc = 4. \\ + \Option{SEINNPostFilterCharacteristicsAuxInpIdc\emph{i}} & + \Default{0} & + Specifies that auxiliary input data may be present in the neural network input tensor for any allowed luma-only, chroma-only, and luma-chroma configuration. + \\ + \Option{SEINNPostFilterCharacteristicsSepColDescriptionFlag\emph{i}} & + \Default{false} & + Specifies that the colour primaries, transfer characteristics, and matrix coefficients of the picture that results from the neural-network post filtering may be different than for the input to the filter. + \par + \begin{tabular}{p{0.49\columnwidth}} + When true (non-zero) the syntax elements nnpfc_colour_primaries, nnpfc_transfer_characteristic, and nnpfc_matrix_coeffs specify the colour primaries, transfer characteristics, and matrix coefficients of the picture that results from the neural-network post filtering. \\ + When false the syntax elements nnpfc_colour_primaries, nnpfc_transfer_chracteristics, and nnpfc_matrix_coeffs are assumed to be the same as the input to the filter. \\ + \end{tabular} + \\ + \Option{SEINNPostFilterCharacteristicsColPrimaries\emph{i}} & + \Default{0} & + Specifies the colour primaries of the picture resulting from applying the neural-network post-filter specified in the SEI message, rather than the colour primaries used for the CLVS. + \\ + \Option{SEINNPostFilterCharacteristicsTransCharacteristics\emph{i}} & + \Default{0} & + Specifies the transfer characteristics of the picture resulting from applying the neural-network post-filter specified in the SEI message, rather than the transfer characteristics used for the CLVS. + \\ + \Option{SEINNPostFilterCharacteristicsMatrixCoeffs\emph{i}} & + \Default{0} & + Specifies the matrix coefficients of the picture resulting from applying the neural-network post-filter specified in the SEI message, rather than the matrix coefficients used for the CLVS + \\ \Option{SEINNPostFilterCharacteristicsInpOrderIdc\emph{i}} & \Default{0} & Specifies the method of ordering the input sample arrays for the \emph{i}-th neural network post-filter. diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index 72d1cb4ac..087df69ef 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -1132,6 +1132,15 @@ void EncApp::xInitLibCfg() m_cEncLib.setNNPostFilterSEICharacteristicsPicHeightInLumaSamples (m_nnPostFilterSEICharacteristicsPicHeightInLumaSamples[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsInpTensorBitDepthMinus8 (m_nnPostFilterSEICharacteristicsInpTensorBitDepthMinus8[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsOutTensorBitDepthMinus8 (m_nnPostFilterSEICharacteristicsOutTensorBitDepthMinus8[i], i); +#if JVET_AA0100 + m_cEncLib.setNNPostFilterSEICharacteristicsAuxInpIdc (m_nnPostFilterSEICharacteristicsAuxInpIdc[i], i); + m_cEncLib.setNNPostFilterSEICharacteristicsSepColDescriptionFlag (m_nnPostFilterSEICharacteristicsSepColDescriptionFlag[i], i); + if (m_cEncLib.getNNPostFilterSEICharacteristicsSepColDescriptionFlag(i)){ + m_cEncLib.setNNPostFilterSEICharacteristicsColPrimaries (m_nnPostFilterSEICharacteristicsColPrimaries[i],i); + m_cEncLib.setNNPostFilterSEICharacteristicsTransCharacteristics (m_nnPostFilterSEICharacteristicsTransCharacteristics[i],i); + m_cEncLib.setNNPostFilterSEICharacteristicsMatrixCoeffs (m_nnPostFilterSEICharacteristicsMatrixCoeffs[i],i); + } +#endif m_cEncLib.setNNPostFilterSEICharacteristicsComponentLastFlag (m_nnPostFilterSEICharacteristicsComponentLastFlag[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsInpSampleIdc (m_nnPostFilterSEICharacteristicsInpSampleIdc[i], i); m_cEncLib.setNNPostFilterSEICharacteristicsInpOrderIdc (m_nnPostFilterSEICharacteristicsInpOrderIdc[i], i); diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index ec1ded0fc..e4ed638a4 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -1707,7 +1707,27 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) std::ostringstream inpSampleIdc; inpSampleIdc << "SEINNPostFilterCharacteristicsInpSampleIdc" << i; opts.addOptions()(inpSampleIdc.str(), m_nnPostFilterSEICharacteristicsInpSampleIdc[i], 0u, "Specifies the method of converting an input sample in the the Neural Network Post Filter Characteristics SEI message"); - +#if JVET_AA0100 + std::ostringstream AuxInpIdc; + AuxInpIdc << "SEINNPostFilterCharacteristicsAuxInpIdc" << i; + opts.addOptions()(AuxInpIdc.str(), m_nnPostFilterSEICharacteristicsAuxInpIdc[i], 0u, "Specifies the auxillary input index in the Nueral Network Post Filter Characteristics SEI message"); + + std::ostringstream SepColDescriptionFlag; + SepColDescriptionFlag << "SEINNPostFilterCharacteristicsSepColDescriptionFlag" << i; + opts.addOptions()(SepColDescriptionFlag.str(), m_nnPostFilterSEICharacteristicsSepColDescriptionFlag[i], false, "Specifies the presence of seperate color descriptions in the Nueral Network Post Filter Characteristics SEI message"); + + std::ostringstream ColPrimaries; + ColPrimaries << "SEINNPostFilterCharacteristicsColPrimaries" << i; + opts.addOptions()(ColPrimaries.str(), m_nnPostFilterSEICharacteristicsColPrimaries[i], 0u, "Specifies color primaries in the Nueral Network Post Filter Characteristics SEI message"); + + std::ostringstream TransCharacteristics; + TransCharacteristics << "SEINNPostFilterCharacteristicsTransCharacteristics" << i; + opts.addOptions()(TransCharacteristics.str(), m_nnPostFilterSEICharacteristicsTransCharacteristics[i], 0u, "Specifies Transfer Characteristics in the Nueral Network Post Filter Characteristics SEI message"); + + std::ostringstream MatrixCoeffs; + MatrixCoeffs << "SEINNPostFilterCharacteristicsMatrixCoeffs" << i; + opts.addOptions()(MatrixCoeffs.str(), m_nnPostFilterSEICharacteristicsMatrixCoeffs[i], 0u, "Specifies color matrix coefficients in the Nueral Network Post Filter Characteristics SEI message"); +#endif std::ostringstream inpOrderIdc; inpOrderIdc << "SEINNPostFilterCharacteristicsInpOrderIdc" << i; opts.addOptions()(inpOrderIdc.str(), m_nnPostFilterSEICharacteristicsInpOrderIdc[i], 0u, "Specifies the method of ordering the input sample arrays in the Neural Network Post Filter Characteristics SEI message"); @@ -4612,6 +4632,11 @@ bool EncAppCfg::xCheckParameter() xConfirmPara(m_nnPostFilterSEICharacteristicsOutTensorBitDepthMinus8[i] > 24, "SEINNPostFilterCharacteristicsOutTensorBitDepthMinus8 must be in the range of 0 to 24"); xConfirmPara(m_nnPostFilterSEICharacteristicsInpSampleIdc[i] > 255, "SEINNPostFilterCharacteristicsInpSampleIdc must be in the range of 0 to 255"); xConfirmPara(m_nnPostFilterSEICharacteristicsInpOrderIdc[i] > 255, "SEINNPostFilterCharacteristicsInpOrderIdc must be in the range of 0 to 255"); +#if JVET_AA0100 + xConfirmPara(m_nnPostFilterSEICharacteristicsColPrimaries[i] > 255, "m_nnPostFilterSEICharacteristicsColPrimaries must in the range 0 to 255"); + xConfirmPara(m_nnPostFilterSEICharacteristicsTransCharacteristics[i] > 255, "m_nnPostFilterSEICharacteristicsTransCharacteristics must in the range 0 to 255"); + xConfirmPara(m_nnPostFilterSEICharacteristicsMatrixCoeffs[i] > 255, "m_nnPostFilterSEICharacteristicsMatrixCoeffs must in the range 0 to 255"); +#endif xConfirmPara(m_nnPostFilterSEICharacteristicsOutSampleIdc[i] > 255, "SEINNPostFilterCharacteristicsOutSampleIdc must be in the range of 0 to 255"); xConfirmPara(m_nnPostFilterSEICharacteristicsOutOrderIdc[i] > 255, "SEINNPostFilterCharacteristicsOutOrderIdc must be in the range of 0 to 255"); xConfirmPara(m_nnPostFilterSEICharacteristicsPatchWidthMinus1[i] > 32766, "SEINNPostFilterCharacteristicsPatchWidthMinus1 must be in the range of 0 to 32766"); diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h index 1d73ff7ab..bb425f307 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -743,6 +743,13 @@ protected: uint32_t m_nnPostFilterSEICharacteristicsOutTensorBitDepthMinus8[MAX_NUM_NN_POST_FILTERS]; bool m_nnPostFilterSEICharacteristicsComponentLastFlag[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsInpSampleIdc[MAX_NUM_NN_POST_FILTERS]; +#if JVET_AA0100 + uint32_t m_nnPostFilterSEICharacteristicsAuxInpIdc[MAX_NUM_NN_POST_FILTERS]; + bool m_nnPostFilterSEICharacteristicsSepColDescriptionFlag[MAX_NUM_NN_POST_FILTERS]; + uint32_t m_nnPostFilterSEICharacteristicsColPrimaries[MAX_NUM_NN_POST_FILTERS]; + uint32_t m_nnPostFilterSEICharacteristicsTransCharacteristics[MAX_NUM_NN_POST_FILTERS]; + uint32_t m_nnPostFilterSEICharacteristicsMatrixCoeffs[MAX_NUM_NN_POST_FILTERS]; +#endif uint32_t m_nnPostFilterSEICharacteristicsInpOrderIdc[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsOutSampleIdc[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsOutOrderIdc[MAX_NUM_NN_POST_FILTERS]; diff --git a/source/Lib/CommonLib/SEI.h b/source/Lib/CommonLib/SEI.h index 2bb366284..32e0fbafc 100644 --- a/source/Lib/CommonLib/SEI.h +++ b/source/Lib/CommonLib/SEI.h @@ -1077,6 +1077,13 @@ public: , m_outTensorBitDepthMinus8(0) , m_componentLastFlag(false) , m_inpSampleIdc(0) +#if JVET_AA0100 + , m_AuxInpIdc(0) + , m_SepColDescriptionFlag(false) + , m_ColPrimaries(0) + , m_TransCharacteristics(0) + , m_MatrixCoeffs(0) +#endif , m_inpOrderIdc(0) , m_outSampleIdc(0) , m_outOrderIdc(0) @@ -1113,6 +1120,13 @@ public: uint32_t m_outTensorBitDepthMinus8; bool m_componentLastFlag; uint32_t m_inpSampleIdc; +#if JVET_AA0100 + uint32_t m_AuxInpIdc; + bool m_SepColDescriptionFlag; + uint8_t m_ColPrimaries; + uint8_t m_TransCharacteristics; + uint8_t m_MatrixCoeffs; +#endif uint32_t m_inpOrderIdc; uint32_t m_outSampleIdc; uint32_t m_outOrderIdc; diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index 83a042d4e..509d5154f 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -54,6 +54,7 @@ //########### place macros to be removed in next cycle below this line ############### +#define JVET_AA0100 1 // JVET-AA0100 AHG9: On auxiliary input and separate colour description in the neural-network post-filter characteristics SEI message //########### place macros to be be kept below this line ############### #define JVET_X0143_ALF_APS_ID_OFFSET 0 // A value between 0 to 7 inclusive. This macro should be kept, or to be defined as a configuration parameter if possible. diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp index ada0cd057..a2677d19b 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -2509,6 +2509,22 @@ void SEIReader::xParseSEINNPostFilterCharacteristics(SEINeuralNetworkPostFilterC sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_inp_tensor_bitdepth_minus8"); sei.m_inpTensorBitDepthMinus8 = val; } +#if JVET_AA0100 + sei_read_uvlc(pDecodedMessageOutputStream,val,"nnpfc_aux_inp_idc"); + sei.m_AuxInpIdc = val; + sei_read_flag(pDecodedMessageOutputStream,val,"nnpfc_sep_col_desc_flag"); + sei.m_SepColDescriptionFlag = val; + + if(sei.m_SepColDescriptionFlag) + { + sei_read_code(pDecodedMessageOutputStream, 8, val,"nnpfc_col_primaries"); + sei.m_ColPrimaries = val; + sei_read_code(pDecodedMessageOutputStream, 8, val,"nnpfc_trans_characteristics"); + sei.m_TransCharacteristics = val; + sei_read_code(pDecodedMessageOutputStream, 8, val,"nnpfc_matrix_coeffs"); + sei.m_MatrixCoeffs = val; + } +#endif sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_inp_order_idc"); sei.m_inpOrderIdc = val; diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index d8890a465..5e0ee488f 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -675,6 +675,13 @@ protected: uint32_t m_nnPostFilterSEICharacteristicsOutTensorBitDepthMinus8[MAX_NUM_NN_POST_FILTERS]; bool m_nnPostFilterSEICharacteristicsComponentLastFlag[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsInpSampleIdc[MAX_NUM_NN_POST_FILTERS]; +#if JVET_AA0100 + uint32_t m_nnPostFilterSEICharacteristicsAuxInpIdc[MAX_NUM_NN_POST_FILTERS]; + bool m_nnPostFilterSEICharacteristicsSepColDescriptionFlag[MAX_NUM_NN_POST_FILTERS]; + uint32_t m_nnPostFilterSEICharacteristicsColPrimaries[MAX_NUM_NN_POST_FILTERS]; + uint32_t m_nnPostFilterSEICharacteristicsTransCharacteristics[MAX_NUM_NN_POST_FILTERS]; + uint32_t m_nnPostFilterSEICharacteristicsMatrixCoeffs[MAX_NUM_NN_POST_FILTERS]; +#endif uint32_t m_nnPostFilterSEICharacteristicsInpOrderIdc[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsOutSampleIdc[MAX_NUM_NN_POST_FILTERS]; uint32_t m_nnPostFilterSEICharacteristicsOutOrderIdc[MAX_NUM_NN_POST_FILTERS]; @@ -1789,7 +1796,18 @@ public: uint32_t getNNPostFilterSEICharacteristicsInpTensorBitDepthMinus8(int filterIdx) const { return m_nnPostFilterSEICharacteristicsInpTensorBitDepthMinus8[filterIdx]; } void setNNPostFilterSEICharacteristicsOutTensorBitDepthMinus8(uint32_t outTensorBitDepthMinus8, int filterIdx) { m_nnPostFilterSEICharacteristicsOutTensorBitDepthMinus8[filterIdx] = outTensorBitDepthMinus8; } uint32_t getNNPostFilterSEICharacteristicsOutTensorBitDepthMinus8(int filterIdx) const { return m_nnPostFilterSEICharacteristicsOutTensorBitDepthMinus8[filterIdx]; } - +#if JVET_AA0100 + void setNNPostFilterSEICharacteristicsAuxInpIdc(uint32_t AuxInpIdc, int filterIdx) { m_nnPostFilterSEICharacteristicsAuxInpIdc[filterIdx] = AuxInpIdc; } + uint32_t getNNPostFilterSEICharacteristicsAuxInpIdc(int filterIdx) const { return m_nnPostFilterSEICharacteristicsAuxInpIdc[filterIdx]; } + void setNNPostFilterSEICharacteristicsSepColDescriptionFlag(bool SepColDescriptionFlag, int filterIdx) { m_nnPostFilterSEICharacteristicsSepColDescriptionFlag[filterIdx] = SepColDescriptionFlag; } + bool getNNPostFilterSEICharacteristicsSepColDescriptionFlag(int filterIdx) const { return m_nnPostFilterSEICharacteristicsSepColDescriptionFlag[filterIdx]; } + void setNNPostFilterSEICharacteristicsColPrimaries(uint32_t ColPrimaries, int filterIdx) { m_nnPostFilterSEICharacteristicsColPrimaries[filterIdx] = ColPrimaries; } + uint32_t getNNPostFilterSEICharacteristicsColPrimaries(int filterIdx) const { return m_nnPostFilterSEICharacteristicsColPrimaries[filterIdx]; } + void setNNPostFilterSEICharacteristicsTransCharacteristics(uint32_t TransCharacteristics, int filterIdx) { m_nnPostFilterSEICharacteristicsTransCharacteristics[filterIdx] = TransCharacteristics; } + uint32_t getNNPostFilterSEICharacteristicsTransCharacteristics(int filterIdx) const { return m_nnPostFilterSEICharacteristicsTransCharacteristics[filterIdx]; } + void setNNPostFilterSEICharacteristicsMatrixCoeffs(uint32_t MatrixCoeffs, int filterIdx) { m_nnPostFilterSEICharacteristicsMatrixCoeffs[filterIdx] = MatrixCoeffs; } + uint32_t getNNPostFilterSEICharacteristicsMatrixCoeffs(int filterIdx) const { return m_nnPostFilterSEICharacteristicsMatrixCoeffs[filterIdx]; } +#endif void setNNPostFilterSEICharacteristicsComponentLastFlag(bool componentLastFlag, int filterIdx) { m_nnPostFilterSEICharacteristicsComponentLastFlag[filterIdx] = componentLastFlag; } bool getNNPostFilterSEICharacteristicsComponentLastFlag(int filterIdx) const { return m_nnPostFilterSEICharacteristicsComponentLastFlag[filterIdx]; } void setNNPostFilterSEICharacteristicsInpSampleIdc(uint32_t inpSampleIdc, int filterIdx) { m_nnPostFilterSEICharacteristicsInpSampleIdc[filterIdx] = inpSampleIdc; } diff --git a/source/Lib/EncoderLib/SEIEncoder.cpp b/source/Lib/EncoderLib/SEIEncoder.cpp index cbfa018d7..5a449ec44 100644 --- a/source/Lib/EncoderLib/SEIEncoder.cpp +++ b/source/Lib/EncoderLib/SEIEncoder.cpp @@ -1188,6 +1188,15 @@ void SEIEncoder::initSEINeuralNetworkPostFilterCharacteristics(SEINeuralNetworkP { sei->m_outTensorBitDepthMinus8 = m_pcCfg->getNNPostFilterSEICharacteristicsOutTensorBitDepthMinus8(filterIdx); } +#if JVET_AA0100 + sei->m_AuxInpIdc = m_pcCfg->getNNPostFilterSEICharacteristicsAuxInpIdc(filterIdx); + sei->m_SepColDescriptionFlag = m_pcCfg->getNNPostFilterSEICharacteristicsSepColDescriptionFlag(filterIdx); + if(sei->m_SepColDescriptionFlag){ + sei->m_ColPrimaries = m_pcCfg->getNNPostFilterSEICharacteristicsColPrimaries(filterIdx); + sei->m_TransCharacteristics = m_pcCfg->getNNPostFilterSEICharacteristicsTransCharacteristics(filterIdx); + sei->m_MatrixCoeffs = m_pcCfg->getNNPostFilterSEICharacteristicsMatrixCoeffs(filterIdx); + } +#endif sei->m_outOrderIdc = m_pcCfg->getNNPostFilterSEICharacteristicsOutOrderIdc(filterIdx); sei->m_constantPatchSizeFlag = m_pcCfg->getNNPostFilterSEICharacteristicsConstantPatchSizeFlag(filterIdx); diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp index 0d3e33c50..8e1ff9162 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -1419,6 +1419,16 @@ void SEIWriter::xWriteSEINeuralNetworkPostFilterCharacteristics(const SEINeuralN { WRITE_UVLC(sei.m_inpTensorBitDepthMinus8, "nnpfc_inp_tensor_bitdepth_minus8"); } +#if JVET_AA0100 + WRITE_UVLC(sei.m_AuxInpIdc,"nnpfc_aux_inp_idc"); + WRITE_FLAG(sei.m_SepColDescriptionFlag,"nnpfc_sep_col_desc_flag"); + + if(sei.m_SepColDescriptionFlag){ + WRITE_CODE(sei.m_ColPrimaries,8,"nnpfc_col_primaries"); + WRITE_CODE(sei.m_TransCharacteristics,8,"nnpfc_trans_characteristics"); + WRITE_CODE(sei.m_MatrixCoeffs,8,"nnpfc_matrix_coeffs"); + } +#endif WRITE_UVLC(sei.m_inpOrderIdc, "nnpfc_inp_order_idc"); WRITE_UVLC(sei.m_outSampleIdc, "nnpfc_out_sample_idc"); -- GitLab