From e1eeec744ecbb965999e756b2644859bf522ed1c Mon Sep 17 00:00:00 2001 From: Vadim Seregin <vseregin@qti.qualcomm.com> Date: Fri, 11 Aug 2023 20:58:10 +0000 Subject: [PATCH] Fix: add initialization for BIF overhead parsing and copy --- source/Lib/CommonLib/Picture.h | 4 +++- source/Lib/DecoderLib/CABACReader.cpp | 26 +++++++++++++++----------- source/Lib/DecoderLib/DecLib.cpp | 4 ++++ source/Lib/EncoderLib/CABACWriter.cpp | 14 +++++++------- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/source/Lib/CommonLib/Picture.h b/source/Lib/CommonLib/Picture.h index 61f072cb2..0f5acca2f 100644 --- a/source/Lib/CommonLib/Picture.h +++ b/source/Lib/CommonLib/Picture.h @@ -341,13 +341,15 @@ public: void copySAO(const Picture& src, int dstid) { std::copy(src.m_sao[0].begin(), src.m_sao[0].end(), m_sao[dstid].begin()); } #if JVET_V0094_BILATERAL_FILTER - BifParams& getBifParam( const ComponentID compID ) { return m_bifParams[compID]; } + BifParams& getBifParam( const ComponentID compID ) { return m_bifParams[compID]; } void resizeBIF( const ComponentID compID, unsigned numEntries ) { m_bifParams[compID].numBlocks = numEntries; m_bifParams[compID].ctuOn.resize(numEntries); std::fill(m_bifParams[compID].ctuOn.begin(), m_bifParams[compID].ctuOn.end(), 0); }; + + void copyBIF( const Picture& src ) { m_bifParams[COMPONENT_Y] = src.m_bifParams[COMPONENT_Y]; m_bifParams[COMPONENT_Cb] = src.m_bifParams[COMPONENT_Cb]; m_bifParams[COMPONENT_Cr] = src.m_bifParams[COMPONENT_Cr]; } #endif #if ENABLE_QPA std::vector<double> m_uEnerHpCtu; ///< CTU-wise L2 or squared L1 norm of high-passed luma input diff --git a/source/Lib/DecoderLib/CABACReader.cpp b/source/Lib/DecoderLib/CABACReader.cpp index eb92e6f91..09c3b5540 100644 --- a/source/Lib/DecoderLib/CABACReader.cpp +++ b/source/Lib/DecoderLib/CABACReader.cpp @@ -584,9 +584,11 @@ void CABACReader::bif( const ComponentID compID, CodingStructure& cs, unsigned c } #endif + RExt__DECODER_DEBUG_BIT_STATISTICS_CREATE_SET2( STATS__CABAC_BITS__BIF, compID ); + BifParams& bifParams = cs.picture->getBifParam( compID ); - if (ctuRsAddr == 0) + if( ctuRsAddr == 0 ) { int width = cs.picture->lwidth(); int height = cs.picture->lheight(); @@ -598,30 +600,32 @@ void CABACReader::bif( const ComponentID compID, CodingStructure& cs, unsigned c bifParams.numBlocks = widthInBlocks * heightInBlocks; bifParams.ctuOn.resize( bifParams.numBlocks ); std::fill(bifParams.ctuOn.begin(), bifParams.ctuOn.end(), 0); - } - RExt__DECODER_DEBUG_BIT_STATISTICS_CREATE_SET2(STATS__CABAC_BITS__BIF, compID); - if (ctuRsAddr == 0) - { + bifParams.allCtuOn = m_BinDecoder.decodeBinEP(); + if( bifParams.allCtuOn == 0 ) { bifParams.frmOn = m_BinDecoder.decodeBinEP(); } + else + { + bifParams.frmOn = 0; + } } - int i = ctuRsAddr; - if (bifParams.allCtuOn) + + if( bifParams.allCtuOn ) { - bifParams.ctuOn[i] = 1; + bifParams.ctuOn[ctuRsAddr] = 1; } else { - if (bifParams.frmOn ) + if( bifParams.frmOn ) { - bifParams.ctuOn[i] = m_BinDecoder.decodeBin(Ctx::BifCtrlFlags[compID]()); + bifParams.ctuOn[ctuRsAddr] = m_BinDecoder.decodeBin( Ctx::BifCtrlFlags[compID]() ); } else { - bifParams.ctuOn[i] = 0; + bifParams.ctuOn[ctuRsAddr] = 0; } } } diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index 7ed28e46b..0c4074592 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -209,6 +209,10 @@ bool tryDecodePicture( Picture* pcEncPic, const int expectedPoc, const std::stri #endif { pcEncPic->copySAO( *pic, 0 ); + +#if JVET_V0094_BILATERAL_FILTER + pcEncPic->copyBIF( *pic ); +#endif } #if JVET_W0066_CCSAO diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp index 4bcd74dee..ea5051347 100644 --- a/source/Lib/EncoderLib/CABACWriter.cpp +++ b/source/Lib/EncoderLib/CABACWriter.cpp @@ -178,18 +178,18 @@ void CABACWriter::bif( const ComponentID compID, const Slice& slice, const BifPa } #endif - if (ctuRsAddr == 0) + if( ctuRsAddr == 0 ) { - m_BinEncoder.encodeBinEP(bifParams.allCtuOn); - if (bifParams.allCtuOn == 0) + m_BinEncoder.encodeBinEP( bifParams.allCtuOn ); + if( bifParams.allCtuOn == 0 ) { - m_BinEncoder.encodeBinEP(bifParams.frmOn); + m_BinEncoder.encodeBinEP( bifParams.frmOn ); } } - if(bifParams.allCtuOn == 0 && bifParams.frmOn ) + + if( bifParams.allCtuOn == 0 && bifParams.frmOn ) { - int i = ctuRsAddr; - m_BinEncoder.encodeBin( bifParams.ctuOn[i], Ctx::BifCtrlFlags[compID]() ); + m_BinEncoder.encodeBin( bifParams.ctuOn[ctuRsAddr], Ctx::BifCtrlFlags[compID]() ); } } #endif -- GitLab