From 846ba56262eac2e451bb8ed671822c5bbeb178b3 Mon Sep 17 00:00:00 2001 From: Franck Galpin <franck.galpin@interdigital.com> Date: Mon, 25 Nov 2024 09:23:16 +0100 Subject: [PATCH] correct lop backward compatibility --- source/Lib/CommonLib/NNFilterUnified.cpp | 77 +++++++++++-------- .../Lib/EncoderLib/EncAdaptiveLoopFilter.cpp | 1 + 2 files changed, 48 insertions(+), 30 deletions(-) diff --git a/source/Lib/CommonLib/NNFilterUnified.cpp b/source/Lib/CommonLib/NNFilterUnified.cpp index 9382984b3..a2e0ca782 100644 --- a/source/Lib/CommonLib/NNFilterUnified.cpp +++ b/source/Lib/CommonLib/NNFilterUnified.cpp @@ -422,28 +422,34 @@ static void extractOutputsDCT(const Picture &pic, sadl::Model<T> &m, PelUnitBuf block[1] = 0; block[2] = 0; block[3] = 0; + const bool early_cropping=(inferArea.Y().width/2<output.dims()[2]); #endif - for (int y = 0; y < height / dct_sizeh; y++) { for (int x = 0; x < width / dct_sizew; x++) { int c1 = x % 2 + (y % 2) * 2; // take every 4th channel before pixel shuffle #if JVET_AJ0054_EARLY_CROPPING - if( y<2 || y>=((height/dct_sizeh)-2) || x < 2 || x>=((width/dct_sizew)-2)) - { - continue; - } + if (early_cropping) { + if( y<2 || y>=((height/dct_sizeh)-2) || x < 2 || x>=((width/dct_sizew)-2)) + { + continue; + } + } #endif if constexpr (std::is_same<TypeSadlLFUnified, float>::value) { for (int cc = c1; cc < dct_sizew * dct_sizeh * 4; cc += 4) { #if JVET_AJ0054_EARLY_CROPPING - tempCoeff[cc / 4] = output(0, (y / 2)-2, (x / 2)-2, cc) * (1 << shiftOutput); -#else - tempCoeff[cc / 4] = output(0, y / 2, x / 2, cc) * (1 << shiftOutput); + if (early_cropping) { + tempCoeff[cc / 4] = output(0, (y / 2)-2, (x / 2)-2, cc) * (1 << shiftOutput); + } else #endif + { + tempCoeff[cc / 4] = output(0, y / 2, x / 2, cc) * (1 << shiftOutput); + + } } } else @@ -451,10 +457,14 @@ static void extractOutputsDCT(const Picture &pic, sadl::Model<T> &m, PelUnitBuf for (int cc = c1; cc < dct_sizew * dct_sizeh * 4; cc += 4) { #if JVET_AJ0054_EARLY_CROPPING - tempCoeff[cc / 4] = output(0, (y / 2)-2, (x / 2)-2, cc) << shiftOutput; -#else - tempCoeff[cc / 4] = output(0, y / 2, x / 2, cc) << shiftOutput; -#endif + if (early_cropping) { + tempCoeff[cc / 4] = output(0, (y / 2)-2, (x / 2)-2, cc) << shiftOutput; + } + else +#endif + { + tempCoeff[cc / 4] = output(0, y / 2, x / 2, cc) << shiftOutput; + } } } tmp[0] = tempCoeff[0] + tempCoeff[1]; @@ -509,22 +519,27 @@ static void extractOutputsDCT(const Picture &pic, sadl::Model<T> &m, PelUnitBuf for (int x = 0; x < width / 2 / dct_sizew; x++) { #if JVET_AJ0054_EARLY_CROPPING - if( y<2 || y>=((height/2/dct_sizeh)-2) || x < 2 || x>=((width/2/dct_sizew)-2)) - { - continue; - } + if (early_cropping) { + if( y<2 || y>=((height/2/dct_sizeh)-2) || x < 2 || x>=((width/2/dct_sizew)-2)) + { + continue; + } + } #endif if constexpr (std::is_same<TypeSadlLFUnified, float>::value) { for (int cc = dct_sizew * dct_sizeh * 4; cc < dct_sizew * dct_sizeh * 5; cc++) { #if JVET_AJ0054_EARLY_CROPPING - tempCoeffCb[cc - dct_sizew * dct_sizeh * 4] = output(0, y-2, x-2, cc) * (1 << shiftOutput); - tempCoeffCr[cc - dct_sizew * dct_sizeh * 4] = output(0, y-2, x-2, cc + dct_sizew * dct_sizeh) * (1 << shiftOutput); -#else - tempCoeffCb[cc - dct_sizew * dct_sizeh * 4] = output(0, y, x, cc) * (1 << shiftOutput); - tempCoeffCr[cc - dct_sizew * dct_sizeh * 4] = output(0, y, x, cc + dct_sizew * dct_sizeh) * (1 << shiftOutput); -#endif + if (early_cropping) { + tempCoeffCb[cc - dct_sizew * dct_sizeh * 4] = output(0, y-2, x-2, cc) * (1 << shiftOutput); + tempCoeffCr[cc - dct_sizew * dct_sizeh * 4] = output(0, y-2, x-2, cc + dct_sizew * dct_sizeh) * (1 << shiftOutput); + } else +#endif + { + tempCoeffCb[cc - dct_sizew * dct_sizeh * 4] = output(0, y, x, cc) * (1 << shiftOutput); + tempCoeffCr[cc - dct_sizew * dct_sizeh * 4] = output(0, y, x, cc + dct_sizew * dct_sizeh) * (1 << shiftOutput); + } } } else @@ -532,12 +547,15 @@ static void extractOutputsDCT(const Picture &pic, sadl::Model<T> &m, PelUnitBuf for (int cc = dct_sizew * dct_sizeh * 4; cc < dct_sizew * dct_sizeh * 5; cc++) { #if JVET_AJ0054_EARLY_CROPPING - tempCoeffCb[cc - dct_sizew * dct_sizeh * 4] = output(0, y-2, x-2, cc) << shiftOutput; - tempCoeffCr[cc - dct_sizew * dct_sizeh * 4] = output(0, y-2, x-2, cc + dct_sizew * dct_sizeh) << shiftOutput; -#else - tempCoeffCb[cc - dct_sizew * dct_sizeh * 4] = output(0, y, x, cc) << shiftOutput; - tempCoeffCr[cc - dct_sizew * dct_sizeh * 4] = output(0, y, x, cc + dct_sizew * dct_sizeh) << shiftOutput; -#endif + if (early_cropping) { + tempCoeffCb[cc - dct_sizew * dct_sizeh * 4] = output(0, y-2, x-2, cc) << shiftOutput; + tempCoeffCr[cc - dct_sizew * dct_sizeh * 4] = output(0, y-2, x-2, cc + dct_sizew * dct_sizeh) << shiftOutput; + } else +#endif + { + tempCoeffCb[cc - dct_sizew * dct_sizeh * 4] = output(0, y, x, cc) << shiftOutput; + tempCoeffCr[cc - dct_sizew * dct_sizeh * 4] = output(0, y, x, cc + dct_sizew * dct_sizeh) << shiftOutput; + } } } tmpCb[0] = tempCoeffCb[0] + tempCoeffCb[1]; @@ -548,7 +566,7 @@ static void extractOutputsDCT(const Picture &pic, sadl::Model<T> &m, PelUnitBuf blockCb[1] = tmpCb[2] + tmpCb[3]; blockCb[2] = tmpCb[0] - tmpCb[1]; blockCb[3] = tmpCb[2] - tmpCb[3]; - tmpCr[0] = tempCoeffCr[0] + tempCoeffCr[1]; + tmpCr[0] = tempCoeffCr[0] + tempCoeffCr[1]; tmpCr[1] = tempCoeffCr[2] + tempCoeffCr[3]; tmpCr[2] = tempCoeffCr[0] - tempCoeffCr[1]; tmpCr[3] = tempCoeffCr[2] - tempCoeffCr[3]; @@ -708,7 +726,6 @@ void NNFilterUnified::filterBlock(Picture &pic, UnitArea inferArea, int extLeft, m_inputs[7](0, 0) = 1; } #endif - NNInference::infer<TypeSadlLFUnified>(model, m_inputs); UnitArea inferAreaNoExt(inferArea.chromaFormat, Area(inferArea.lx() + extLeft, inferArea.ly() + extTop, inferArea.lwidth() - extLeft - extRight, inferArea.lheight() - extTop - extBottom)); diff --git a/source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp b/source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp index c67322e2c..15aae5f27 100644 --- a/source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp +++ b/source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp @@ -3700,6 +3700,7 @@ void EncAdaptiveLoopFilter::deriveCcAlfFilter( CodingStructure& cs, ComponentID double bestFilteredTotalCost = MAX_DOUBLE; bool bestreuseTemporalFilterCoeff = false; std::vector<int> apsIds = getAvailableCcAlfApsIds(cs, compID); + m_bestFilterCount = 0; for (int testFilterIdx = 0; testFilterIdx < ( apsIds.size() + 1 ); testFilterIdx++ ) { -- GitLab