diff --git a/doc/software-manual.tex b/doc/software-manual.tex index 246f7b8d3effe1e5b6a3bd02b8ccb655eab2e8ca..2f10b24f5c7a4f64076ee2fd6ea80b457ff24422 100755 --- a/doc/software-manual.tex +++ b/doc/software-manual.tex @@ -1685,6 +1685,12 @@ If ScalingList is set to 2 and this parameter is an empty string, information on is output and the encoder stops. \\ +\Option{DisableScalingMatrixForLFNST} & +%\ShortOption{\None} & +\Default{true} & +Specifies whether scaling matrices are to be applied to blocks coded with LFNST. +\\ + \Option{MaxCUChromaQpAdjustmentDepth} & %\ShortOption{\None} & \Default{-1} & diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp index 007618c5f2b4642913baa7a2795b0a2a0324d26a..34e3951a0efeb47f8da7ec6873a2ac859e0d6d81 100644 --- a/source/App/EncoderApp/EncApp.cpp +++ b/source/App/EncoderApp/EncApp.cpp @@ -588,6 +588,9 @@ void EncApp::xInitLibCfg() m_cEncLib.setPPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1 ( m_PPSMaxNumMergeCandMinusMaxNumTriangleCandPlus1 ); m_cEncLib.setUseScalingListId ( m_useScalingListId ); m_cEncLib.setScalingListFileName ( m_scalingListFileName ); +#if JVET_P0365_SCALING_MATRIX_LFNST + m_cEncLib.setDisableScalingMatrixForLfnstBlks ( m_disableScalingMatrixForLfnstBlks); +#endif m_cEncLib.setDepQuantEnabledFlag ( m_depQuantEnabledFlag); m_cEncLib.setSignDataHidingEnabledFlag ( m_signDataHidingEnabledFlag); m_cEncLib.setUseRateCtrl ( m_RCEnableRateControl ); diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp index 648bf65eff57e3f9d2ff91f657282d365dfb0d04..d2fdacf3bcb3a494fca23bc01719d4dab0ee8c11 100644 --- a/source/App/EncoderApp/EncAppCfg.cpp +++ b/source/App/EncoderApp/EncAppCfg.cpp @@ -1199,6 +1199,9 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] ) ("ScalingList", m_useScalingListId, SCALING_LIST_OFF, "0/off: no scaling list, 1/default: default scaling lists, 2/file: scaling lists specified in ScalingListFile") ("ScalingListFile", m_scalingListFileName, string(""), "Scaling list file name. Use an empty string to produce help.") +#if JVET_P0365_SCALING_MATRIX_LFNST + ("DisableScalingMatrixForLFNST", m_disableScalingMatrixForLfnstBlks, true, "Disable scaling matrices, when enabled, for LFNST-coded blocks") +#endif ("DepQuant", m_depQuantEnabledFlag, true ) ("SignHideFlag,-SBH", m_signDataHidingEnabledFlag, false ) ("MaxNumMergeCand", m_maxNumMergeCand, 5u, "Maximum number of merge candidates") diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h index 79a3af175043f89f2d6f85878d88e82758430b38..db0b21c077eda8a91323086cba8301a9f5228552 100644 --- a/source/App/EncoderApp/EncAppCfg.h +++ b/source/App/EncoderApp/EncAppCfg.h @@ -574,6 +574,9 @@ protected: #endif ScalingListMode m_useScalingListId; ///< using quantization matrix std::string m_scalingListFileName; ///< quantization matrix file name +#if JVET_P0365_SCALING_MATRIX_LFNST + bool m_disableScalingMatrixForLfnstBlks; +#endif bool m_TransquantBypassEnabledFlag; ///< transquant_bypass_enabled_flag setting in PPS. bool m_CUTransquantBypassFlagForce; ///< if transquant_bypass_enabled_flag, then, if true, all CU transquant bypass flags will be set to true. CostMode m_costMode; ///< Cost mode to use diff --git a/source/Lib/CommonLib/DepQuant.cpp b/source/Lib/CommonLib/DepQuant.cpp index be3e077fde229df2c7c9f0f8e59a63bac4d2104d..c63ef3adfa30b7fafc1595d5c05af7f5a1ea1e43 100644 --- a/source/Lib/CommonLib/DepQuant.cpp +++ b/source/Lib/CommonLib/DepQuant.cpp @@ -1649,9 +1649,19 @@ void DepQuant::quant( TransformUnit &tu, const ComponentID &compID, const CCoeff const uint32_t log2TrWidth = floorLog2(width); const uint32_t log2TrHeight = floorLog2(height); #if JVET_P0058_CHROMA_TS +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(width, height, (tu.mtsIdx[compID] == MTS_SKIP), tu.cu->lfnstIdx > 0, disableSMForLFNST); +#else const bool enableScalingLists = getUseScalingList(width, height, (tu.mtsIdx[compID] == MTS_SKIP)); +#endif +#else +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(width, height, (tu.mtsIdx == MTS_SKIP && isLuma(compID)), tu.cu->lfnstIdx > 0, disableSMForLFNST); #else const bool enableScalingLists = getUseScalingList(width, height, (tu.mtsIdx == MTS_SKIP && isLuma(compID))); +#endif #endif static_cast<DQIntern::DepQuant*>(p)->quant( tu, pSrc, compID, cQP, Quant::m_dLambda, ctx, uiAbsSum, enableScalingLists, Quant::getQuantCoeff(scalingListType, qpRem, log2TrWidth, log2TrHeight) ); } @@ -1694,9 +1704,19 @@ void DepQuant::dequant( const TransformUnit &tu, CoeffBuf &dstCoeff, const Compo const uint32_t log2TrWidth = floorLog2(width); const uint32_t log2TrHeight = floorLog2(height); #if JVET_P0058_CHROMA_TS +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(width, height, (tu.mtsIdx[compID] == MTS_SKIP), tu.cu->lfnstIdx > 0, disableSMForLFNST); +#else const bool enableScalingLists = getUseScalingList(width, height, (tu.mtsIdx[compID] == MTS_SKIP)); +#endif +#else +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(width, height, (tu.mtsIdx == MTS_SKIP && isLuma(compID)), tu.cu->lfnstIdx > 0, disableSMForLFNST); #else const bool enableScalingLists = getUseScalingList(width, height, (tu.mtsIdx == MTS_SKIP && isLuma(compID))); +#endif #endif static_cast<DQIntern::DepQuant*>(p)->dequant( tu, dstCoeff, compID, cQP, enableScalingLists, Quant::getDequantCoeff(scalingListType, qpRem, log2TrWidth, log2TrHeight) ); } diff --git a/source/Lib/CommonLib/Quant.cpp b/source/Lib/CommonLib/Quant.cpp index 87547187c6f295fe5a440a1e3b7ab2b21eb94c2e..1693a64bea6edaaf6cb8f64ba3c1b99cbdd68a10 100644 --- a/source/Lib/CommonLib/Quant.cpp +++ b/source/Lib/CommonLib/Quant.cpp @@ -382,7 +382,13 @@ void Quant::dequant(const TransformUnit &tu, #else const bool isTransformSkip = tu.mtsIdx==MTS_SKIP && isLuma(compID); #endif + +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, isTransformSkip, tu.cu->lfnstIdx > 0, disableSMForLFNST); +#else const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, isTransformSkip); +#endif const int scalingListType = getScalingListType(tu.cu->predMode, compID); const int channelBitDepth = sps->getBitDepth(toChannelType(compID)); @@ -1079,8 +1085,13 @@ void Quant::quant(TransformUnit &tu, const ComponentID &compID, const CCoeffBuf const uint32_t uiLog2TrWidth = floorLog2(uiWidth); const uint32_t uiLog2TrHeight = floorLog2(uiHeight); int *piQuantCoeff = getQuantCoeff(scalingListType, cQP.rem(useTransformSkip), uiLog2TrWidth, uiLog2TrHeight); - + +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, useTransformSkip, tu.cu->lfnstIdx > 0, disableSMForLFNST); +#else const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, useTransformSkip); +#endif // for blocks that where width*height != 4^N, the effective scaling applied during transformation cannot be // compensated by a bit-shift (the quantised result will be sqrt(2) * larger than required). @@ -1164,8 +1175,13 @@ bool Quant::xNeedRDOQ(TransformUnit &tu, const ComponentID &compID, const CCoeff const uint32_t uiLog2TrWidth = floorLog2(uiWidth); const uint32_t uiLog2TrHeight = floorLog2(uiHeight); int *piQuantCoeff = getQuantCoeff(scalingListType, cQP.rem(useTransformSkip), uiLog2TrWidth, uiLog2TrHeight); - + +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, (useTransformSkip != 0), tu.cu->lfnstIdx > 0, disableSMForLFNST); +#else const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, (useTransformSkip != 0)); +#endif /* for 422 chroma blocks, the effective scaling applied during transformation is not a power of 2, hence it cannot be * implemented as a bit-shift (the quantised result will be sqrt(2) * larger than required). Alternatively, adjust the @@ -1214,7 +1230,12 @@ void Quant::transformSkipQuantOneSample(TransformUnit &tu, const ComponentID &co const int channelBitDepth = sps.getBitDepth(toChannelType(compID)); const int iTransformShift = getTransformShift(channelBitDepth, rect.size(), maxLog2TrDynamicRange); const int scalingListType = getScalingListType(tu.cu->predMode, compID); +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, true, tu.cu->lfnstIdx > 0, disableSMForLFNST); +#else const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, true); +#endif #if JVET_P0058_CHROMA_TS const bool useTransformSkip = (tu.mtsIdx[compID] == MTS_SKIP); #else @@ -1291,7 +1312,12 @@ void Quant::invTrSkipDeQuantOneSample(TransformUnit &tu, const ComponentID &comp const int channelBitDepth = sps.getBitDepth(toChannelType(compID)); const int iTransformShift = getTransformShift(channelBitDepth, rect.size(), maxLog2TrDynamicRange); const int scalingListType = getScalingListType(tu.cu->predMode, compID); +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, true, tu.cu->lfnstIdx > 0, disableSMForLFNST); +#else const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, true); +#endif CHECK(scalingListType >= SCALING_LIST_NUM, "Invalid scaling list"); diff --git a/source/Lib/CommonLib/Quant.h b/source/Lib/CommonLib/Quant.h index 58505c399bb30e5d6e650873b7e40a7fda1e664e..89c0d6596019e10d45a269161b75f7aa72e2930d 100644 --- a/source/Lib/CommonLib/Quant.h +++ b/source/Lib/CommonLib/Quant.h @@ -126,7 +126,14 @@ public: int* getDequantCoeff ( uint32_t list, int qp, uint32_t sizeX, uint32_t sizeY ) { return m_dequantCoef [sizeX][sizeY][list][qp]; }; //!< get DeQuant Coefficent void setUseScalingList ( bool bUseScalingList){ m_scalingListEnabledFlag = bUseScalingList; }; +#if JVET_P0365_SCALING_MATRIX_LFNST + bool getUseScalingList(const uint32_t width, const uint32_t height, const bool isTransformSkip, const bool lfnstApplied, const bool disableScalingMatrixForLFNSTBlks) + { + return (m_scalingListEnabledFlag && !isTransformSkip && (!lfnstApplied || !disableScalingMatrixForLFNSTBlks)); + } +#else bool getUseScalingList ( const uint32_t width, const uint32_t height, const bool isTransformSkip) { return (m_scalingListEnabledFlag && !isTransformSkip); }; +#endif void setScalingListDec ( const ScalingList &scalingList); void processScalingListEnc ( int *coeff, int *quantcoeff, int qpMod6, uint32_t height, uint32_t width, uint32_t ratio, int sizuNum, uint32_t dc); void processScalingListDec ( const int *coeff, int *dequantcoeff, int qpMod6, uint32_t height, uint32_t width, uint32_t ratio, int sizuNum, uint32_t dc); diff --git a/source/Lib/CommonLib/QuantRDOQ.cpp b/source/Lib/CommonLib/QuantRDOQ.cpp index 690bfa0430c4d5e67a2dfaf373456a893de4b68d..cc4c8ae6c92572287b652b59712c163cdb79bb40 100644 --- a/source/Lib/CommonLib/QuantRDOQ.cpp +++ b/source/Lib/CommonLib/QuantRDOQ.cpp @@ -667,7 +667,12 @@ void QuantRDOQ::xRateDistOptQuant(TransformUnit &tu, const ComponentID &compID, #endif const double *const pdErrScale = xGetErrScaleCoeffSL(scalingListType, uiLog2BlockWidth, uiLog2BlockHeight, cQP.rem(isTransformSkip)); const int *const piQCoef = getQuantCoeff(scalingListType, cQP.rem(isTransformSkip), uiLog2BlockWidth, uiLog2BlockHeight); +#if JVET_P0365_SCALING_MATRIX_LFNST + const bool disableSMForLFNST = tu.cs->sps->getScalingListFlag() ? tu.cs->slice->getscalingListAPS()->getScalingList().getDisableScalingMatrixForLfnstBlks() : false; + const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, isTransformSkip, tu.cu->lfnstIdx > 0, disableSMForLFNST); +#else const bool enableScalingLists = getUseScalingList(uiWidth, uiHeight, isTransformSkip); +#endif const int defaultQuantisationCoefficient = g_quantScales[ needSqrtAdjustment ?1:0][cQP.rem(isTransformSkip)]; const double defaultErrorScale = xGetErrScaleCoeffNoScalingList(scalingListType, uiLog2BlockWidth, uiLog2BlockHeight, cQP.rem(isTransformSkip)); const int iQBits = QUANT_SHIFT + cQP.per(isTransformSkip) + iTransformShift + (needSqrtAdjustment?-1:0); // Right shift of non-RDOQ quantizer; level = (coeff*uiQ + offset)>>q_bits diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp index 671b53fdb4080c28be493fb587ab8bb450f9509e..8629d4c1dd90c4ee1bf475fb5ad3652950343885 100644 --- a/source/Lib/CommonLib/Slice.cpp +++ b/source/Lib/CommonLib/Slice.cpp @@ -2106,6 +2106,9 @@ void ReferencePictureList::printRefPicInfo() const ScalingList::ScalingList() { +#if JVET_P0365_SCALING_MATRIX_LFNST + m_disableScalingMatrixForLfnstBlks = true; +#endif #if JVET_P01034_PRED_1D_SCALING_LIST for (uint32_t scalingListId = 0; scalingListId < 28; scalingListId++) { diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h index 75b6675601d51771171685f2ad7039aed18c8856..83f12218c4b90db77cb8dd2b292c00fb6a6243f1 100644 --- a/source/Lib/CommonLib/Slice.h +++ b/source/Lib/CommonLib/Slice.h @@ -144,6 +144,10 @@ class ScalingList public: ScalingList(); virtual ~ScalingList() { } +#if JVET_P0365_SCALING_MATRIX_LFNST + bool getDisableScalingMatrixForLfnstBlks() const { return m_disableScalingMatrixForLfnstBlks;} + void setDisableScalingMatrixForLfnstBlks(bool flag) { m_disableScalingMatrixForLfnstBlks = flag;} +#endif #if JVET_P01034_PRED_1D_SCALING_LIST int* getScalingListAddress(uint32_t scalingListId) { return &(m_scalingListCoef[scalingListId][0]); } //!< get matrix coefficient const int* getScalingListAddress(uint32_t scalingListId) const { return &(m_scalingListCoef[scalingListId][0]); } //!< get matrix coefficient @@ -226,6 +230,9 @@ public: private: void outputScalingLists(std::ostream &os) const; +#if JVET_P0365_SCALING_MATRIX_LFNST + bool m_disableScalingMatrixForLfnstBlks; +#endif #if JVET_P01034_PRED_1D_SCALING_LIST bool m_scalingListPredModeFlagIsCopy [30]; //!< reference list index int m_scalingListDC [30]; //!< the DC value of the matrix coefficient for 16x16 diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h index a031d7369c8ea4a5dec845f90c1d9df294e052b8..7c0026daa70639bc6989acaea71a3febf2164e82 100644 --- a/source/Lib/CommonLib/TypeDef.h +++ b/source/Lib/CommonLib/TypeDef.h @@ -50,6 +50,8 @@ #include <assert.h> #include <cassert> +#define JVET_P0365_SCALING_MATRIX_LFNST 1 // JVET-P0365: Signal flag to indicate whether scaling matrices are used for LFNST-coded blocks + #define JVET_P0243_SINGLE_BIT_DEPTH 1 // JVET-P0243: Single bitdepth for luma and chroma #define JVET_P0244_SPS_CLEAN_UP 1 // JVET-P0244/P0429: SPS cleanup changes diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index d61b88a1fbe92b273e3bc6c96c1946c8ef19d7b7..dd2dddafa877eee961e5c7069c7b7f152e4ba990 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -2887,7 +2887,9 @@ void HLSyntaxReader::parseScalingList(ScalingList* scalingList) #if JVET_P01034_PRED_1D_SCALING_LIST uint32_t code; bool scalingListCopyModeFlag; - +#if JVET_P0365_SCALING_MATRIX_LFNST + READ_FLAG(code, "scaling_matrix_for_lfnst_disabled_flag"); scalingList->setDisableScalingMatrixForLfnstBlks(code ? true : false); +#endif for (int scalingListId = 0; scalingListId < 28; scalingListId++) { READ_FLAG(code, "scaling_list_copy_mode_flag"); diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h index 9f7cbf09cacc495b769ba0169827511cfcefa259..e03c78000ab05cf5cba7204e60e682575eb0c5dc 100644 --- a/source/Lib/EncoderLib/EncCfg.h +++ b/source/Lib/EncoderLib/EncCfg.h @@ -589,6 +589,9 @@ protected: uint32_t m_maxNumIBCMergeCand; ///< Max number of IBC merge candidates ScalingListMode m_useScalingListId; ///< Using quantization matrix i.e. 0=off, 1=default, 2=file. std::string m_scalingListFileName; ///< quantization matrix file name +#if JVET_P0365_SCALING_MATRIX_LFNST + bool m_disableScalingMatrixForLfnstBlks; +#endif int m_TMVPModeId; bool m_constantSliceHeaderParamsEnabledFlag; int m_PPSDepQuantEnabledIdc; @@ -1517,6 +1520,10 @@ public: ScalingListMode getUseScalingListId () { return m_useScalingListId; } void setScalingListFileName ( const std::string &s ) { m_scalingListFileName = s; } const std::string& getScalingListFileName () const { return m_scalingListFileName; } +#if JVET_P0365_SCALING_MATRIX_LFNST + void setDisableScalingMatrixForLfnstBlks(bool u) { m_disableScalingMatrixForLfnstBlks = u; } + bool getDisableScalingMatrixForLfnstBlks() const { return m_disableScalingMatrixForLfnstBlks; } +#endif void setTMVPModeId ( int u ) { m_TMVPModeId = u; } int getTMVPModeId () { return m_TMVPModeId; } void setConstantSliceHeaderParamsEnabledFlag ( bool u ) { m_constantSliceHeaderParamsEnabledFlag = u; } diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp index f68abcc8c5cd4672d7d84ca4185fa709722b6503..c5bc99a5a0b132897a97b5d9a81a67aca0768c81 100644 --- a/source/Lib/EncoderLib/EncLib.cpp +++ b/source/Lib/EncoderLib/EncLib.cpp @@ -499,6 +499,9 @@ void EncLib::xInitScalingLists( SPS &sps, APS &aps ) { getTrQuant( jId )->getQuant()->setUseScalingList( true ); } +#if JVET_P0365_SCALING_MATRIX_LFNST + aps.getScalingList().setDisableScalingMatrixForLfnstBlks(getDisableScalingMatrixForLfnstBlks()); +#endif #endif } else if(getUseScalingListId() == SCALING_LIST_FILE_READ) @@ -517,6 +520,9 @@ void EncLib::xInitScalingLists( SPS &sps, APS &aps ) { getTrQuant( jId )->getQuant()->setUseScalingList( true ); } +#endif +#if JVET_P0365_SCALING_MATRIX_LFNST + aps.getScalingList().setDisableScalingMatrixForLfnstBlks(getDisableScalingMatrixForLfnstBlks()); #endif } else diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index f2ac3e98fee29ae14e301675b06e0a78bc1b1e23..96a733bfc561fe75c83bc0d99673569eb1bd80b4 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1829,6 +1829,9 @@ void HLSWriter::xCodePredWeightTable( Slice* pcSlice ) void HLSWriter::codeScalingList( const ScalingList &scalingList ) { //for each size +#if JVET_P0365_SCALING_MATRIX_LFNST + WRITE_FLAG(scalingList.getDisableScalingMatrixForLfnstBlks(), "scaling_matrix_for_lfnst_disabled_flag"); +#endif #if JVET_P01034_PRED_1D_SCALING_LIST for (uint32_t scalingListId = 0; scalingListId < 28; scalingListId++) {