diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 98315e87059113268ae45cabd59328343355b5e5..7aeefae1df1ca91707a7f27efb3f7a857ccaad30 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -2198,7 +2198,49 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para pcSlice->setNumRefIdx(REF_PIC_LIST_1, pcSlice->getRPL1()->getNumRefEntries()); } } + } + + if ( + sps->getSplitConsOverrideEnabledFlag() + ) + { + READ_FLAG(uiCode, "partition_constrainst_override_flag"); pcSlice->setSplitConsOverrideFlag(uiCode ? true : false); + if (pcSlice->getSplitConsOverrideFlag()) + { + READ_UVLC(uiCode, "log2_diff_min_qt_min_cb"); pcSlice->setMinQTSize(1 << (uiCode + sps->getLog2MinCodingBlockSize())); + READ_UVLC(uiCode, "max_mtt_hierarchy_depth"); pcSlice->setMaxBTDepth(uiCode); + if (pcSlice->getMaxBTDepth() != 0) + { + READ_UVLC(uiCode, "log2_diff_max_bt_min_qt"); pcSlice->setMaxBTSize(pcSlice->getMinQTSize() << uiCode); + READ_UVLC(uiCode, "log2_diff_max_tt_min_qt"); pcSlice->setMaxTTSize(pcSlice->getMinQTSize() << uiCode); + } + else + { + pcSlice->setMaxBTSize(pcSlice->getMinQTSize()); + pcSlice->setMaxTTSize(pcSlice->getMinQTSize()); + } + if ( + pcSlice->isIntra() && sps->getUseDualITree() + ) + { + READ_UVLC(uiCode, "log2_diff_min_qt_min_cb_chroma"); pcSlice->setMinQTSizeIChroma(1 << (uiCode + sps->getLog2MinCodingBlockSize())); + READ_UVLC(uiCode, "max_mtt_hierarchy_depth_chroma"); pcSlice->setMaxBTDepthIChroma(uiCode); + if (pcSlice->getMaxBTDepthIChroma() != 0) + { + READ_UVLC(uiCode, "log2_diff_max_bt_min_qt_chroma"); pcSlice->setMaxBTSizeIChroma(pcSlice->getMinQTSizeIChroma() << uiCode); + READ_UVLC(uiCode, "log2_diff_max_tt_min_qt_chroma"); pcSlice->setMaxTTSizeIChroma(pcSlice->getMinQTSizeIChroma() << uiCode); + } + else + { + pcSlice->setMaxBTSizeIChroma(pcSlice->getMinQTSizeIChroma()); + pcSlice->setMaxTTSizeIChroma(pcSlice->getMinQTSizeIChroma()); + } + } + } + } + if(!pcSlice->isIntra()) + { #if JVET_O0238_PPS_OR_SLICE if (sps->getSPSTemporalMVPEnabledFlag() && !pps->getPPSTemporalMVPEnabledIdc()) #else @@ -2437,44 +2479,6 @@ void HLSyntaxReader::parseSliceHeader (Slice* pcSlice, ParameterSetManager *para { pcSlice->setSignDataHidingEnabledFlag( 0 ); } - if ( - sps->getSplitConsOverrideEnabledFlag() - ) - { - READ_FLAG(uiCode, "partition_constrainst_override_flag"); pcSlice->setSplitConsOverrideFlag(uiCode ? true : false); - if (pcSlice->getSplitConsOverrideFlag()) - { - READ_UVLC(uiCode, "log2_diff_min_qt_min_cb"); pcSlice->setMinQTSize(1 << (uiCode + sps->getLog2MinCodingBlockSize())); - READ_UVLC(uiCode, "max_mtt_hierarchy_depth"); pcSlice->setMaxBTDepth(uiCode); - if (pcSlice->getMaxBTDepth() != 0) - { - READ_UVLC(uiCode, "log2_diff_max_bt_min_qt"); pcSlice->setMaxBTSize(pcSlice->getMinQTSize() << uiCode); - READ_UVLC(uiCode, "log2_diff_max_tt_min_qt"); pcSlice->setMaxTTSize(pcSlice->getMinQTSize() << uiCode); - } - else - { - pcSlice->setMaxBTSize(pcSlice->getMinQTSize()); - pcSlice->setMaxTTSize(pcSlice->getMinQTSize()); - } - if ( - pcSlice->isIntra() && sps->getUseDualITree() - ) - { - READ_UVLC(uiCode, "log2_diff_min_qt_min_cb_chroma"); pcSlice->setMinQTSizeIChroma(1 << (uiCode + sps->getLog2MinCodingBlockSize())); - READ_UVLC(uiCode, "max_mtt_hierarchy_depth_chroma"); pcSlice->setMaxBTDepthIChroma(uiCode); - if (pcSlice->getMaxBTDepthIChroma() != 0) - { - READ_UVLC(uiCode, "log2_diff_max_bt_min_qt_chroma"); pcSlice->setMaxBTSizeIChroma(pcSlice->getMinQTSizeIChroma() << uiCode); - READ_UVLC(uiCode, "log2_diff_max_tt_min_qt_chroma"); pcSlice->setMaxTTSizeIChroma(pcSlice->getMinQTSizeIChroma() << uiCode); - } - else - { - pcSlice->setMaxBTSizeIChroma(pcSlice->getMinQTSizeIChroma()); - pcSlice->setMaxTTSizeIChroma(pcSlice->getMinQTSizeIChroma()); - } - } - } - } #if JVET_O0455_IBC_MAX_MERGE_NUM if (!pcSlice->isIntra()) diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index e09235becae2c3f1d19a7ee3c6b0e48cbe5b2fe0..2746a61659612f607db585ec55f2aecdb1ec79ba 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -1520,7 +1520,43 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) pcSlice->setNumRefIdx( REF_PIC_LIST_0, pcSlice->isIntra() ? 0 : 1 ); pcSlice->setNumRefIdx( REF_PIC_LIST_1, pcSlice->isInterB() ? 1 : 0 ); } + } + + if ( + pcSlice->getSPS()->getSplitConsOverrideEnabledFlag() + ) + { + WRITE_FLAG(pcSlice->getSplitConsOverrideFlag() ? 1 : 0, "partition_constrainst_override_flag"); + if (pcSlice->getSplitConsOverrideFlag()) + { + WRITE_UVLC(floorLog2(pcSlice->getMinQTSize()) - pcSlice->getSPS()->getLog2MinCodingBlockSize(), "log2_diff_min_qt_min_cb"); + WRITE_UVLC(pcSlice->getMaxBTDepth(), "max_bt_depth"); + if (pcSlice->getMaxBTDepth() != 0) + { + CHECK(pcSlice->getMaxBTSize() < pcSlice->getMinQTSize(), "maxBtSize is smaller than minQtSize"); + WRITE_UVLC(floorLog2(pcSlice->getMaxBTSize()) - floorLog2(pcSlice->getMinQTSize()), "log2_diff_max_bt_min_qt"); + CHECK(pcSlice->getMaxTTSize() < pcSlice->getMinQTSize(), "maxTtSize is smaller than minQtSize"); + WRITE_UVLC(floorLog2(pcSlice->getMaxTTSize()) - floorLog2(pcSlice->getMinQTSize()), "log2_diff_max_tt_min_qt"); + } + if ( + pcSlice->isIntra() && pcSlice->getSPS()->getUseDualITree() + ) + { + WRITE_UVLC(floorLog2(pcSlice->getMinQTSizeIChroma()) - pcSlice->getSPS()->getLog2MinCodingBlockSize(), "log2_diff_min_qt_min_cb_chroma"); + WRITE_UVLC(pcSlice->getMaxBTDepthIChroma(), "max_mtt_hierarchy_depth_chroma"); + if (pcSlice->getMaxBTDepthIChroma() != 0) + { + CHECK(pcSlice->getMaxBTSizeIChroma() < pcSlice->getMinQTSizeIChroma(), "maxBtSizeC is smaller than minQtSizeC"); + WRITE_UVLC(floorLog2(pcSlice->getMaxBTSizeIChroma()) - floorLog2(pcSlice->getMinQTSizeIChroma()), "log2_diff_max_bt_min_qt_chroma"); + CHECK(pcSlice->getMaxTTSizeIChroma() < pcSlice->getMinQTSizeIChroma(), "maxTtSizeC is smaller than minQtSizeC"); + WRITE_UVLC(floorLog2(pcSlice->getMaxTTSizeIChroma()) - floorLog2(pcSlice->getMinQTSizeIChroma()), "log2_diff_max_tt_min_qt_chroma"); + } + } + } + } + if(!pcSlice->isIntra()) + { #if JVET_O0238_PPS_OR_SLICE if( pcSlice->getSPS()->getSPSTemporalMVPEnabledFlag() && !pcSlice->getPPS()->getPPSTemporalMVPEnabledIdc() ) { @@ -1684,38 +1720,6 @@ void HLSWriter::codeSliceHeader ( Slice* pcSlice ) { CHECK( pcSlice->getSignDataHidingEnabledFlag(), "sign data hiding not supported when dependent quantization is enabled" ); } - if ( - pcSlice->getSPS()->getSplitConsOverrideEnabledFlag() - ) - { - WRITE_FLAG(pcSlice->getSplitConsOverrideFlag() ? 1 : 0, "partition_constrainst_override_flag"); - if (pcSlice->getSplitConsOverrideFlag()) - { - WRITE_UVLC(floorLog2(pcSlice->getMinQTSize()) - pcSlice->getSPS()->getLog2MinCodingBlockSize(), "log2_diff_min_qt_min_cb"); - WRITE_UVLC(pcSlice->getMaxBTDepth(), "max_bt_depth"); - if (pcSlice->getMaxBTDepth() != 0) - { - CHECK(pcSlice->getMaxBTSize() < pcSlice->getMinQTSize(), "maxBtSize is smaller than minQtSize"); - WRITE_UVLC(floorLog2(pcSlice->getMaxBTSize()) - floorLog2(pcSlice->getMinQTSize()), "log2_diff_max_bt_min_qt"); - CHECK(pcSlice->getMaxTTSize() < pcSlice->getMinQTSize(), "maxTtSize is smaller than minQtSize"); - WRITE_UVLC(floorLog2(pcSlice->getMaxTTSize()) - floorLog2(pcSlice->getMinQTSize()), "log2_diff_max_tt_min_qt"); - } - if ( - pcSlice->isIntra() && pcSlice->getSPS()->getUseDualITree() - ) - { - WRITE_UVLC(floorLog2(pcSlice->getMinQTSizeIChroma()) - pcSlice->getSPS()->getLog2MinCodingBlockSize(), "log2_diff_min_qt_min_cb_chroma"); - WRITE_UVLC(pcSlice->getMaxBTDepthIChroma(), "max_mtt_hierarchy_depth_chroma"); - if (pcSlice->getMaxBTDepthIChroma() != 0) - { - CHECK(pcSlice->getMaxBTSizeIChroma() < pcSlice->getMinQTSizeIChroma(), "maxBtSizeC is smaller than minQtSizeC"); - WRITE_UVLC(floorLog2(pcSlice->getMaxBTSizeIChroma()) - floorLog2(pcSlice->getMinQTSizeIChroma()), "log2_diff_max_bt_min_qt_chroma"); - CHECK(pcSlice->getMaxTTSizeIChroma() < pcSlice->getMinQTSizeIChroma(), "maxTtSizeC is smaller than minQtSizeC"); - WRITE_UVLC(floorLog2(pcSlice->getMaxTTSizeIChroma()) - floorLog2(pcSlice->getMinQTSizeIChroma()), "log2_diff_max_tt_min_qt_chroma"); - } - } - } - } #if JVET_O0455_IBC_MAX_MERGE_NUM if (!cs.slice->isIntra()) #else