From 44b815faebc7e881f0cc294604517dd4754cf39e Mon Sep 17 00:00:00 2001 From: guichunli <guichunli@tencent.com> Date: Thu, 30 Jan 2020 11:09:01 -0800 Subject: [PATCH] Add comments to clarify minQT size for chroma separate tree is in chroma samples --- cfg/encoder_intra_vtm.cfg | 2 +- cfg/encoder_lowdelay_P_vtm.cfg | 2 +- cfg/encoder_lowdelay_vtm.cfg | 2 +- cfg/encoder_randomaccess_vtm.cfg | 2 +- .../encoder_randomaccess_vtm_RasterScanSlice.cfg | 3 +-- .../encoder_randomaccess_vtm_RectangularSlice.cfg | 3 +-- .../encoder_randomaccess_vtm_RectangularSliceFixedSize.cfg | 3 +-- .../encoder_randomaccess_vtm_SingleTilePerSlice.cfg | 3 +-- source/Lib/DecoderLib/VLCReader.cpp | 1 + source/Lib/EncoderLib/VLCWriter.cpp | 2 ++ 10 files changed, 11 insertions(+), 12 deletions(-) diff --git a/cfg/encoder_intra_vtm.cfg b/cfg/encoder_intra_vtm.cfg index 610ba3dc7..9d689eadb 100644 --- a/cfg/encoder_intra_vtm.cfg +++ b/cfg/encoder_intra_vtm.cfg @@ -69,7 +69,7 @@ LCTUFast : 1 DualITree : 1 # separate partitioning of luma and chroma channels for I-slices MinQTLumaISlice : 8 -MinQTChromaISlice : 4 +MinQTChromaISlice : 4 # minimum QT size in chroma samples for chroma separate tree MinQTNonISlice : 8 MaxMTTHierarchyDepth : 3 MaxMTTHierarchyDepthISliceL : 3 diff --git a/cfg/encoder_lowdelay_P_vtm.cfg b/cfg/encoder_lowdelay_P_vtm.cfg index e355312bb..d4f402d49 100644 --- a/cfg/encoder_lowdelay_P_vtm.cfg +++ b/cfg/encoder_lowdelay_P_vtm.cfg @@ -93,7 +93,7 @@ LCTUFast : 1 DualITree : 1 # separate partitioning of luma and chroma channels for I-slices MinQTLumaISlice : 8 -MinQTChromaISlice : 4 +MinQTChromaISlice : 4 # minimum QT size in chroma samples for chroma separate tree MinQTNonISlice : 8 MaxMTTHierarchyDepth : 3 MaxMTTHierarchyDepthISliceL : 3 diff --git a/cfg/encoder_lowdelay_vtm.cfg b/cfg/encoder_lowdelay_vtm.cfg index 126d9add7..6c73d1f51 100644 --- a/cfg/encoder_lowdelay_vtm.cfg +++ b/cfg/encoder_lowdelay_vtm.cfg @@ -93,7 +93,7 @@ LCTUFast : 1 DualITree : 1 # separate partitioning of luma and chroma channels for I-slices MinQTLumaISlice : 8 -MinQTChromaISlice : 4 +MinQTChromaISlice : 4 # minimum QT size in chroma samples for chroma separate tree MinQTNonISlice : 8 MaxMTTHierarchyDepth : 3 MaxMTTHierarchyDepthISliceL : 3 diff --git a/cfg/encoder_randomaccess_vtm.cfg b/cfg/encoder_randomaccess_vtm.cfg index 27267b772..a06837461 100644 --- a/cfg/encoder_randomaccess_vtm.cfg +++ b/cfg/encoder_randomaccess_vtm.cfg @@ -104,7 +104,7 @@ LCTUFast : 1 DualITree : 1 # separate partitioning of luma and chroma channels for I-slices MinQTLumaISlice : 8 -MinQTChromaISlice : 4 +MinQTChromaISlice : 4 # minimum QT size in chroma samples for chroma separate tree MinQTNonISlice : 8 MaxMTTHierarchyDepth : 3 MaxMTTHierarchyDepthISliceL : 3 diff --git a/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RasterScanSlice.cfg b/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RasterScanSlice.cfg index 7487dc814..d10dc963d 100644 --- a/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RasterScanSlice.cfg +++ b/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RasterScanSlice.cfg @@ -8,7 +8,6 @@ Profile : auto #======== Unit definition ================ MaxCUWidth : 64 # Maximum coding unit width in pixel MaxCUHeight : 64 # Maximum coding unit height in pixel -MaxPartitionDepth : 4 # Maximum coding unit depth #======== Coding Structure ============= IntraPeriod : 32 # Period of I-Frame ( -1 = only first) @@ -105,7 +104,7 @@ LCTUFast : 1 DualITree : 1 # separate partitioning of luma and chroma channels for I-slices MinQTLumaISlice : 8 -MinQTChromaISlice : 4 +MinQTChromaISlice : 4 # minimum QT size in chroma samples for chroma separate tree MinQTNonISlice : 8 MaxMTTHierarchyDepth : 3 MaxMTTHierarchyDepthISliceL : 3 diff --git a/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RectangularSlice.cfg b/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RectangularSlice.cfg index c0d3ecbbc..cfbac5ec1 100644 --- a/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RectangularSlice.cfg +++ b/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RectangularSlice.cfg @@ -8,7 +8,6 @@ Profile : auto #======== Unit definition ================ MaxCUWidth : 64 # Maximum coding unit width in pixel MaxCUHeight : 64 # Maximum coding unit height in pixel -MaxPartitionDepth : 4 # Maximum coding unit depth #======== Coding Structure ============= IntraPeriod : 32 # Period of I-Frame ( -1 = only first) @@ -105,7 +104,7 @@ LCTUFast : 1 DualITree : 1 # separate partitioning of luma and chroma channels for I-slices MinQTLumaISlice : 8 -MinQTChromaISlice : 4 +MinQTChromaISlice : 4 # minimum QT size in chroma samples for chroma separate tree MinQTNonISlice : 8 MaxMTTHierarchyDepth : 3 MaxMTTHierarchyDepthISliceL : 3 diff --git a/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RectangularSliceFixedSize.cfg b/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RectangularSliceFixedSize.cfg index 9f29eb4d0..5a1ef8325 100644 --- a/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RectangularSliceFixedSize.cfg +++ b/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_RectangularSliceFixedSize.cfg @@ -8,7 +8,6 @@ Profile : auto #======== Unit definition ================ MaxCUWidth : 64 # Maximum coding unit width in pixel MaxCUHeight : 64 # Maximum coding unit height in pixel -MaxPartitionDepth : 4 # Maximum coding unit depth #======== Coding Structure ============= IntraPeriod : 32 # Period of I-Frame ( -1 = only first) @@ -106,7 +105,7 @@ LCTUFast : 1 DualITree : 1 # separate partitioning of luma and chroma channels for I-slices MinQTLumaISlice : 8 -MinQTChromaISlice : 4 +MinQTChromaISlice : 4 # minimum QT size in chroma samples for chroma separate tree MinQTNonISlice : 8 MaxMTTHierarchyDepth : 3 MaxMTTHierarchyDepthISliceL : 3 diff --git a/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_SingleTilePerSlice.cfg b/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_SingleTilePerSlice.cfg index 4f9a7857f..b231677bf 100644 --- a/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_SingleTilePerSlice.cfg +++ b/cfg/nonCTC-SliceConfigExamples/encoder_randomaccess_vtm_SingleTilePerSlice.cfg @@ -8,7 +8,6 @@ Profile : auto #======== Unit definition ================ MaxCUWidth : 64 # Maximum coding unit width in pixel MaxCUHeight : 64 # Maximum coding unit height in pixel -MaxPartitionDepth : 4 # Maximum coding unit depth #======== Coding Structure ============= IntraPeriod : 32 # Period of I-Frame ( -1 = only first) @@ -103,7 +102,7 @@ LCTUFast : 1 DualITree : 1 # separate partitioning of luma and chroma channels for I-slices MinQTLumaISlice : 8 -MinQTChromaISlice : 4 +MinQTChromaISlice : 4 # minimum QT size in chroma samples for chroma separate tree MinQTNonISlice : 8 MaxMTTHierarchyDepth : 3 MaxMTTHierarchyDepthISliceL : 3 diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp index 3a59e8344..c267b070c 100644 --- a/source/Lib/DecoderLib/VLCReader.cpp +++ b/source/Lib/DecoderLib/VLCReader.cpp @@ -2009,6 +2009,7 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag if (sps->getUseDualITree()) { #if JVET_Q0468_Q0469_MIN_LUMA_CB_AND_MIN_QT_FIX + // Since in software minQT[2] is in chroma samples, min CB size in luma samples is first converted into chroma samples for the calculation const int base = std::max(MIN_CU_LOG2, sps->getLog2MinCodingBlockSize() - (int)getChannelTypeScaleX(CHANNEL_TYPE_CHROMA, sps->getChromaFormatIdc())); READ_UVLC(uiCode, "pic_log2_diff_min_qt_min_cb_intra_slice_chroma"); minQT[2] = 1 << (uiCode + base); #else diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp index e476a4030..22e43ce95 100644 --- a/source/Lib/EncoderLib/VLCWriter.cpp +++ b/source/Lib/EncoderLib/VLCWriter.cpp @@ -825,6 +825,7 @@ void HLSWriter::codeSPS( const SPS* pcSPS ) if (pcSPS->getUseDualITree()) { #if JVET_Q0468_Q0469_MIN_LUMA_CB_AND_MIN_QT_FIX + // Since in software minQT[2] is in chroma samples, min CB size in luma samples is first converted into chroma samples for the calculation const int minDiff = (int)floorLog2(pcSPS->getMinQTSize(I_SLICE, CHANNEL_TYPE_CHROMA)) - std::max(MIN_CU_LOG2, pcSPS->getLog2MinCodingBlockSize() - (int)getChannelTypeScaleX(CHANNEL_TYPE_CHROMA, pcSPS->getChromaFormatIdc())); CHECK(minDiff < 0, "Wrong min intra QT chroma"); WRITE_UVLC(minDiff, "sps_log2_diff_min_qt_min_cb_intra_slice_chroma"); @@ -1390,6 +1391,7 @@ void HLSWriter::codePictureHeader( PicHeader* picHeader ) if (sps->getUseDualITree()) { #if JVET_Q0468_Q0469_MIN_LUMA_CB_AND_MIN_QT_FIX + // Since in software minQT[2] is in chroma samples, min CB size in luma samples is first converted into chroma samples for the calculation const int minDiff = (int)floorLog2(picHeader->getMinQTSize(I_SLICE, CHANNEL_TYPE_CHROMA)) - std::max(MIN_CU_LOG2, sps->getLog2MinCodingBlockSize() - (int)getChannelTypeScaleX(CHANNEL_TYPE_CHROMA, sps->getChromaFormatIdc())); CHECK(minDiff < 0, "Wrong min intra QT chroma"); WRITE_UVLC(minDiff, "pic_log2_diff_min_qt_min_cb_intra_slice_chroma"); -- GitLab