公务员期刊网 论文中心 正文

MPEG4视频解码器的优化路径研讨

前言:想要写出一篇引人入胜的文章?我们特意为您整理了MPEG4视频解码器的优化路径研讨范文,希望能给你带来灵感和参考,敬请阅读。

MPEG4视频解码器的优化路径研讨

MPEG-4视频解码器的软件算法优化

1MPEG-4视频的解码流程

解码器是基于FrameLevel的,无论是MC,还是IDCT或者IQ,当它们在GPU上实现时,每一步的操作都是针对同一帧上的所有宏块的。VOP是MPEG-4的基本编码单元,它包含视频对象边框的尺寸。图2是MPEG-4的解码流程,可以看出MPEG-4视频解码主要由三部分组成:形状解码、运动解码和纹理解码,重建的VOP是通过合并解码的形状、运动和纹理信息得到的[3,4]。

2解码算法优化

(1)IDCT变换的优化

从复杂度上分析,DCT变换是很耗时的,为了减少这部分的计算量,需要对它进行优化。在DCT变换前,需要根据信号能量的量化因子QP进行DCT模式选择,模式选择我们设定了0×0DCT变换、1×1DCT变换、2×2DCT变换、4×4DCT变换、8×8DCT变换五种。首先根据二维DCT/IDCT计算公式进行行列分离,把二维的DCT变换转化为一维的DCT变换。然后采用一维DCT快速算法进一步降低其复杂度。在帧间模式下,通过当前块的量化因子QP和信号能量值作DCT模式选择可以减少计算量。为了简化计算,取绝对差之和SAD来近似信号能量值。此外,为了减少误判率和加快计算速度,在0×0DCT变换和8×8DCT变换两种模式基础上加了1×1DCT变换、2×2DCT变换、4×4DCT变换三种模式。

(2)运动估计优化

运动补偿是MPEG-4视频解码的核心之一。在编码过程中,通过块的匹配得出运动矢量信息,同时也会得出当前编码块的残差信息。由于残差信息带有的信息量较少,可以通过纹理进行编码。通过逆向推导,解码时运动补偿通过从码流中获取运动信息,进而解码出运动矢量。然后根据运动矢量从参考帧中得出预测值。最后将预测值与解码的纹理信息相加,即得到实际的图像。由于MPEG-4(简单框架)处理的都是基于块对象的,因此不涉及形状编码,无需填充过程[5]。

MPEG-4视频解码器的实现

1MPEG-4压缩视频的码流结构

MPEG-4标准定义了MPEG-4码流中的每一位的具体含义,MPEG-4码流的组织形式是按分层的形式组织起来的。首先是码流头,又叫起始码字,是一个在码流中其他地方不会出现的一个比较长的特殊序列,具体的头信息定义了整个码流的一些特征。接下来是帧头,帧起始码字和具体的帧头信息,定义了当前帧的一些特征,这些信息决定了该如何解码当前帧。从宏块头开始就是具体的数据,宏块头并没有一个宏块起始码字,它紧跟在帧头信息后面。应用程序调用相关接口函数,通过封装静态链接库的方法可以实现解码器。在视频序列解码的不同阶段分别调用相关的接口函数,首先调用getvophdr获取VOP的头信息,然后调用macroblock函数实现帧解码。

2头信息的解码

首先看V0、VOL、VOP头信息的编解码过程。编码时,若编码第一帧,则首先调用函数PutVoVolHeader对V0、VOP的头信息进行编码,接下来对每一帧编码时,即编码VOP时,首先调用函数BitstreamPutVopHeader对每个VOP的头信息进行编码。与此相对应,在解码时,首先调用函数getvophdr,解码V0、VOL的头信息,然后在解码每一帧时,调用函数getvophdr获取VOP的头信息。

3VOP解码

头信息解码完成之后,调用函数get_mp4picture对每个VOP进行解码。该函数的实现过程为[6]:⑴初始化宏块的循环控制变量;⑵循环调用宏块解码函数macroblock对VOP中的每一个宏块进行解码;⑶调用函数make_edge对上一步获得的解码帧frame_ref(亦作为参考帧)进行边填允;⑷调用函数PictureDisplay将frame_ref图像转换为bmp图像;⑸将当前帧与参考帧交换。

4宏块的解码

VOP解码的整体过程中最关键就是函数macroblock的实现。VOP的编码过程是基于宏块的,所以VOP解码过程同样是基于宏块的,因此此函数是解码的核心函数,它一方面通过VLD(可变长解码)、RLD(行程解码)、IQ(逆量化)、IDCT(逆DCT变换)解码出原始图像值(I_VOP)或误差值(P_VOP);一方面解码出运动矢量MotionVector,并进行MC(运动补偿)[7]。

结束语

为了验证GPU+CPU加速视频解码方案和相关算法优化的效果,我们采用XVID作为模拟验证软件。软件测试的计算机硬件配置为Intel奔腾双核E5300CPU,2GRAM,GeForce9500GTGPU。软件实现的软件环境为WindowsXP中文专业版操作系统平台,采用VisualC++7.0为程序开发环境[8]。通过选取标准视频QICF文件做了视频编码后作为测试的视频序列,测试其优化前和优化后解码一帧所需要的时间,从而对同一帧的解码时间进行比较。从测试结果看,视频解码速度优化前与优化后的平均解码时间差有15ms。解码器对于所有的视频序列解码速度平均提高了25%,解码的视频质量能让人眼所接受,证明GPU辅助CPU加速解码,对DCT算法、运动估计和运动补偿算法的改进是行之有效的。(本文作者:李想 单位:兰州职业技术学院网络管理中心信息工程系)

相关文章阅读