H.266/VVC技术描述_10-屏幕内容工具

1、IBC

  IBC(Intra block copy)针对屏幕内容提出的工具,总体上是为每个CU找到一组匹配的重建块来替代当前块,可以认为是在帧内做运动补偿。亮度和色度块组都是整数精度,使用AMVR时可以在1像素和4像素之间切换。IBC模式是帧内和帧间以外的第三种预测模式,使用在宽高均大于等于64的CU中。
  在编码端,编码器对宽或高不大于16的亮度块进行RD check,对于非merge模式,首先进行哈希查找,如果无法返回有效的候选项则进行块匹配搜索。哈希键可用于所有块大小,帧内每个位值的哈希键基于4x4子块进行计算。对于大尺寸块,需要块中所有4x4子块的哈希值与参考位值的哈希值匹配。如果有多个参考块被选中,则计算cost并选择最小的参考块。匹配搜索中,搜索范围包括所有以前的CTU和当前CTU。
  在CU级,IBC模式会使用一个flag表示,分为IBC AMVP模式和IBC skip/merge模式。与帧间模式类似,IBC AMVP模式编码预测运动矢量(使用左边和上边两个运动矢量进行预测)和实际运动矢量之差,IBC
skip/merge模式发送一个merge候选列表索引。

1.1 IBC参考区域

  为了减少解码端内存和计算复杂度,便于硬件实现,IBC允许只在当前CTU和左侧CTU的一部分进行。参考区域如下图,每个方块代表64x64的区域。
H.266/VVC技术描述_10-屏幕内容工具_第1张图片

1.2 IBC与其他编码工具交互

  1、IBC可以和pairwise merge与HMVP一起使用,新的pairwise merge候选通过对两个IBC merge候选平均得到。对于HMVP,IBC运动信息会被插入到history buffer中作为未来的参考。
  2、IBC可以使用Affine, CIIP, MMVD, TPM。
  3、使用DUAL_TREE时IBC不被用于色度编码。

  与HEVC的屏幕内容编码扩展不同,IBC中当前帧不再含有一个参考帧,也就是说不含有帧间的运动信息。因此,
  1、IBC的merge候选列表不含有TMVP。
  2、帧间的MV和IBC分别建立HMVP buffer。
  3、编码端必须确定没有无效的IBC矢量,如果没有有效的候选则不使用merge模式,虚拟buffer的概念在下文指出。
  4、去方块滤波中IBC被视为帧间模式。
  5、AMVR只使用1像素或2像素
  6、IBC模式的候选数量在slice头信息中独立标记,区别于传统模式、子块、三角预测的候选数量。

  为了描述IBC模式的参考区域和有效块矢量,定义了virtual buffer的概念。设CTU大小位ctbSize,virtual buffer为ibcBuf,ibcBuf的宽为128*128/ctbSize,高为ctbSize。VPDU的大小是64和ctbSize的较小值。virtual buffer通过以下方式获得,
  1、在开始解码每个CTU行时,重置ibcBuf为无效值-1。
  2、开始解码帧左上角相关的VPDU(xVPDU, yVPDU)时,ibcBuf[ x ][ y ] = -1。x = xVPDU%wIbcBuf, …, xVPDU% wIbcBuf + W v –
1,y = yVPDU%ctbSize, …, yVPDU%ctbSize + W v – 1。
  3、解码帧左上角相关的CU后,ibcBuf[ x % wIbcBuf ][ y % ctbSize ] = recSample[ x ][ y ]。

  对于含有坐标(x, y)的块,验证块矢量bv = (bv[0], bv[1])有效的条件为参考位值必须,也就是bcBuf[ (x + bv[0])% wIbcBuf] [ (y + bv[1]) % ctbSize ]不为-1,否则无效。

2、块差分脉冲编码调制BDPCM

  VTM6的屏幕编码支持BDPCM,在SPS中有一个flag控制允许使用,此flag只在变换跳过模式允许条件下使用。如果使用BDPCM,在CU大小小于MaxTsSize的条件下,每个CU中传输一个flag表示是否使用BDPCM,一个flag表示预测方向时水平或垂直,MaxTsSize时变换跳过模式允许的最大尺寸。然后进行帧内水平或垂直预测并对残差做量化,然后残差之间的差值被写入码流。
  对于一个MxN的块,设ri,j为预测残差,Q(ri,j)为ri,j的量化值,那么会生成MxN的预测矩阵,解码端再进行相应的恢复,使用垂直和水平方向的预测矩阵分别为
在这里插入图片描述
在这里插入图片描述
  对于MPM模式,如果BDPCM预测方向时水平或垂直,水平或垂直预测模式会被储存在BDPCM编码的CU中。在解码端,如果两个块都使用BDPCM,那么在块边界不适用去方块滤波。

3、变换跳过模式的残差编码

  VTM6允许最大为MaxTsSizexMaxTsSize的亮度块使用变换跳过模式,因为有时残差经过变换后反而不利于能量集中,这种特性常出现在屏幕内容序列中。对于变换跳过模式,TU的残差也被划分为4x4的子块编码。

4、调色板模式

  VTM6支持在平面序列的444格式使用调色板模式。使用调色板时,对于小于等于64x64的CU会传送一个flag表示是否使用调色板。调色板模式的CU被视为帧内、帧间、IBC之外的另一种模式。
使用调色板时,样点值使用一组典型的颜色值集合来表示,这个集合被称为调色板。对于与调色板颜色相近的像素值,发送颜色索引。对于调色板之外的样点也可以使用额外的比特来传输,传输方式是直接传输量化后分量值。

H.266/VVC技术描述_10-屏幕内容工具_第2张图片
  为了编码调色板,会维护一个调色板预测器,预测器在非波前条件的slice开始时,和波前条件的CTU行开始时,初始值为0。CU中每个点都会调用一次预测器,预测器用reuse flag来表示某颜色是否是当前调色板的一部分,reuse flag使用0游程编码。然后,传输新调色板颜色的数量和分量值。编码调色板CU后,预测器使用当前调色板更新,没有在当前调色板复用的之前调色版预测器的颜色会加入到新预测器的尾部,直到允许的最大值。每个CU中有一个escape flag,如果escape flag为真,调色板颜色数加1,末尾会添加此颜色。个人理解,调色板是实时更新的,开始编码CTU时为空,后面编码CU中不断传输新的颜色,并更新调色板。
调色板索引形成一个索引表,索引表使用如图的水平和垂直扫描,扫描顺序在码流中用palette_transpose_flag表示。

H.266/VVC技术描述_10-屏幕内容工具_第3张图片
  除第一行或第一列外,使用一个flag表示INDEX模式或COPY_ABOVE模式。对于INDEX模式,直接编码索引,对于COPY_ABOVE模式,不编码索引,而是复制上一行或一列的内容。首先,INDEX模式的索引数量会被发送,然后使用截断二进制编码INDEX索引的实际数值,然后调色板模式和游程长度被传输,最后,当前CU中所有量化后的额外模式颜色一起使用指数哥伦布编码。对于dual树,分别对亮度和色度使用调色板模式,否则共同使用(调色板中每个颜色包括Y、Cb、Cr的值)。调色板块专家你不适用去方块滤波。

你可能感兴趣的:(H.266/VVC,视频编码)