diff --git a/source/Lib/DecoderLib/DecLib.cpp b/source/Lib/DecoderLib/DecLib.cpp index caf495b327de4f5f7eeacce4251fae629b87b771..e78d641bfddd226e6893c1543794737f54d3d284 100644 --- a/source/Lib/DecoderLib/DecLib.cpp +++ b/source/Lib/DecoderLib/DecLib.cpp @@ -206,6 +206,10 @@ bool tryDecodePicture( Picture* pcEncPic, const int expectedPoc, const std::stri { std::copy( pic->getAlfCtuEnableFlag()[compIdx].begin(), pic->getAlfCtuEnableFlag()[compIdx].end(), pcEncPic->getAlfCtuEnableFlag()[compIdx].begin() ); } +#if JVET_N0415_CTB_ALF + pcEncPic->resizeAlfCtbFilterIndex(pic->cs->pcv->sizeInCtus); + memcpy( pcEncPic->getAlfCtbFilterIndex(), pic->getAlfCtbFilterIndex(), sizeof(short)*pic->cs->pcv->sizeInCtus ); +#endif #if JVET_O0090_ALF_CHROMA_FILTER_ALTERNATIVES_CTB std::copy( pic->getAlfCtuAlternative(COMPONENT_Cb).begin(), pic->getAlfCtuAlternative(COMPONENT_Cb).end(), pcEncPic->getAlfCtuAlternative(COMPONENT_Cb).begin() ); diff --git a/source/Lib/EncoderLib/EncAdaptiveLoopFilter.h b/source/Lib/EncoderLib/EncAdaptiveLoopFilter.h index 678cc6b86fc2a355a0fadbb324791a43b6fc61d9..42dc89c3fc7c49ea7558f2820301213d65a0b72a 100644 --- a/source/Lib/EncoderLib/EncAdaptiveLoopFilter.h +++ b/source/Lib/EncoderLib/EncAdaptiveLoopFilter.h @@ -297,6 +297,7 @@ public: #if !JVET_O0216_ALF_COEFF_EG3 || !JVET_O0064_SIMP_ALF_CLIP_CODING static int getGolombKMin( AlfFilterShape& alfShape, const int numFilters, int kMinTab[MAX_NUM_ALF_LUMA_COEFF], int bitsCoeffScan[m_MAX_SCAN_VAL][m_MAX_EXP_GOLOMB] ); #endif + void setApsIdStart( int i) { m_apsIdStart = i; } private: void alfEncoder( CodingStructure& cs, AlfParam& alfParam, const PelUnitBuf& orgUnitBuf, const PelUnitBuf& recExtBuf, const PelUnitBuf& recBuf, const ChannelType channel diff --git a/source/Lib/EncoderLib/EncGOP.cpp b/source/Lib/EncoderLib/EncGOP.cpp index 1a202e9d28b4a2214364a6f700daeb4ddbb6d090..c348ae0e23623207e95894ef085a82df0ac29ec8 100644 --- a/source/Lib/EncoderLib/EncGOP.cpp +++ b/source/Lib/EncoderLib/EncGOP.cpp @@ -2497,6 +2497,7 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, for (int apsId = 0; apsId < MAX_NUM_APS; apsId++) //HD: shouldn't this be looping over slice_alf_aps_id_luma[ i ]? By looping over MAX_NUM_APS, it is possible unused ALF APS is written. Please check! { ParameterSetMap<APS> *apsMap = m_pcEncLib->getApsMap(); + APS* aps = apsMap->getPS((apsId << NUM_APS_TYPE_LEN) + ALF_APS); bool writeAPS = aps && apsMap->getChangedFlag((apsId << NUM_APS_TYPE_LEN) + ALF_APS); if (!aps && pcSlice->getAlfAPSs() && pcSlice->getAlfAPSs()[apsId]) @@ -2504,7 +2505,8 @@ void EncGOP::compressGOP( int iPOCLast, int iNumPicRcvd, PicList& rcListPic, writeAPS = true; aps = pcSlice->getAlfAPSs()[apsId]; // use asp from slice header *apsMap->allocatePS(apsId) = *aps; //allocate and cpy - } + m_pcALF->setApsIdStart( apsId ); + } if (writeAPS ) {