- 1. SPEC Recursive Filtering 概述
- 2. Smooth Intra Prediction 概述
- 3. Intra Block Copy 概述
- 4. 调色板模式概述
- 5. Chroma From Luma 概述
VP9 支持 10 种 帧内预测模式,包括 8 个方向的模式,对应到 45-207 的角度,以及 2 个非方向的预测模式(DC 和 True Motion 模式)。AV1 中,帧内编码器从多个角度进行了扩展:角度预测的粒度进行了升级、利用亮度和色度信号的相干性等等。
AV1 中的帧内预测器,有一种称之为基于递归滤波的帧内预测器。该帧内预测器利用滤波的方式递归地对每个像素值进行预测,在编码方面复杂度会有所提升。
1. SPEC Recursive Filtering 概述
下面给出 SPEC 中对该预测模式的概述:
The inputs to this process are:
1. a variable w specifying the width of the region to be predicted.
2. a variable h specifying the height of the region to be predicted.
The output of this process is a 2D array named pred containing the intra predicted samples.
For each block of 4x2 samples, this process first prepares an array p of 7 neighboring samples, and then produces the output block by filtering this array.
The variable w4 is set equal to w » 2.
The variable h2 is set equal to h » 1.
The following steps apply of i2 = 0…h2 - 1, for j4 = 0…w4 - 1:
The array p is derived as follows for i = 0…6:
1. If i is less than 5, p[i] is derived as follows:
1. If i2 is equal to 0, p[i] is set equal to AboveRow[(j4 « 2) + i -1].
2. Otherwise, if j4 is equal to 0 and i is equal to 0, p[i] is set equal to LeftCol[(i2 « 1) - 1].
3. Otherwise, p[i] is set equal to pred[(i2 « 1) - 1][(j4 « 2) + i - 1].
2. Otherwise (i is greater than or equal to 5), p[i] is derived as follows:
1. If j4 is equal to 0, p[i] is set equal to LeftCol[(i2 « 1) + i - 5].
2. Otherwise(j4 is not equal to 0), p[i] is set equal to pred[(i2 « 1) + i - 5][(j4 « 2) - 1]
The following steps apply for i1 = 0..1, j1 = 0..3:
1. The variable pr is set equal to 0.
2. The variable pr is incremented by Intra_Filter_Taps[filter_intra_mode][(i1 « 2) + j1][i] * p[i] for i = 0…6
3. pred[(i2 « 1) + i1][(j4 « 2) + j1] is set equal to Clip1(Round2Signed(pr, INTRA_FILTER_SCALE_BITS)).The output of the process is the array pred.
对于每个 4x2 采样点的块,该预测模式首先准备包含 7 个相邻样本的数组,之后通过对该数组进行滤波产生输出块。
DAV1D 中 Recursive Filtering 代码
Dav1d 中关于此预测模式的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
2. Smooth Intra Prediction 概述
帧内预测种,除了方向预测模式外,AV1 还支持非定向帧内预测模式,它有 4 种不同的方法对当前值进行预测,其中包括 3 种平滑预测模式 SMOOTH_V、SMOOTH_H、SMOOTH 以及 PAETH 预测器。
DAV1D 中 Smooth Intra Prediction 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
3 种平滑预测的方法如下图所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
3. Intra Block Copy 概述
AV1 允许它的帧内编码器在预测当前块时,反向搜索当前帧中之前已经重建的部分,该方式在某种程度上与帧间编码搜索之前的帧是类似的。 该方法对于屏幕内容的视频压缩非常有效,因为屏幕内容的视频通常会在同一帧中包含相同的文本、字符等内容。
帧内块拷贝(Intra Block Copy,简称 IntraBC),除了传统的帧内和帧间预测模式外,IBC 模式采用当前帧中已重建帧作为预测块,可以认为 IntraBC 是当前编码图像内的运动补偿。
IntraBC 几个概念
AV1 SPEC 中关于 IntraBC 的几点。
allow_intrabc equal to 1 indicates that intra block copy may be used in this frame. allow_intrabc equal to 0 indicates that intra block copy is not allowed in this frame.
Note: intra block copy is only allowed in intra frames, and disables all loop filtering. force_integer_mv will be equal to 1 for intra frames, so only integer offsets are allowed in block copy mode.
force_integer_mv equal to 1 specifies that motion vectors will always be integers. force_integer_mv equal to 0 specifies that motion vectors can contain fractional bits.
allow_intrabc 为1,表示该帧中可能存在 intra block copy,否则不存在。同时,intra block copy 仅仅在帧内编码图像中允许,使用了 intra block copy 的块,禁止任何的滤波。
use_intrabc equal to 1 specifies that intra block copy should be used for this block. use_intrabc equal to 0 specifies that intra block copy should not be used.
use_intrabc 为 1,表示该宏块使用 intra_block_copy ,否则不使用该方法。
4. 调色板模式概述
调色板模式,对于屏幕内容图像,很多编码块内部的颜色数是有限的,调色板模式枚举这些颜色生成颜色表,然后为每个样本传递一个索引以指示它属于颜色表中的哪种颜色。和基于预测-变换的传统编码方法相比,对于颜色数相对集中的屏幕内容图像,调色板模式往往更加有效。
调色板模式将块内的元素当做几种离散的颜色,不同于直接传输像素本身的参数值,而是通过传输色块的颜色编号实现压缩的目的。 AV1 支持从 8x8 到 64x64 的块,支持调色板模式,编码器会自动根据视频内容选择是否使用调色板模式。调色板模式对于当前块 有单一色调的场景十分有用,一般这种场景出现在屏幕内容的压缩当中。
Color Palette
1 2 3 4 5 6 7 8 9 10 11 |
|
5. Chroma From Luma 概述
AV1 在帧编码中使用了Chroma_From_Luma 的工具,它是利用视觉图像中亮度值和色度值具有高度相似性的特点,通过选择适当的参数结合重建亮度值来预测色度值,该工具在游戏视频中具有很好地压缩效果。
Chrom_From_Luma(CFL) 的整个流程可以由下图表示。
当 chroma 分量通过下采样得到时,为使得像素分量一致,重建的 luma 分量需要对应的下采样。之后相应的重建 luma 像素减去平均值,得到 AC 分量。 scale 因子和符号,是通过码流中解码获得。CFL 预测值通过将重建 luma 像素的 AC 分量和 scale 因子相乘,并将结果与帧内的 DC 预测相加得到。如下图所示。
该流程分为三步:
- Compute Luma AC Contribution。
- Scale Chroma Plane
- Add Chroma DC_PRED
DAV1D 中 CFL 代码
DAV1D 中关于 CFL 的部分,主要由下面两类函数完成,其中一类就是求 AC Contribution。第二类就是 alpha * AC + DC_PRED。
1 2 3 4 5 6 7 8 9 10 |
|
关于求 AC Contribution 的函数如下,它根据 YUV 三个分量的组成比例,会有不同的参数传递,但整体思路是一样的.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
|
接下来是求解 DC PRED 的值以及最终的 Chroma 值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
|
CFL 结论
AV1 中采用的 Chroma_From_Luma 预测工具,该工具不仅降低了解码器复杂度,同时降低了预测错误率。