H.266/VVC帧内变换代码总结

最近大致看完了VTM6.0的帧内编码端的和变换部分相关的代码,这里进行一下简单的总结。

帧内编码端的变换涉及到变换最佳模式的选择,和变换部分相关的代码又比较杂,这里仅仅总结其中一部分代码。

帧内模式选择的入口函数是xCheckRDCostIntra,函数调用框图如图所示:

  • xCheckRDCostIntra函数主要是进行了相应变换块可选变换模式集的遍历,通过并计算RD Cost选出最佳变换模式。
  • estIntraPredChromaQT和estIntraPredLumaQT函数主要是分别对色度和亮度选择最佳预测模式
  • xRecurIntraChromaCodingQT函数分别进行Cb Cr单独编码和JointCbCr联合编码,从而选出色度最佳编码模式。
  • xIntraCodingLumaISP函数用于决定用于进行ISP分区、预测并进行变换等
  • xRecurIntraCodingLumaQT函数用于对上层传来的变换集进行遍历
  • xIntraCodingTUBlock用于对上层传来的预测模式和变换模式进行帧内编码从而计算失真。

对于帧内变换,相应的变换块的变换模式集对应如图所示:

其中对于每个尺寸的几种变换模式都是竞争关系,都是通过计算RD Cost选出最佳变换。

对于最大尺寸小于等于32的帧内亮度块,其进行DCT-2变换时,是通过调用第一个transformNxN函数计算相应的SAD来决定是使用DCT-2变换还是transformSkip模式。

 对于LFNST变换,需要遍历lfnstIdx等于1和2的两种情况,分别对于两个LFNST矩阵。

----------------------------------------------------------VTM7.0变换部分更新----------------------------------------------------------------------

  1. TransformSkip模式下不再对残差进行伸缩和移位(JVET-P1000)
  2. Enable Transform skip for chroma(JVET-P0058)
  3. 改进色度帧内预测模式代价准则(JVET-P0058)
  4. Enable BDPCM for Chroma(JVET-P0059)
  5. SPS层加入MTSMaxCand控制MTS变换核数目(JVET-P0273)
  6. ISP模式下可以使用LFNST二次变换(JVET-P0392)
  7. 修改lfnstIdx和mtsIdx编码顺序(JVET-P0196)
  8. 为lfnstIdx编码添加一个上下文(JVET-P0350)
发布了80 篇原创文章 · 获赞 101 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/BigDream123/article/details/103111900