装备质量警示录:CAVLC对残差数据进行熵编码
来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 03:05:37
JM,T264,x264注重实用,在不明显降低编码性能的前提下,努力降低编码的重复计算复杂度,摒弃了H.264标准中一些对编码性能贡献微小但计算复杂度极高的新特性如多参考帧 在H.264中,采用CAVLC对残差数据进行熵编码,这一选择与以往标准中的VLC编码方法相比,充分利用了经量化后残差数据(4×4块)的参数特性进行压缩,并结合相邻已编码数据所提供的相关性,取得了卓越的编码效率。图2是CAVLC解码的典型流程,分析如下:
DCT变换是一种正交变换。因为它具有良好的去相关性和压缩效果并且有快速算法可以实现,所以在图像编码中被广泛使用。
这种变换能够去除块内相邻像素间的空间冗余,再结合量化,可以有效地实现数据的压缩
和以往编解码标准中8 x 8 DC T变换不 同.H_ 2 6 4/AVC使用了4 x 4整数变换,在编码效率得到提高的同时 . 也增加了块效应的程度
在进入滤波之前,视频流数据 已经经过熵解码 、反量化、DC T逆变换和重构,由 S l i c e结构的数 据组成以帧为单位的数据滤波仍1日以宏块为单位进入循环当遍历帧中所有宏块后。滤波结束并把本帧图像直写入显存.
视频数据在进入滤波模块时已经由S l i c,结构复原为整帧数据,为结构优化设计创造了条件
对于每个4×4亮度块之间的块边界都定义了滤波强度BS
每条边界长度均为16个像素,等分成4份,每个对应一个最小块大小的边界,以此为单元进行滤波。
对每条边界调用get_strength,获得这4个部分的Bs值。
DeblockMB在Loop Filter中的作用是对一个宏块进行滤波,对一条边界16像素(亮度)或者8像素(色度)进行处理
http://www.chinavideo.org/viewthread.php?tid=2031&extra=&ordertype=1
我跟踪了一下程序,打印了每个4x4块的坐标,发现了附件中图示的规律,在解码扫描帧内预测的顺序时是以16X16的宏块为单位,从左到右,从上到下;然后在每个16X16的宏块里,又对4个8X8从上到下从左到右的扫描;在每个8X8中对4X4的子块从上到下从左到右的扫描。所以img_block_x和img_block_y应该是全局的以4x4块为单位的块坐标。
附件图中:坐标值为每个4X4的左上角坐标,灰色块的尺寸为8X8。红色标号为解码时帧内预测的扫描顺序。
不知道上述理解有无误差之处,请大侠们指教:)。
PS:弱弱的问怎么在贴子中贴图啊 呵呵
4x4预测.JPG (15.24 KB)
4x4预测
既然高频系数大多数趋向于零,那么利用游程编码就可以缩减零的数目,从而高效的达到熵编码的目的。