H.266/VVC代码学习35:VTM6.0解码端大体流程

解码端最上层函数在之前的学习中已经讲过,下面我们从帧一级继续向下探索,也算是对整个框架穿个线。这里主要以JVET-O1001为参考,掺入我自己的一部分理解,将整个视频编码的大体框架理清。

1 划分

slice最上层,遍历brick(代码中尚未体现)和各个CTU。随后进行CTU级别的操作。最后进行最后一行或一列的标记及比特对齐。
在这里插入图片描述
1、进行CTU的划分:对大于64x64的块,只能进行四叉树划分。
2、在划分过程中,递归调用自身完成对划分方式的读取。
3、对帧内块,可以选择是否进行色度独立划分。
4、先进行几次四叉树划分后,进行二叉树和三叉树的划分。一旦进行二叉树和三叉树的划分时,将不再进行四叉树划分。
5、对帧内块:1)4x16、16x4、8x8的块且进行QT或BT或TT划分; 2)4x8、8x4且进行BT划分;3)4x32、32x4、16x8、8x16的块进行TT划分
6、对帧间块:1) 4x16、16x4、8x8的块进行BT划分;2)4x32、32x4、16x8、8x16的块且TT划分
7、cqtDepth:四叉树的分割深度;mttDepth:多类型多叉树的深度
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随后进行预测解码的准备操作:分别看是不是skip模式、是何种预测模式(帧内、帧间、IBC)、是不是调色板模式。
在这里插入图片描述

2 帧内

1、对亮度预测,有两种最主要的模式:MIP模式和传统帧内模式。
下图为MIP模式及之前的解码解析,可见前面还有bdpcm的解析:
在这里插入图片描述
对于传统亮度模式,需要处理很多内容,如参考行、ISP、MPM,之后才会得到对应的预测模式。
在这里插入图片描述
2、对色度预测,分为开CCLM和不开CCLM两种。先判断调色板模式,随后处理CCLM,DM和传统四种模式位于其后。
在这里插入图片描述

3 帧间

帧间的解析顺序为:merge、affine、、amvr、smvd、bcw。最终落脚于mvd的解码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1、对于merge模式:最先判断subblock,如果不是subblock则为一般的merge,分别判断mmvd、ciip和tmp即可确定最终使用的是哪种帧间merge模式。
在这里插入图片描述
在这里插入图片描述
2、对于非merge模式,则一定是编码mvd,判断各方向的mvd绝对值是否大于1,是否大于2,如果超过2再编码超过2的部分。最后解码该绝对值的正负号。
在这里插入图片描述

4 变换

1、外层函数:对帧间有sbt变换块划分,随后进行变化块划分解析,此外还有lfnst的操作。在这里插入图片描述
2、递归调用对大块进行变换块的划分,受到帧内ISP和帧间sbt两种技术的影响。
在这里插入图片描述
3、对变换系数有一系列操作:首先判断三个通道是否都有cbf。在确定了TU块位置时,对于亮度分量,先解析是否进行了transformSkip,若否则解析多核变换mts,随后进行残差编码。对于色度分量,判断是否joint_CbCr进行残差编码,否则进行正常的残差编码。
在这里插入图片描述
在这里插入图片描述
后续进行残差编码。
在这里插入图片描述

5 残差操作

1、变换系数扫描:基于4x4的子块,从右下角到左上角,得到多个“16个连续系数”的系数组(后称CG)。
2、进行非零位置信息编码:确定当前CG有无非零系数,若有则找到非零系数位置,否则进入下一个CG。
3、对非零系数进行编码:同mvd的编解码方式,看是否大于1及2,对超过2的部分进行解码,还有符号位。
4、根据以上内容即可解析出CG的残差。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值