EDN China > 设计实例 > 微处理器与DSP > 多媒体处理器 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

基于TMS320DM642的AVS实时解码软件优化

来源:电子设计应用/作者:山东大学信息科学与工程学院 刘志胜 彭玉华 刘微?? 2007年10月16日 ?? 收藏0

  AVS是中国自主制定的第二代音视频编码标准。从编码效率上看,AVS与H.264/AVC相当,比MPEG-2高两倍;从编码的复杂度上看,AVS的编码复杂度相当于H.264的70%,解码复杂度相当于H.264的30%。同时,AVS不需要交纳高额的专利费用,具有很广阔的市场前景,如:数字音视频存储、IPTV和视频监控等。

  TMS320DM642是TI公司推出的一款面向多媒体信号处理的DSP,采用了C64x核。它具有极强的处理能力、高度的灵活性和可编程性,同时又集成了音视频和网络通信等外设,特别适用于多媒体通信应用。DM642可应用于基于IP的音视频传输、数字视频记录、机器视觉、医学成像、安全监视和数字相机等领域。

  本文把AVS解码软件移植到DM642平台上,并进行了优化,对于标清视频,解码速度达到30fps,完全满足实时播放的要求。

  AVS标准

  AVS的解码过程如图1所示。

AVS解码器

图1 AVS解码器

  AVS视频编解码标准中的核心技术包括:帧内预测、1/4精度像素插值、特殊的帧间预测运动补偿、8×8整数变换、量化、二维熵编码和去块效应环内滤波等。

  AV

S亮度和色度帧内预测都是以8×8块为单位的。亮度块采用5种预测模式,色度块采用4种预测模式。在编码效率基本相同的情况下,AVS采用了更少的预测模式,使算法的复杂度大大降低。

  对于帧间的运动补偿,AVS采用了4种块:16×16,16×8,8×16及8×8,可以更好地刻画物体运动,提高运动搜索的准确性,同时降低了运动矢量和块模式传输的开销,从而提高压缩效率,降低了编解码实现的复杂度。AVS与H.264、MPEG-4一样,采用了1/4像素插值,但与H.264的6抽头1/2像素插值和双线性1/4像素插值不同,AVS采用了两种4抽头滤波器对1/2和1/4像素进行插值,在不降低性能的情况下减少了插值所需要的参考像素点,减小了数据存取带宽需求。

  8×8的整数变换可以在16位处理器上无失真的实现,克服了早期的8×8变换不能无失真的缺点,同时又比H.264中4×4的整数变换有更好的去相关性。

  在AVS熵编码过程中,所有的语法元素和残差数据都是以指数哥伦布码的形式映射成二进制比特流。采用指数哥伦布码的优势在于:一方面,它的硬件复杂度比较低,可以根据闭合公式解析码字;另一方面,它可以根据编码元素的概率分布,灵活地确定以k阶指数进行哥伦布码编码,如果k选得恰当,则编码效率可以逼近信息熵。利用解码后的数据,通过查表得到残差数据。

  AVS采用了两个级别的环路滤波,只对边界的两个像素进行滤波。与H.264的4个级别和边界3个像素的环路滤波相比,复杂度大为降低。

  TMS320 DM642平台

  TMS320DM642/C64x系列芯片基于超长指令字结构VelociTI.2,在8个功能单元里扩展了88条新的指令,以增强其在视频/图像应用中的性能,并提高了视频处理的并行性。

  本文的实验平台采用SEED公司的VPM642板卡,其主要配置如下:600MHz的TMS320DM642 DSP芯片;DM642外部扩展4MB Flash, 32MB SDRAM,可用于大量视频图像数据和程序的存储;4路视频端口(PAL/NTSC制式或S端子);10/100M以太网接口;板上JTAG仿真接口,通过JTAG仿真器可以方便地进行视频压缩算法的仿真调试。

  AVS在DM642上的实时解码

  针对DSP的特点,本文采用了大量行之有效的优化方法,使得解码速度大大提升。除了使用C6000编译器提供的编译选项-pm、-o3、-no debug以外,其他优化措施主要包括以下几个方面。

  程序结构的调整

  为了满足DSP结构的需要,本文对AVS解码软件的程序结构进行了调整。

  PC上的程序是在解码一帧后再进行环路滤波,需要两次把数据从片外搬移到片内。本文对此进行了修改,在每个宏块解码完成以后就对该宏块进行滤波。如图2所示。

环路滤波示意图

图2 环路滤波示意图

  在解码一个宏块完成以后,先对每个8×8亮度块的垂直边界BsV00、BsV01、BsV10、BsV11和色度块BsV00(U)、BsV01(V)进行滤波,滤波的结果作为输入,再对水平边界进行滤波。

  使用内联指令和数据打包

  C6000编译器提供了许多内联函数(instrinsics),如_add2、_avgu4、_dotpsu4等。内联函数是直接与C6000汇编指令映射的在线函数。不易用C/C++语言实现功能的汇编指令都有对应的内联函数。

  对C6000的存储器进行访问是很费时的。要提高C6000的数据处理效率,应使1条Load/Store指令能够访问多个数据。当程序需要对一连串的字符型、短型数据进行访问时,可以使用数据打包,一次读写4个字符型、2个短型数据,并使用_dotpsu4、_add2等指令进行处理。

  本文在优化过程中广泛采用了内联指令和数据打包,对于水平位置1/2像素插值,使用内联指令和数据打包的效果如表1所示。


上一页12下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

AVS解码器? 优化? 标清?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈