- 相关推荐
探优化H.264解码器
1.引言
H.264 标准是由ITU-T 的视频编码专家组(VCEG)和ISO/IEC 的活动图像专家组共同成立的联合视频小组(JVT)于2003 年3 月公布的。与以往标准相比,在同等画面质量下H.264 能将码率降低50%左右。H.264/AVC 解码器包括熵解码,重排序,反量化,反变换,运动补偿和环路去块效应滤波。在解码环中引入的高度自适应去块滤波系统是H.264在相对码率较低的情况下依旧能保持较好的主观视觉效果的重要因素之一,是H.264 中的重要组成部分。中国硕士论文网提供大量免费工商管理硕士论文,如有业务需求请咨询网站客服人员!
本文依据H.264 去方块滤波算法的特点,对算法的实现进行了结构上的优化,并采用MMX 技术对其中执行时间最多、执行次数最多的部分代码进行优化。在保证解码质量的前提下,节省了硬件资源,提高了解码速度。
2.去方块滤波器的算法分析
由于H.264 中的整数变换和运动估计的最小块是基于4×4 大小的,因此块滤波系统在滤波的时候也应以4×4 点的块为单元处理。
滤波系统按照光栅扫描顺序依次对已解码的每个宏块进行滤波。对宏块内部进行滤波时按照先亮度块后色度块,先进行垂直边界的水平滤波然后进行水平边界的垂直滤波的顺序进行,如图1 所示,图中的标有数字的线为需要滤波的边界。
对于不同的BS 值,滤波器采取不同的滤波模式,有条件地选择不同的滤波器修正边界两边的样点值。最多有6 个样点值将在滤波过程中得到调整,以去除块效应。
3.去方块滤波器的优化
3.1 边界滤波强度判断
流程的改进经分析发现该解码器的去块滤波算法中的函数逻辑关系复杂、跳转、判断以及函数调用情况频繁;函数的循环体中存在着大量不必要的重复计算和很多用不到的数据,如在传统JM 模型的Bs 判断中,对所有BS 值分别进行16 次判断(由于边界有16 个点,所以对每个点都做了滤波强度判断),这明显造成程序冗余因为当BS=3,4 时,只取决于预测模式是否为帧内模式和模块是否为边缘模块即可。根据C 代码优化方法,通过改变函数结构以及函数调用等情况,得到了图3 所示的改进的BS 判断流程。
3.2 宏块滤波顺序的调整
如果按照基本的滤波顺序运行去方块滤波程序,就没有充分利用相邻4×4 数据之间的相关性。比如完成“1”滤波后需要将其右侧方块的数据写回事先分配的内存中,等到要进行“5”之前再从内存中读取将这个方块的数据。对于每一个方块都要从内存中读取数据,完成滤波后还需要将数据写回至相应的地址,如此频繁读取内存,对内存的带宽要求比较高,同时增加了解码的时间。因此提出了一种改进的滤波顺序.
3.3使用多媒体指令集(MMX)对像
素级滤波计算进行优化从上面的算法分析可以看出,环路滤波部分算法不很复杂但是计算量密集,例如对滤波条件的判断和完成对像素值的修改的过程。所以在保证图像质量的基础上,尽可能的加快运算速度,就成为当前研究的新热点。MMX(Microprocessor Media Extension)是Intel公司为提高PC 机多媒体功能和通信能力而推出的一项单指令多数据流(Single InstructionMultiple Data,SIMD)技术,是对IA(Intel Architecture)指令集的扩展,他通过在“奔腾(Pentium)”处理器中增加8 个64 位寄存器和57 条新指令来实现[3]。将多个数据组织入MMX 寄存器中,用指令进行统一处理,就可达到单指令多数据的目的。SIMD 技术的执行模式。
3.3.1数据重排(内存读取的优化)
为实现多路数据的并行处理,应将各路数据中进行相同操作的数据放在同一个寄存器的不同位置,使得单一指令可对多路数据并行操作。在并行操作实现的过程中,若数据的原始排序不能满足并行操作,就须对原始数据进行重排序。
需要修正水平方向的像素点可直接其需要的8 个像素点movq 进来。而在对水平边界进行垂直滤波时,由于像素值在存储位置上是水平连续的,那么可一次读入的64位寄存器中的数据必须是水平方向上4 组数据的同一列像素点,而不是水平方向上同一组数据的不同列。因此,为实现并行操作,寄存器中数据应按所需要的处理顺序来排布。该例中就是将每个需要调整所需像素位置的块先进行转置操作,以实现并行数据处理。用到的主要指令有:punpckl[bw,wd,dq]交错放置两数的低位;punpckh[bw,wd,dq]交错放置两数的高位。在寄存器存储数据的时候数据的格式,就是先进来的数据放在寄存器的低位,后进来的数据依次往高位存放。即,比如4×4 矩阵的第一行[X00 X01 X02 X03],而要存放的寄存器mm0 中为[X03 X02 X01 X00]。4x4 矩阵转置的实现。
3.3.2将跳转指令转化为条件
判断程序中条件判断是频繁出现的。在MMX 中,对于包含条件判断的数据处理,直接采用条件分支跳转是不合适的。因为进行并行处理的各组数据对某一条件的成立与否不尽相同。这里我们通过逻辑运算来避免跳转。例如滤波的首要条件的实现的过程,将(1)式改写为如下形式,以便使用MMX 指令实现。欢迎查看物流管理配送和管理。
可以看出这个过程中可看做是取平均值,取四分之一和八分之一的过程,而这些过程均是由pavgb 这条指令来完成的,pavgb 的作用是取紧缩无符号字节的平均值,四舍五入。
这样每用一次这条指令结果将四舍五入一次,而我们实际想要的是最后的结果进行四舍五入,如果这样每使用一次就四舍五入一次,这样将会使结果偏大。所以为了解决这个问题,我们在用pavgb 的时候还要考虑将这部分误差,所以这个算法的实现。
3.3.4 限幅算法的实现
4. 优化结果
分析解码器测试用PC 机,操作系统是WindowsXP,在Visual C++6.0 环境下调试编译,解码测试了三个序列包括两个标准测试码流Foreman(CIF 352x288) 和Mobile(CIF 352x288)以及由本实验室采样经ΤΙ公司提供的x264 编码器编码获得的测试码流TI(D1 720x576)。,从以上测试结果可以看出,对于解码cif 格式的视频流,速率大约提高了40fps,对于解码D1 格式的视频流,速率大约提高了10fps。改进的算法对于提高解码速率具有明显优势。并且因为只是对程序进行了代码级的优化,解码器的性噪比没有下降,图像质量不会受都影响。证明这是一种行之有效的方法,对进一步优化各种音视频解码器都提供了很好的借鉴方法,有利于解码器在流媒体、视频会议等实时领域的应用。
【探优化H.264解码器】相关文章:
浅探室内陈设05-29
读《拓跋史探》05-30
浅探作为自由的平等05-28
《左传》修辞方式浅探05-03
浅探具象与意象的深度连接05-29
浅探张之洞实业教育思想05-30
浅探音乐教育之路04-29
“醉酒驾驶”量刑考虑情节浅探08-15
浅探巷道快速掘进影响因素05-31
浅探电子时代艺术的异化05-31