diff --git a/cfg/sei_vui/neural_network_post_filter_characteristics.cfg b/cfg/sei_vui/neural_network_post_filter_characteristics.cfg index 0a3b7963c47ac8dc778ed75e9e4e9263f1547d41..352f8e252d871cd977d0bfd29a0cd475fe3d4c4c 100644 --- a/cfg/sei_vui/neural_network_post_filter_characteristics.cfg +++ b/cfg/sei_vui/neural_network_post_filter_characteristics.cfg @@ -12,6 +12,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 64cc080ab753b677b8a02fa31e2af23a645af1c5..9501d86cde7670505e6290899198159359906692 100644 --- a/doc/software-manual.tex +++ b/doc/software-manual.tex @@ -5430,6 +5430,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 3d797acad5aab5b2840f82377aa2ce595858a1fa..262ab1176253a9f28a70362b95445207237ef672 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -1179,6 +1179,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_SEPERATE_COLOR_CHARACTERISTICS + 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 1601e61cf45fe2e16d7df9ccec027f2fdacd53b5..fe9b25c03a27f1dc8a0deaed194281a5367dc73f 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -1713,7 +1713,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_SEPERATE_COLOR_CHARACTERISTICS + 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"); @@ -4618,6 +4638,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_SEPERATE_COLOR_CHARACTERISTICS + 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 305b979c4ef4d8f2f8f50b291632ddb65bb19092..5cd8bdb2bf3b3a2a7b7ddcf770397d13b998f420 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -746,6 +746,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_SEPERATE_COLOR_CHARACTERISTICS + 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 50a7f8b43dd6e734653e685d4578c6ee6b7ff9a7..75b711637a231bdbbdec9fab21341a337ed2dc10 100644 --- a/source/Lib/CommonLib/SEI.h +++ b/source/Lib/CommonLib/SEI.h @@ -1080,6 +1080,13 @@ public: , m_outTensorBitDepthMinus8(0) , m_componentLastFlag(false) , m_inpSampleIdc(0) +#if JVET_AA0100_SEPERATE_COLOR_CHARACTERISTICS + , 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) @@ -1119,6 +1126,13 @@ public: uint32_t m_outTensorBitDepthMinus8; bool m_componentLastFlag; uint32_t m_inpSampleIdc; +#if JVET_AA0100_SEPERATE_COLOR_CHARACTERISTICS + 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 f61a7eddc7285d02b6fd4eac54fc98e08b52435d..76bc9c3cfaf3b8a9282261a45746dcd68aece24e 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -55,6 +55,7 @@ //########### place macros to be removed in next cycle below this line ############### #define JVET_AA0056_GATING_FILTER_CHARACTERISTICS 1 // JVET-AA0056 AHG9: on syntax gating in the neural-network post-filter characteristics SEI message +#define JVET_AA0100_SEPERATE_COLOR_CHARACTERISTICS 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 9f38b62e4f62d7508ec1cf4901fd6f50d6c93500..52b142fdaf64b24121fb2bfcf146d2e45ada14e8 100644 --- a/source/Lib/DecoderLib/SEIread.cpp +++ b/source/Lib/DecoderLib/SEIread.cpp @@ -2516,6 +2516,22 @@ void SEIReader::xParseSEINNPostFilterCharacteristics(SEINeuralNetworkPostFilterC sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_inp_tensor_bitdepth_minus8"); sei.m_inpTensorBitDepthMinus8 = val; } +#if JVET_AA0100_SEPERATE_COLOR_CHARACTERISTICS + 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 9748e165cdc37b3c949dfa4226f1bec57d7f1b95..0fc08479d2fc0c4b61a310c756527fe741ec460c 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -678,6 +678,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_SEPERATE_COLOR_CHARACTERISTICS + 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]; @@ -1796,7 +1803,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_SEPERATE_COLOR_CHARACTERISTICS + 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 4c35d8c27df693ac4c6b552b60f3b7e6552bed7c..05302155f757ba2881b6bb3dd3bbc03437f047b6 100644 --- a/source/Lib/EncoderLib/SEIEncoder.cpp +++ b/source/Lib/EncoderLib/SEIEncoder.cpp @@ -1193,6 +1193,15 @@ void SEIEncoder::initSEINeuralNetworkPostFilterCharacteristics(SEINeuralNetworkP { sei->m_outTensorBitDepthMinus8 = m_pcCfg->getNNPostFilterSEICharacteristicsOutTensorBitDepthMinus8(filterIdx); } +#if JVET_AA0100_SEPERATE_COLOR_CHARACTERISTICS + 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 604044cd72e599586a2620c2f8caf4f6cdb0325b..c185535d0600a6713b74d51ba70829af7ca00f83 100644 --- a/source/Lib/EncoderLib/SEIwrite.cpp +++ b/source/Lib/EncoderLib/SEIwrite.cpp @@ -1424,6 +1424,16 @@ void SEIWriter::xWriteSEINeuralNetworkPostFilterCharacteristics(const SEINeuralN { WRITE_UVLC(sei.m_inpTensorBitDepthMinus8, "nnpfc_inp_tensor_bitdepth_minus8"); } +#if JVET_AA0100_SEPERATE_COLOR_CHARACTERISTICS + 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");