diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp index 76ee9e97fcda80aaa43b2c398cf620abb37f0669..9b743a45fe8e4ce3fff48c186582ac3322974474 100644 --- a/source/Lib/EncoderLib/CABACWriter.cpp +++ b/source/Lib/EncoderLib/CABACWriter.cpp @@ -152,10 +152,10 @@ void CABACWriter::end_of_slice() //================================================================================ // clause 7.3.8.2 //-------------------------------------------------------------------------------- -// bool coding_tree_unit( cs, area, qp, ctuRsAddr, skipSao ) +// bool coding_tree_unit( cs, area, qp, ctuRsAddr, skipSao, skipAlf ) //================================================================================ -void CABACWriter::coding_tree_unit( CodingStructure& cs, const UnitArea& area, int (&qps)[2], unsigned ctuRsAddr, bool skipSao /* = false */ ) +void CABACWriter::coding_tree_unit( CodingStructure& cs, const UnitArea& area, int (&qps)[2], unsigned ctuRsAddr, bool skipSao /* = false */, bool skipAlf /* = false */ ) { CUCtx cuCtx( qps[CH_L] ); Partitioner *partitioner = PartitionerFactory::get( *cs.slice ); @@ -167,15 +167,18 @@ void CABACWriter::coding_tree_unit( CodingStructure& cs, const UnitArea& area, i sao( *cs.slice, ctuRsAddr ); } - for( int compIdx = 0; compIdx < MAX_NUM_COMPONENT; compIdx++ ) + if (!skipAlf) { - codeAlfCtuEnableFlag( cs, ctuRsAddr, compIdx, NULL ); -#if JVET_N0415_CTB_ALF - if (isLuma(ComponentID(compIdx))) + for (int compIdx = 0; compIdx < MAX_NUM_COMPONENT; compIdx++) { - codeAlfCtuFilterIndex(cs, ctuRsAddr, cs.slice->getTileGroupAlfEnabledFlag(COMPONENT_Y)); - } + codeAlfCtuEnableFlag(cs, ctuRsAddr, compIdx, NULL); +#if JVET_N0415_CTB_ALF + if (isLuma(ComponentID(compIdx))) + { + codeAlfCtuFilterIndex(cs, ctuRsAddr, cs.slice->getTileGroupAlfEnabledFlag(COMPONENT_Y)); + } #endif + } } if ( CS::isDualITree(cs) && cs.pcv->chrFormat != CHROMA_400 && cs.pcv->maxCUWidth > 64 ) diff --git a/source/Lib/EncoderLib/CABACWriter.h b/source/Lib/EncoderLib/CABACWriter.h index 3c7c329471fb8ec9e34f2382aed9f48b3cea3ef1..52d5216f6ea5fc9cfbef691c22ad1bdc04ab3100 100644 --- a/source/Lib/EncoderLib/CABACWriter.h +++ b/source/Lib/EncoderLib/CABACWriter.h @@ -74,7 +74,7 @@ public: void end_of_slice (); // coding tree unit (clause 7.3.8.2) - void coding_tree_unit ( CodingStructure& cs, const UnitArea& area, int (&qps)[2], unsigned ctuRsAddr, bool skipSao = false ); + void coding_tree_unit ( CodingStructure& cs, const UnitArea& area, int (&qps)[2], unsigned ctuRsAddr, bool skipSao = false, bool skipAlf = false ); // sao (clause 7.3.8.3) void sao ( const Slice& slice, unsigned ctuRsAddr ); diff --git a/source/Lib/EncoderLib/EncSlice.cpp b/source/Lib/EncoderLib/EncSlice.cpp index f383b5643ac0fb48b6a11d01ea6795a0a6f35d52..67ce9808003be973c5c4d07878f2fd37fc5fc0d3 100644 --- a/source/Lib/EncoderLib/EncSlice.cpp +++ b/source/Lib/EncoderLib/EncSlice.cpp @@ -1770,7 +1770,7 @@ void EncSlice::encodeCtus( Picture* pcPic, const bool bCompressEntireSlice, cons #endif pCABACWriter->resetBits(); - pCABACWriter->coding_tree_unit( cs, ctuArea, prevQP, ctuRsAddr, true ); + pCABACWriter->coding_tree_unit( cs, ctuArea, prevQP, ctuRsAddr, true, true ); const int numberOfWrittenBits = int( pCABACWriter->getEstFracBits() >> SCALE_BITS ); // Calculate if this CTU puts us over slice bit size.