什么牌奶粉好| 来月经前有褐色分泌物是什么原因| 后期是什么意思| 猎户座是什么星座| 京酱肉丝用什么酱| 若叶青汁有什么功效| 鼠妇吃什么| 日加华读什么| 疾控中心是做什么的| 欧字五行属什么| 什么的东风填词语| 同房是什么意思| 老是打饱嗝是什么原因| 回苏灵又叫什么| 上火嗓子疼吃什么药| 什么玩意儿| 精忠报国是什么生肖| g代表什么单位| 爆炸盐是什么| 猪身上红疙瘩用什么药| 什么人不怕冷| 觅是什么意思| 四季不安痣是什么意思| pt是什么单位| 为什么正骨后几天越来越疼| 梦见狗咬别人是什么意思| 鱼完念什么| 吃什么食物补血| 流产后不能吃什么东西| 长乘宽乘高算的是什么| 什么是血氧| 烤瓷牙和全瓷牙有什么区别| 单招是什么学历| huidr是什么品牌| 食邑万户是什么意思| 男马配什么属相最好| 得宫颈癌的前兆是什么| 血镁偏高是什么原因| 银行行长是什么级别| 弥漫性肝病是什么意思| 吃甘草片有什么副作用| 置换是什么意思| 什么人容易得甲亢| 九寨沟什么时候去最好| 胰岛素是什么| 早搏有什么危害| 吃什么去肝火最快| 鸡蛋不能和什么食物一起吃| 左旋肉碱什么时候吃效果好| 低头族是什么意思| 2017年属什么| 什么时候喝咖啡最好| 血糖高吃什么中药| 什么是polo衫| 驼背是什么原因造成的| 胃疼吃什么水果| 甘草泡水喝有什么功效| c14检查前需要注意什么| 结扎对男的有什么影响| 豆汁是什么| 豫州是现在的什么地方| 黄加黑变成什么颜色| 前列腺是什么| 男人地盘是什么生肖| id锁是什么| 防腐剂是什么| 见到黑猫代表什么预兆| 七星鱼吃什么食物| 直肠ca代表什么病| 梅核气是什么病| 什么是甲减有什么症状| 4.9是什么星座| 临终关怀的目的是什么| 1103是什么星座| 状元是什么官| 代孕什么意思| 没壳的蜗牛叫什么| 1206是什么星座| 日什么月什么| 早晨口苦是什么原因| 98年属相是什么| 肠胃炎可以喝什么饮料| honor是什么牌子的手机| 做什么行业最赚钱| 五指毛桃什么人不能吃| 低压高吃什么药最有效| 什么是滑膜炎| 阳性对照是什么意思| 津津有味的意思是什么| 松鼠代表什么生肖| 菊花茶喝多了有什么坏处| 高尿酸血症是什么意思| 太累吃什么缓解疲劳| 雀的偏旁是什么| 冬天送什么礼物| 唐筛主要检查什么| 思是什么生肖| 九月15是什么星座| 鸟飞进家里是什么预兆| 打呼噜挂什么科室| 什么什么的大树| silence是什么意思| 创客是什么意思| 寸是什么单位| 超市是什么意思| 闪购是什么意思| 为什么说黑鱼是鬼| salsa什么意思| 院士相当于什么级别| 怀孕的人梦见蛇是什么意思| 泰迪吃什么| 什么是太岁| 牙齿抛光是什么意思| 贪小失大什么意思| 胸胀痛什么原因| 左传是一部什么体史书| 一直咳嗽不好是什么原因| 什么是癔症病| 卫冕冠军是什么意思| 上午右眼皮跳什么预兆| 乳房边缘疼是什么原因| 属牛的和什么属相最配| 长期吃二甲双胍有什么副作用| hla一b27阳性是什么意思| 急性寻麻疹用什么药| 塑料是用什么做的| 护士规培是什么意思| 叠是什么意思| 手爱出汗是什么原因| 茵陈是什么| 蛇鼠一窝是什么生肖| 什么网站可以看黄色视频| 黑豆熟地水功效是什么| 9.7是什么星座| 雌二醇高说明什么| nm是什么意思| 36是什么罩杯| ug是什么| 早上喝一杯温开水有什么好处| 维生素k2是什么| 70年产权是从什么时候开始算| 梦到老虎是什么意思| 头眩晕看什么科| 舌头紫色是什么原因| 滑精是什么意思| 什么是琉璃| 浑身没劲是什么原因| 室内传导延迟什么意思| 寒酸是什么意思| 呼吸重是什么原因| 人为什么要呼吸| 续航是什么意思| 肠胃型感冒吃什么药| 脂肪瘤看什么科| 缺氯有什么症状怎么补| 普贤菩萨保佑什么生肖| 晚黄瓜什么时候种| 头发打结是什么原因| 拖鞋什么材质的好| 504是什么意思| 扪及是什么意思| 点数是什么意思| DDP是什么| 翻车了是什么意思| 归脾丸治什么病| sam是什么意思| 流水席是什么意思| 人中浅的女人代表什么| 子宫内膜增厚有什么影响| 低压高吃什么降压药| 榴莲皮有什么功效| 什么枝条| 得瑟是什么意思| 补气血吃什么好| 手机为什么突然关机| 小孩热感冒吃什么药好| 虎毒不食子是什么意思| 儿童乘坐高铁需要什么证件| 川字属于五行属什么| 杀马特是什么意思| 儿童口腔溃疡用什么药| 中暑用什么药| 敞开心扉是什么意思| 永垂不朽是什么意思| 什么是体脂率| 踩水是什么意思| 睡眠不好用什么药调理| 孩子贫血吃什么补血最快| 牙齿黄用什么牙膏| 91年是什么命| 喉咙痛吃什么水果| 血糖高怎么办吃什么好| 胡子发黄是什么原因| 检查肺部最好做什么检查| 08属什么生肖| 葡式蛋挞为什么叫葡式| 3楼五行属什么| 小什么| 羡煞旁人是什么意思| 三分钟热度是什么意思| 什么泡茶好喝| 走南闯北是什么生肖| 凝血酶时间是什么意思| 海绵体供血不足吃什么药| 古代男宠叫什么| 风湿免疫科是看什么病的| 一竖读什么| ohs是什么意思| 阴道发白是什么原因| 相安无事是什么意思| 以身相许是什么意思| 败火是什么意思| 满载而归的载是什么意思| 月令是什么意思| diqua是什么牌子| 有伤口吃什么消炎药| 牙疼吃什么食物好得快| 化纤是什么面料| 毛周角化症是什么原因引起的| 孕期阴道炎可以用什么药| 酸菜鱼什么鱼最好| 腮腺炎吃什么消炎药| 蜈蚣长什么样| 青鱼吃什么| model是什么意思| 打呼噜吃什么药最管用| 性出血是什么原因造成的呢要怎么办| 尿酸高吃什么| 排骨是什么肉| 摩卡是什么意思| 月经为什么来了一点又不来了| 六月二十八是什么日子| 脾大吃什么可以缩脾| 尿潜血阳性什么意思| 佛光普照是什么生肖| 肺结核吃什么好| 舌头发白是什么情况| 恶露是什么样子的图片| 杺字五行属什么| 胚芽是什么| 沙蚕是什么动物| 胃萎缩是什么意思| 发福了是什么意思| 什么样的人容易得脑梗| 梦到打架是什么意思| 定期是什么意思| 脂肪瘤是什么引起的| vol是什么意思| 二月什么星座| 对什么有好处的英文| 碘酸钾是什么| 叶公好龙告诉我们什么道理| 直肠炎是什么症状| 舌吻是什么| 梦见自己请客吃饭是什么意思| 777是什么意思| 趴着睡觉是什么原因| 筋是什么组织| 前列腺炎是什么引起的| 老专家药膏有什么功效| 中国的全称是什么| 18号来月经什么时候是排卵期| 三虫念什么| 五行大林木是什么意思| 百度

新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ARM的MPEG-4软解码器的优化与实现

冰壶,需要更多“玩家”

作者: 时间:2025-08-04 来源:网络 收藏
百度 与2016年发明申请量前十名相比,名单无变化,但后五位排名先后有变化。

1 引 言

视频压缩标准自问世以来受到人们的广泛关注。近几年,嵌入式应用中对播放器的实现已经成为众多厂家的研究热点。专用的播放芯片已经非常普遍,但是减少功耗和降低成本一直是商家追求的目标,因此,随着嵌入式的主流微处理器ARM的处理能力越来越强,用他来实现MPEG-4系统的成为了众多嵌入式设计公司研究的重点内容。由于MPEG-4系统庞大且需要大量的数据处理,因此在ARM中实现MPEG-4需要对其原算法进行充分的优化才能达到理想的性能。为此研究了一种基于26EJ-S微处理器的MPEG-4解码算法的纯软件实现和优化的方法,通过对解码算法的软件优化,将QVGA格式MPEG-4码流在平台上的播放速度由原来的10 f/s提高到了37 f/s,完全达到了流畅播放的要求,具有很高的实用价值。

2 开发平台及耗时分析

论文研究使用的是基于26EJ-S微处理器的综合开发平台,采用Linux操作系统,外接320*240(QVGA格式)的LCD显示屏。ARM926EJ-S微处理器的时钟频率为190 MHz;采用5级整数流水线操作,支持32位ARM指令集和16位Thumb指令集以及扩充的DSP指令集;支持数据Cache和指令Cache,具有更高的指令和数据处理能力。软件编译环境为ADS1.2,使用Multi-ICE下载程序。

MPEG-4 SP级算法流程图如图1所示。优化的前期工作首先要将MPEG-4解码代码移植到开发平台上,然后对解码各个模块进行运算量和耗时分析,找出优化的重点内容。本文采用长度为376 934 B的AVI码流为测试序列,该码流共95帧,其中包括8个I帧,87个P帧。在未优化前测得的耗时分析结果如表1所示,整个测试序列解码播放完毕耗时10.05 s,解码播放速度只有9.5 f/s。

在ARM上用软件实现MPEG-4解码器的主要任务是提高解码速度,同时达到理想的画面播放效果。因此,怎样使耗时部分根据ARM处理器的特性提高程序执行效率是我们的主要工作,也是研究实现的重点。

3 MPEG-4解码算法在ARM926EJ-S上的优化

MPEG-4以开源的XVID源代码做为参考,将XVID的C源代码移植到ARM平台上,在此基础上进行优化并测试优化后的解码播放性能。优化主要从3个方面进行:

(1)对XVID源代码的软件结构,程序流程进行适合ARM特点的调整。
(2)对运算量较大、耗时较多的模块编写汇编函数代替C程序模块,提高程序执行效率。
(3)寻找快速或并行算法。

3.1 软件结构的优化

ARM的资源非常有限,在软件的结构安排上应尽量减少存储器访问,增加Cache的命中率,提高程序执行效率。

3.1.1 适当的模块合并处理以减少存储器的访问次数

优化前的源代码中,I帧与P帧的宏块解码软件结构如图2所示。在这个流程中,对于inter宏块,可变长解码(VLD),反扫描(Iscan),反量化(Iquant)三个过程中有3次的Block存储区读,2次Block存储区写和1次Data存储区写。然而这些数据的处理并不存在关联性,为减少存储器访问带来的浪费,可以将在Block存储区读取的数据将这三个步骤全部进行完之后再放回存储区。因此可对这三个步骤进行合并处理。具体的做法是:将原来的两个函数:



合并后VLD从Block缓冲区读数据处理后马上进行反扫描和反量化,并将反量化后的数据存入Block中。整个过程只进行了一次Block缓冲区的读和写,不仅减少了两个读写操作,还减少了一个Data缓冲区的开辟。同时,对于P帧在VLD之后立即进行反量化还省去了大量零值的处理,这也是考虑合并的主要因素之一。

同样,I帧中的AC/DC预测和反量化也可以进行合并。做法是:将add_acdc(pMB,i,block[i*64],iDcScaler,predictors);dequant_intra(data[i*64],block[i*64],iQuant,iDcScaler)两个函数合并为:add_acde(pMB,i,block[i*64],iDcSealer,predictors,cbpcontrol,iQuant)。这个过程在减少存储器的读写操作的同时也减少了没有预测的AC值的反量化过程。

通过以上两个步骤的合并处理,由测试序列测试之后发现解码播放完毕耗时5.23 s,速度提高了将近9 f/s,效果非常明显。

3.1.2 调整子块处理以增加Cache命中率

MPEG-4每个宏块由6个子块组成。在XVID源代码中,宏块解码中的6个子块的所有处理一起进行,被放在一个大的for循环中。ARM9采用哈佛结构,分别拥有I-cache和D-cache,所有处理同时进行,某一子块的值会一直在D-cache中不被替换,对于D-cache是非常有利的,但是对于I-cache来说却会造成代码的不断替换而影响Cache效率。对于I帧,由于其数据量比较大,数据替换的开销会远远大于代码替换,因此不对其做处理。而对于P帧,由于数据量小,零值较多,数据替换开销大大降低,因此将其6个子块的某一处理集中进行,保证这一处理过程的代码一直存在于I-cache中,以增加cache的命中率。具体的做法是:



这个过程使解码速度提高了将近4 f/s。

另外对于I帧,IDCT与VOP重建也是可以合并的,这个过程可以减少存储器的访问次数。但是这个合并过程不符合ARM的Cache工作特性,因此优化的效果并不明显,这也是优化过程中矛盾折衷的明显体现。

3.2 编写函数

ADS编译器对C程序有很强的编译能力,但对于一些运算量较大,涉及存储器访问较多的模块,仍然需要使用优化。这部分主要是针对耗时较多的IDCT,插值,VOP重建等模块。在书写汇编函数时,要充分把握ARM处理器的特性,尽量避开多周期指令,避免流水线阻塞,合理分配寄存器以尽量减少存储器操作。汇编函数的优化包括以下几点: 3.2.1避免多周期指令

中,相对耗时的指令主要有存储器操作指令load/stor,程序跳转指令B,乘法指令MUL等。在编写汇编函数时,要尽量的考虑这些指令的替换方案。

对于存储器操作指令,可以采用多寄存器传送指令LDM/STM来替换。一次LDR指令需要5个指令周期,而N个寄存器传送的LDM指令只需要N+4个指令周期。IDCT、插值、VOP重建中的数据读取都是连续地址操作,可以一次读人4个甚至更多的数据到寄存器以减少程序的执行指令周期数。

其次,一条程序跳转指令B需要3个指令周期,利用手写汇编可以避免ADS编译C时经常出现的函数跳转指令,同样减少了执行周期数。

3.2.2避免流水线阻塞

ARM9采用五级流水线,执行效率很高,但是如果指令设置不当,很容易造成流水线阻塞而影响执行效率。Load装载指令和B跳转指令是造成流水线互锁①和刷新②的重要因素。解决流水线互锁的办法主要是预装载和循环展开。

预装载,即将接下来要用到的数据在不影响寄存器使用的情况下提前两个以上指令周期装载到寄存器中。这是由于load指令装载到寄存器的数据在接下来的2个周期中还不能被使用,会造成流水线的互锁。

循环展开,即将循环体内的主体多次循环将循环跳转次数减少。这样不仅可以减少B跳转指令带来的流水线刷新,同时可以在前一个循环中通过预装载下一个循环需要用的数据来避免流水线的互锁。

3.2.3 尽量减少存储器操作

将经常使用的数据保持在寄存器中,避免每次用数据时都从存储器读取。尤其在IDCT中,尽量将一行或一列的数据一直保持在寄存器中,寄存器的执行效率是最高的,合理的分配寄存器和利用堆栈可以使程序更优。

一个高效的汇编程序可以使整个性能有较多的改善,通过ARM汇编函数的替换,测试序列解码播放完毕耗时3.1 s,解码速度提高了8 f/s。

3.3 寻找快速算法和并行算法

ARM汇编的好处不仅在于执行效率高,还在于可以充分利用ARM处理32位数据的特性,寻找快速算法和并行算法。

对于插值函数,可以采用并行算法来一次处理多个象素。每个象素是一个8位数据,而ARM处理器是32位,因此可以改进算法一次处理4个象素。插值中的关键算法是:

rounding是码流中一个取0或1的参数。我们可以改进这个算法4个象素一起处理。通过分析知道,可以将式(1)改为A/2+B/2+C,C也应该是一个取0或者取1的值。分析的结果发现,当rounding为0时,C=(A∣B)0X01;当rounding为1时,C=(AB)0X01。此时我们可以用4个象素组成两个32位的字W1,W2,利用公式:

W的结果等同于四个象素单独处理的结果。但是由于ARM处理器字读取时是字地址对齐的,因此要注意改进算法引起的字地址不对齐问题,利用这个算法时可以通过拼字的方法来解决字地址对齐的问题。

通过这一步骤的优化,测试序列解码播放完毕耗时2.56 s,解码速度提高了6 f/s,整体解码速度达到了37 f/s。

4 结语

本文对MPEG-4软解码器在ARM平台上的实现及优化的整体思路和步骤进行了阐述,优化结果理想,软解码播放速度由最初移植完毕时的10 f/s提高到了37 f/s。本文给出的优化方案可以进一步推广到H.264或者其他视频软解码系统基于ARM的应用中。



评论


相关推荐

技术专区

关闭
老公的姐姐叫什么 34属什么 小赤佬是什么意思 谢字五行属什么 自然堂适合什么年龄
sassy是什么意思 human是什么意思 狻猊是什么 御风是什么意思 为什么井盖是圆的
霸道总裁是什么意思 葡萄糖什么意思 手指甲紫色是什么原因 一暴十寒什么意思 517是什么意思
胃胀是什么症状 ideal是什么意思 盐卤是什么 泪崩是什么意思 甲状腺结节是什么引起的
屈曲是什么意思hcv8jop2ns2r.cn 坚果都有什么hcv9jop6ns3r.cn 痛风不能吃什么cl108k.com 支原体感染是什么病hcv8jop6ns4r.cn 毒瘾发作有什么症状hcv8jop8ns2r.cn
小孩子手脚脱皮是什么原因hcv7jop9ns0r.cn 鼻烟是什么东西hcv8jop4ns5r.cn 眼角长痘痘是什么原因hcv9jop5ns4r.cn pcr是什么hcv8jop4ns7r.cn 一代明君功千秋是什么生肖xinjiangjialails.com
黑五是什么hcv9jop0ns0r.cn 吸血鬼怕什么hcv9jop8ns2r.cn 什么叫做焦虑症hcv8jop7ns4r.cn 前列腺是什么意思hcv7jop4ns7r.cn 懦弱的近义词是什么hcv9jop2ns7r.cn
moo是什么意思wuhaiwuya.com 腋下有异味是什么原因导致的hcv8jop1ns8r.cn moncler是什么牌子hcv8jop6ns9r.cn 98年虎是什么命hcv8jop8ns9r.cn 常吃猪油有什么好处和坏处aiwuzhiyu.com
百度