首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于ARM的MPEG4视频解码器

基于ARM的MPEG4视频解码器

半像素补偿可由x=(A+B+1-rounding_control)/2来实现。式中: A和B为参考帧中两个相邻的像素数据;rounding_control可取0或1。
    按照补偿公式对上述两个寄存器进行相加移位操作,但是对应像素两两相加时可能会产生进位。为了解决这个问题,须设置保护位,具体方法如下:    将上述两个寄存器中的任意一个(如寄存器1)与0xFEFEFEFF相“与”,则寄存器1中像素1、2、3的最低位被清0,即将后一字节的最低位设置为前一字节的保护位。而对于第3字节,因为寄存器本身带有进位状态标志,所以无需另外设置。
    如果rounding_control为0,则将寄存器2与0x01010101相加,然后再和0xFEFEFEFF相“与”,设置进位保护位;如果rounding_control为1,则直接将寄存器2和0xFEFEFEFF相“与”。
    将以上两步的结果相加,判断进位状态标志。若有进位,则将相加结果的最高位,即寄存器的第31位置1,最后右移1位。所得结果即补偿后的4个像素值。
    在同时对4像素进行补偿的过程中,只有当相邻两像素的最高位都为1时,才会有进位产生。使用这种补偿方法其实牺牲了部分精度,但这里只是使所影响的像素值增加了1,所以影响并不大,而且可以使补偿速度大大提升。同时对4像素进行补偿的过程中,寄存器加载需要3个周期,存储需要2个周期,共有两次加载和一次存储操作,中间的加法和移位操作需要6个指令周期,共需14个周期。如果对上面4个像素分别进行补偿,则需5次加载操作和4次存储操作,共23个周期,另外中间计算还需12个周期,所以共需35个周期。可见,牺牲部分精度换取补偿速度是很值得的。
    对于垂直方向和水平垂直方向的半像素补偿,其原理与水平方向相同。
3  实验结果与数据分析
    通过优化,MPEG4的解码性能有了较大的提升。在ADS1.2环境下分别对各模块进行C算法优化和ARM代码优化,结果如表3所列。按调用一次模块函数所需周期数进行统计。
表3  仿真器上各模块单独统计(使用QCIF格式图像news)
所优化模块名称

C优化(cycles)/个

ARM优化(cycles)/个

优化率/%
DC/AC预测

703

534

24.04
逆扫描/VLD

1 730

1 118

35.38
逆量化/IDCT

6 032

2 562

57.53
运动补偿

17 143

8 471

50.59
    这些模块是解码过程中经常会调用的函数,因此,这些函数的优化将使解码速度有明显的提高。
    表4比较了不同序列的15帧QCIF格式视频解码优化前后所需的带宽。这些图像具有不同的复杂度,因而结果也不一样。
表4  对不同序列的优化结果(15fps QCIF格式)
视频序列①

优化前所需带宽/MHz

优化后所需带宽/MHz
news

27.24

16.86
foreman

64.83

48.78
miss_am

27.71

15.95
carphone

52.54

34.52
salesman

28.06

16.56
trevor

52.56

34.24
注: ① 为标准视频测试序列。
    解码速度基本取决于图像画面的运动情况和颜色是否丰富。从上面的数据可以看出对于不同的序列,其解码速度也不同。news、salesman和miss_am之所以很快,是因为图像背景静止,只有肩部和头部有运动,所以P帧的编码数据量较少,解码速度较高。另外,如果图像很简单(单调),其能量集中到DC系数(直流分量)上,交流系数会出现多个零,因此变长解码速度就会较高,从而节约了解码时间。
    从仿真速度分析,通过本文所总结的ARM7TDMI上视频解码的优化方法,可以使MPEG4视频解码节约大量的数据处理时间。由实验结果可见,本视频解码器能较好地满足低分辨率、低帧率场合实时解码的要求。
4  MPEG4视频解码的嵌入式系统实现
    实现本解码器的主要硬件平台是Easy ARM2200,如图5所示。它是一款功能强大的32位ARM单片机开发板,采用了Philips公司的ARM7TDMI?S核,以及总线开放的单片机LPC2210,具有JTAG调试功能。

图5  Easy ARM2200开发板
    开发板上除了提供键盘、LED和RS232等一些常用功能部件外,还具有4Mb SRAM、16Mb FLASH、IDE硬盘接口、CF存储卡接口、以太网接口和Modem接口等。
    本文选择在μClinux操作系统上调试MPEG4解码程序。调试过程分为以下几个步骤:
    建立μClinux开发环境;
    在μClinux下开发应用程序;
    添加应用程序到目标系统并调试。
    图6 为一个基于μClinux的嵌入式系统典型框架结构图。

图6  基于μClinux嵌入式系统框图
    (1) 建立μClinux开发环境
    为了实现基于μClinux的应用系统的开发,建立或拥有一个完备的μClinux开发环境是十分必要的。建立μClinux开发环境主要包括以下3个步骤:
    建立交叉编译器;
    编译μClinux内核;
    加载内核。
    在完成上述所有工作后,一个嵌入式应用开发平台就已经搭建好了。在这个平台之上,可以根据不同需要开发嵌入式应用。
    (2) 在μClinux下开发应用程序
    基于μClinux系统的应用程序的开发,通常是在标准Linux平台上用交叉编译工具arm?elf?gcc来完成的。ADS和arm?elf?gcc都是ARM公司提供的软件开发工具,它们都支持ARM指令集,但部分伪指令集不同。因此为了将在ADS1.2环境下优化好的源代码移植到arm?elf?gcc环境下,就需要对源代码的伪指令作修改, 然后用arm?elf?gcc编译源文件,以生成可在目标板上运行的可执行程序。
    (3) 添加应用程序到目标系统并调试
    要在硬件板上调试,就必须首先把应用软件的可执行程序添加到目标系统中。有多种途径可以达到这一目的。本文使用的是网络方法,通过以太网接口从网络添加用户程序到目标系统中运行。
    完成上述工作后,MPEG4解码程序就可以在μClinux系统上运行了,解码结果数据流通过以太网动态传输到PC机上。对几个典型QCIF格式图像解码的帧率如表5所列。
表5  在μClinux操作系统中MPEG4视频解码的帧率
视频序列

解码的实际帧率/帧/s
news

35
foreman

16
miss_am

37
carphone

17
salesman

36
trevor

17
    观察发现与前面的软件仿真结果是一致的。对于序列news、miss_am和salesman这些运动动作不太大的图像,解码帧率明显较高;而对于foreman、carphone和trevor这些运动动作较大的图像,解码帧率就较低。
    实验结果表明,本系统可以实现低帧率、低分辨率的嵌入式MPEG4视频实时解码。
5  结束语
    本文重点研究了基于ARM开发平台对MPEG4实时解码的算法优化及其硬件实现。主要完成了以下几方面工作: 针对ARM7TDMI的体系结构,对解码的关键部分进行了算法优化和代码优化,从而极大地提高了解码速度;针对具体的硬件平台——基于ARM7TDMI的Eeay ARM2200开发板,建立了μClinux开发环境,在其上开发应用程序,添加到目标系统中并调试,最后完成了15fps的MPEG4视频解码嵌入式系统的实时实现。
    随着人们对视觉媒体的要求越来越高,基于嵌入式系统视频解码技术将具有越来越广阔的前景。
继承事业,薪火相传
返回列表