图片被分为一系列编码树单元(CTU)。CTU的概念与HEVC的概念相同。对于具有三个样本阵列的图片,CTU由N×N个亮度样本块以及两个相应的色度样本块组成。图2显示了将图片分为CTU的示例。
CTU中亮度块的最大允许大小指定为128×128(尽管亮度变换块的最大大小为64×64)。
一幅图片分为一个或多个tile行和一个或多个tile列。tile是一系列CTU覆盖的矩形区域。在tile中以栅格扫描顺序扫描图块中的CTU。
slice由整数个完整tile或整数个连续的完整CTU行组成。因此,每个垂直slice边界始终始终也是垂直tile边界。slice的水平边界可能不是图块tile,而是由tile内的水平CTU边界组成;当将tile拆分为多个矩形slice时,会发生这种情况,每个矩形slice由tile内的整数个连续完整CTU行组成。
支持两种slice模式,即栅格扫描slice模式和矩形slice模式。在栅格扫描slice模式下,slice包含图片的slice栅格扫描中的完整slice序列。在矩形slice模式中,slice包含共同形成图片的矩形区域的多个完整tile,或包含共同形成图片的矩形区域的一个tile的多个连续完整CTU行。在对应于该slice的矩形区域内,以栅格扫描顺序扫描矩形slice中的slice。
子图片包含一个或多个slice,这些slice共同覆盖图片的矩形区域。因此,每个子图片边界也总是slice边界,并且每个垂直子图片边界也总是垂直tile边界。
图4显示了图片的栅格扫描slice分区的示例,其中图片被分为12个tile和3个栅格扫描slice。
图4
图5显示了图片的矩形slice分区的示例,其中将图片分为24个tile(6个图块列和4个图块行)和9个矩形slice。
图5
图6显示了一个图片的示例,该图片被分为tile和矩形slice,其中该图片被分为4个tile(2个图块列和2个图块行)和4个矩形slice。
图6
图7显示了图片的子图片划分示例,其中图片被划分为18个tile,左侧为12个tile,每个图块覆盖4x4 CTU的一个slice,右侧为6个tile,每个tile覆盖2 垂直堆叠的2x2 CTU的slice,总共产生24个slice和24个尺寸变化的子图片(每个slice是一个子图片)。
在VVC中,具有使用二叉和三叉拆分分段结构的嵌套多类型树的四叉树替换了多个分区单元类型的概念,即,它删除了CU,PU和TU概念的分隔,但对于具有大小的CU也需要这样做对于最大的变换长度,该值较大,并支持CU分区形状的更大灵活性。在编码树结构中,CU可以具有正方形或矩形形状。编码树单元(CTU)首先由四叉树(又称四叉树)结构划分。然后,可以通过多类型树结构进一步划分四叉树叶子节点。如图7所示,多类型树结构中有四种拆分类型:垂直二进制拆分(SPLIT_BT_VER),水平二进制拆分(SPLIT_BT_HOR),垂直三元拆分(SPLIT_TT_VER)和水平三元拆分(SPLIT_TT_HOR)。多种类型的树叶节点称为编码单元(CU),除非CU对于最大变换长度而言太大,否则该分段可用于预测和变换处理,而无需任何进一步的划分。这意味着,在大多数情况下,CU,PU和TU在具有嵌套多类型树编码块结构的四叉树中具有相同的块大小。当最大支持的变换长度小于CU的颜色分量的宽度或高度时,会发生例外。
图8示出了具有嵌套的多类型树编码树结构的四叉树中的分区划分信息的信令机制。编码树单元(CTU)被视为四叉树的根,并且首先被四叉树结构划分。然后,每个四叉树的叶子节点(当足够大时允许它)被一个多类型的树结构进一步划分。在多类型树结构中,发信号通知第一标志(mtt_split_cu_flag)以指示该节点是否进一步划分;当进一步对节点进行划分时,会发信号通知第二个标志(mtt_split_cu_vertical_flag),以指示拆分方向,然后发信号通知第三标志(mtt_split_cu_binary_flag),以指示拆分是二进制拆分还是三元拆分。根据mtt_split_cu_vertical_flag和mtt_split_cu_binary_flag的值,得出CU的多类型树分割模式(MttSplitMode),如表3-1所示。
图9显示了一个CTU,它分为具有四叉树和嵌套的多类型树编码块结构的多个CU,其中粗体块边缘代表四叉树分区,其余边缘代表多类型树分区。具有嵌套的多类型树分区的四叉树提供了包含CU的内容自适应编码树结构。CU的大小可以与CTU一样大,或者以亮度样本为单位小至4×4。对于4:2:0色度格式,最大色度CB大小为64×64,最小色度CB由16个色度样本组成。
在VVC中,支持的最大亮度转换大小为64×64,支持的最大色度转换大小为32×32。当CB的宽度或高度大于最大变换宽度或高度时,CB会在水平和/或垂直方向上自动拆分,以满足该方向上的变换大小限制。
由SPS语法元素为具有嵌套多类型树编码树方案的四叉树定义和指定以下参数。
CTU大小:四叉树的根节点大小
MinQTSize:允许的最小四叉树叶节点大小
MaxBtSize:允许的最大二叉树根节点大小
MaxTtSize:允许的最大三叉树根节点大小
MaxMttDepth:从四叉树叶中拆分出的多类型树的最大允许层次深度
MinBtSize:允许的最小二叉树叶子节点大小
MinTtSize:允许的最小三叉树叶子节点大小
在具有嵌套的多类型树编码树结构的四叉树的一个示例中,将CTU大小设置为128×128亮度样本,并使用两个对应的64×64块的4:2:0色度样本,将MinQTSize设置为16×16,将MaxBtSize设置为128×128,将MaxTtSize设置为64×64,将MinBtSize和MinTtSize(对于宽度和高度)设置为4×4,并将MaxMttDepth设置为4。首先将其应用于CTU以生成第四级树叶节点。四级树叶节点的大小可以从16×16(即MinQTSize)到128×128(即CTU大小)。如果叶子QT节点是128×128,则由于大小超过MaxBtSize和MaxTtSize(即64×64),因此不会被二叉树进一步拆分。否则,qdtree节点可能会被多类型树进一步分区。因此,四叉树的叶子节点也是多类型树的根节点,它的多类型树深度(mttDepth)为0。当多类型树深度达到MaxMttDepth(即4)时,不再拆分被认为。当多类型树节点的宽度等于MinBtSize且小于或等于2 * MinTtSize时,不再考虑进一步的水平分割。类似地,当多类型树节点的高度等于MinBtSize且小于或等于2 * MinTtSize时,则不考虑进一步的垂直拆分。
为了在VVC硬件解码器中允许64×64亮度块和32×32色度流水线设计,当亮度编码块的宽度或高度大于64时,TT分割是禁止的,如图10所示。色度编码块的宽度或高度大于32。
在VVC中,编码树方案支持亮度和色度具有单独的块树结构的能力。对于P和B slice,一个CTU中的亮度CTB和色度CTB必须共享相同的编码树结构。但是,对于I slice,亮度和色度可以具有单独的块树结构。当应用单独的块树模式时,亮度CTB通过一种编码树结构被划分为CU,并且色度CTB通过另一编码树结构被划分为色度CU。这意味着I slice中的CU可能由亮度分量的编码块或两个色度分量的编码块组成,而P或B切片中的CU总是由所有三种颜色分量的编码块组成,除非视频是单色。
如在HEVC中所做的那样,当树节点块的一部分超过底部或右图像边界时,迫使树节点块被分割直到每个编码CU的所有样本都位于图像边界内。在VVC中应用了以下拆分规则:
如果树节点块的任何部分超出底部或右侧图片边界,并且由于块大小限制而不允许进行QT,BT和TT拆分,则必须使用QT拆分模式拆分该块。
否则,如果树节点块的一部分超过了底部和右侧图片边界,
如果块是QT节点,并且块的大小大于最小QT大小,则将强制使用QT拆分模式进行拆分。
否则,将强制使用SPLIT_BT_HOR模式拆分该块
否则,如果树节点块的一部分超出了底部图片边界,
如果该块是QT节点,并且该块的大小大于最小QT大小,并且该块的大小大于最大BT大小,则必须使用QT拆分模式拆分该块。
否则,如果该块是QT节点,并且该块的大小大于最小QT大小,并且该块的大小小于或等于最大BT大小,则强制使用QT分割模式或SPLIT_BT_HOR模式拆分该块 。
否则(该块是BTT节点,或者该块的大小小于或等于最小QT大小),则强制使用SPLIT_BT_HOR模式拆分该块。
否则,如果树节点块的一部分超出了正确的图片边界,
如果该块是QT节点,并且该块的大小大于最小QT大小,并且该块的大小大于最大BT大小,则必须使用QT拆分模式拆分该块。
否则,如果该块是QT节点,并且该块的大小大于最小QT大小,并且该块的大小小于或等于最大BT大小,则强制使用QT拆分模式或SPLIT_BT_VER模式拆分该块 。
否则(该块是BTT节点,或者该块的大小小于或等于最小QT大小),则强制使用SPLIT_BT_VER模式拆分该块。
具有嵌套的多类型树编码块结构的四叉树提供了高度灵活的块分区结构。由于支持多类型树的拆分类型,不同的拆分模式可能潜在地导致相同的编码块结构。在VVC中,不允许使用其中一些冗余拆分模式。
图11说明了二叉树拆分和三叉树拆分的冗余拆分模式。如图11所示,在一个方向上的两个连续的二进制分割级别可以具有与三进制树分割和中央分区的二进制树分割相同的编码块结构。在这种情况下,语法会阻止三叉树拆分的中央分区的二叉树拆分(沿给定方向)。此限制适用于所有图片中的CU。
当如上所述禁止拆分时,修改相应语法元素的信令以解决禁止情况。例如,当识别出图11中的任何情况时(即,对中央分区的CU禁止二进制拆分),语法元素mtt_split_cu_binary_flag会被信号通知,该语法元素指定拆分是二进制拆分还是三元拆分 由解码器推断为等于0。
虚拟管道数据单元(VPDU)在图片中定义为非重叠单元。在硬件解码器中,连续的VPDU由多个流水线级同时处理。在大多数流水线阶段,VPDU的大小大致与缓冲区的大小成正比,因此保持VPDU的大小很小很重要。在大多数硬件解码器中,可以将VPDU大小设置为最大转换块(TB)大小。但是,在VVC中,三叉树(TT)和二叉树(BT)分区可能导致VPDU大小增加。
为了将VPDU大小保持为64x64亮度样本,在VTM中应用了以下规范性分区限制(带有语法信令修改),如图12所示:
宽度或高度或宽度和高度均等于128的CU不允许进行TT拆分。
对于N≤64(即宽度等于128而高度小于128)的128xN CU,不允许水平BT。
对于N≤64(即,高度等于128,宽度小于128)的Nx128 CU,不允许垂直BT。
在典型的硬件视频编码器和解码器中,由于相邻的内帧内块之间的样本处理数据相关性,当图片的帧内块较小时,处理吞吐量会下降。帧内块的预测器生成需要来自相邻块的顶部和左侧边界重构样本。因此,必须逐块顺序地处理帧内预测。
在HEVC中,最小的帧内 CU是8x8亮度采样。最小帧内CU的亮度分量可以进一步拆分为四个4x4亮度帧内预测单元(Pus),但是最小帧内CU的色度分量无法进一步拆分。因此,在处理4x4色度帧内块或4x4亮度帧内块时,会发生最坏情况的硬件处理吞吐量。在VVC中,为了提高最坏情况的吞吐量,通过限制以下对象的色度,不允许小于16个色度样本(大小2x2、4x2和2x4)的色度帧内CB和宽度小于4个色度样本(大小2xN)的帧内色度CB。
在单个编码树中,最小色度帧内预测单元(SCIPU)定义为其色度块大小大于或等于16个色度样本并具有至少一个小于64个亮度样本的子亮度块的编码树节点,或色度块大小不是2xN并具有至少一个子亮度块4xN个亮度采样的编码树节点。要求在每个SCIPU中,所有CB都是内部的,或者所有CB都是非内部的,即帧内或块内复制(IBC)。在非内部SCIPU的情况下,进一步要求非内部SCIPU的色度不得进一步分割,而SCIPU的亮度应允许进一步分割。这样,大小小于16个色度样本或大小为2xN的小色度内部CB被删除。另外,在非内部SCIPU的情况下,不应用色度缩放。在此,没有信号通知其他语法,并且可以通过SCIPU中的第一亮度CB的预测模式来得出SCIPU是否是非内部的。如果当前切片是I切片,或者当前SCIPU在进一步分割一次之后(其中VVC不允许内部4x4),则当前SCIPU在其中具有4x4亮度分区,则将SCIPU的类型推断为非内部。否则,在解析SCIPU中的Cus之前,通过一个标志指示SCIPU的类型(内部或非内部)。
对于帧内图片中的双树,通过分别禁用4xN和8xN色度分区的垂直二进制和垂直三进制拆分,可以删除2xN内色度块。还通过分区限制删除了大小为2x2、4x2和2x4的小chroam块。
另外,通过考虑图片的宽度和高度为max(8,MinCbSizeY)的倍数,可以考虑对图片大小进行限制,以避免在图片的一角出现2x2 / 2x4 / 4x2 / 2xN个内色度块。
更多信息请关注公众号