第一章 前言
第三章 有关 SPS 和 PPS 的一切
第四章 有关 Slice 的一切
第七章 帧间编码
第八章 残差的熵编码: CAVLC 和 CABAC
上一小节,我们介绍了 H.264 帧内编码的大体原理,知道了帧内编码大体分为预测和残差两部分的内容。我们这一小节,来介绍一下预测的部分。
在 H.264 中,亮度块的预测模式可以分为两种,16 x 16 的预测模式和 4 x 4 的预测模式。(后期又出现了 8 x 8 的预测模式,我们后面加一个附录讲解一下)
我们已经知道,一个宏块的亮度部分,就是一个 16 x 16 的像素块。那么在进行预测的时候,我们可以将整个宏块作为一个整体进行预测,也可以将这个宏块分割成 16 个 4 x 4 的小的子块,对这些子块分别进行预测。H.264 为我们提供了两种不同颗粒度的方式,就是为了在细节多的地方使用较细致的预测方式来保留细节,而在细节不那么多的区域使用较粗略的预测模式,来节省空间。
除了不同的颗粒度,H.264 还提供了很多种不同的预测模式,以适应更多的情况。在上一小节,我们已经介绍过了,对于帧内编码,H.264 会先依据已经解码的一些像素来对当前块进行预测,然后用原像素减去预测的结果,得到残差。因此,预测得越准,残差就越小。为了预测得准,H.264 提供了多种预测模式。
我们拿一个宏块出来,这个宏块大小是 16 x 16。我们可以将这个宏块分割成 16 个 4 x 4 的子块。如下图。
而对于一个宏块来说,他的 16 个子块的解码顺序并不是依次排列的,而是依照以下的划分方式。
先将宏块划分成 4 个 8 x 8 的块,然后再将每个 8 x 8 的块划分成 4 个 4 x 4 的块。
所以这样划分之后,整个宏块中 16 个 4 x 4 的子块的解码顺序就如下图。
这种宏块划分方式在后面会用到,我们这里只是先提及一下。
对于 4 x 4 的子块,有 9 种预测模式。
对于 4 x 4 的子块,可以参考的像素是子块上方和左边的共 13 个像素。就是下图中蓝色的色块。
竖直预测模式 vertical
水平预测模式 horizontal
DC 模式
DC 模式,又被称之为均值模式。均值模式下,4 x 4 子块中 16 个像素都是相同的值,是上方的四个像素 A B C D 和左边四个像素 I J K L 的均值。就是下图中红框框
而细分之下,又可以分成 4 中情况:
情况一: 上方 4 个像素和左边 4 个像素都不存在,例如,画面最左上角的那个 4 x 4 的块。这种情况下,所有的像素就等于:
1 << (8 - 1)
也就是 128
情况二: 上方 4 个像素存在,左边 4 个像素不存在:
(A + B + C + D + 2) >> 2
情况三: 上方 4 个像素不存在,左边 4 个像素存在:
(I + J + K + L + 2) >> 2
情况四: 上方 4 个像素和左边 4 个像素都存在:
(A + B + C + D + I + J + K + L + 4) >> 3
diagnal down-left 模式
diagnal down-right 模式
vertical-right 模式
horizontal-down 模式
vertical-left 模式
horizontal-up 模式
632212519@qq.com
2021-03-19 19:29:20