0 errors, 0 warnings

FPGA应用;视频图像处理

h264之路(2)——VCL框架及YCbCr格式

0
阅读(2287)

VCL框架

VCL层的功能便是视频编码,其框架如图:

image.png

主流程:当前值Fn为输入数据, 该值进入编码器后与预测值P相减,得到残差Dn。Dn经过DCT变换T,量化Q后,得到量化系数X,再经过重排序,熵编码,生成SODB。最后输出到NAL,加上解码所需信息,组成NALU,形成h264码流。

主流程外的其余部分则关乎预测值P的产生。要产生预测值,首先要经过重建步骤——量化系数X经过反量化Q-1,反变换 T-1,得到重建的残差D'n. D'n加上预测值P即得重建像素值uFn。之后便有2种预测模式可选——帧内预测及帧间预测。

帧内预测:uFn经过加权,选择后,即可作为当前块的预测值。

帧间预测:uFn经过去方块滤波后得到重建帧Fn,用作参考帧Fn-1。然后利用Fn与Fn-1计算运动估计(ME), 运动补偿(MC), MC的值即为帧间预测值P。

下面我们将根据流程,一步步研究编码相关操作及算法。

YCbCr格式

编码流程第一步,自然就是视频数据的输入了。h264编码器的输入数据为按宏块输入的YCbCr数据。其中宏块即16*16的像素块,是编码器处理的基本单元。而需要注意的是YcbCr与YUV其实略有不同,计算公式有微小区别。YUV主要应用于图像处理,YcbCr主要应用于数字视频,h264里所使用的应是YCbCr,不过一般也不严格区分两者。下面重点讨论YCbCr格式:

YCbCr优势:

(1)Y,Cb,Cr 3个分量相对独立,方便分通道处理

(2)人对色度信息不那么敏感,可以通过减少色度信息来缩小数据量

采样格式:

采样格式主要有2种(其余在此不讨论):4:2:2 4:2:0

4:2:2:每2个Y分量共用一个U分量,一个V分量

4:2:0:每4个Y分量共用一个U分量,一个V分量

image.png

存储格式:

存储格式主要有2种:planar(平面)格式 packet(打包)格式

planar格式:Y,Cb,Cr分开存放,对一个16*16宏块而言,在4:2:0情况下,即先存放256个Y数据,接着是64个Cb数据,最后是64个Cr数据。在我所移植的工程中,即采用这种格式输入视频数据。

image.png

packet格式:即Y,Cb,Cr是连续交叉存储的。以4:2:2为例(4:2:0好像不具备packet格式?)。存储示意图如下:

image.png

以上就是关于输入数据的说明,随着数据的输入,我们就要开始对他们进行处理,这又将是新的篇章!

Baidu
map