RM52J解码器实时优化实现

游戏内存修改器  时间:2021-01-20  阅读:()

赵首元1,张刚1,袁媛2*1.
51.
51.
51.
5CollegeofInformationEngineering,TaiyuanUniversityofTechnologyTaiyuan,Shanxi;CollegeofInformationEngineering,TaiyuanUniversityofTechnologyTaiyuan,Shanxi;TaiyuanUniversityofTechnologyTaiyuan,Shanxi太原理工大学信息工程学院,山西太原,030024;太原理工大学信息工程学院,山西太原,030024;太原理工大学030024;;15698412998;;18935155935;;太原理工大学迎西校区信息工程学院3248信箱;;shouyuan449894@163.
com;tyzhgang@tom.
com;shouyuan449894@163.
com赵首元(1983—),男,在读硕士生,主要从事视频压缩、流媒体通信的研究.
张刚教授,博士生导师,主要从事语音、视频等方面的研究.
;;赵首元;张刚;袁媛ZhaoShouYuan;ZhangGang;YuanYuan赵首元1.
51.
51.
51.
51.
51.
5*|1|赵首元|ZhaoShouYuan|太原理工大学信息工程学院,山西太原,030024|CollegeofInformationEngineering,TaiyuanUniversityofTechnologyTaiyuan,Shanxi|赵首元(1983—),男,在读硕士生,主要从事视频压缩、流媒体通信的研究.
张刚教授,博士生导师,主要从事语音、视频等方面的研究.
|太原理工大学迎西校区信息工程学院3248信箱|030024|shouyuan449894@163.
com|18935155935|15698412998|2|张刚|ZhangGang|太原理工大学信息工程学院,山西太原,030024|CollegeofInformationEngineering,TaiyuanUniversityofTechnologyTaiyuan,Shanxi||||tyzhgang@tom.
com|||3|袁媛|YuanYuan|太原理工大学|TaiyuanUniversityofTechnologyTaiyuan,Shanxi||||shouyuan449894@163.
com||RM52J解码器实时优化实现|RM52Jdecoderreal-timeoptimalrealized|(1.
太原理工大学信息工程学院,山西太原,030024;2.
太原理工大学)摘要:本文主要针对RM52J执行效率低下的情况,对其中的空间地址分配访问机制、像素插值块、主循环体结构几个部分提出几种关键的C代码级算法改进方案并给出解决过程,并对耗时模块中的反变换模块、环路滤波模块、分像素插值模块进行了多媒体指令集(MMX)优化,结果表明,经过算法改进和MMX优化在不影响信噪比的前提下大大提高了AVS格式视频图像解码效率,对PC机上AVS视频码流实时解码播放具有重要意义.

关键词:AVS;RM52J;解码器;MMX;中图分类号:TN919.
81RM52Jdecoderreal-timeoptimalrealizedZhaoShouYuan1,ZhangGang1,YuanYuan2(1.
CollegeofInformationEngineering,TaiyuanUniversityofTechnologyTaiyuan,Shanxi;2.
TaiyuanUniversityofTechnologyTaiyuan,Shanxi)Abstract:ThispapermadeseveralkeyalgorithmCcode-leveldesignandgivetheresolutionprocessforseveralpartsaboutaddressallocationofspaceandaccessmechanism、thepixelinterpolationblockandthemainloopstructure,andthenmadetime-consumingmodulesoptimizedbythemultimediainstruction(MMX)whichincludeinversetransformmodule,theloopfiltermodulesandsub-pixelinterpolationmodule,forthelowefficiencyofRM52J.
Theresultsshowthat,thedecodingefficiencyofAVSformatvideoimageisgreatlyimprovedwithoutaffectingthesignaltonoiseratioafteralgorithmimprovingandMMXoptimization,whichisimportantforAVSvideostreamreal-timedecodingandplayingonthePC.
Keywords:AVS;RM52J;decoder;MMX引言AVS[1]作为中国具有自主知识产权的新一代音视频编解码标准,在高清数字视频及网络多媒体应用方面表现出很好的性能和低的复杂度.
RM52J是AVS标准的参考软件,其特点是与标准一致,便于学习,但远远不能满足实时应用的要求.
AVS编解码器要在互联网世界得到广泛应用,必须在PC机上针对AVS软件解码器进行速度优化.

本文所做工作,一方面在C代码级对参考软件进行了算法改进:改进了整个程序中内存空间的地址分配访问机制、C代码像素插值算法改进、残差系数全零块特殊处理、片头解码结构优化,循环体结构改进;另一方面对耗时较多的模块运用多媒体指令(MMX)进行优化.

C代码优化空间地址分配访问RM52J中,函数decode_one_frame里的帧初始化函数(init_frame)开辟了3个帧图像大小的二维缓冲空间,用于帧间解码时参考帧和当前帧存储.
每解码一帧图像都要进行一次动态内存分配,之后再释放一次,反复的内存操作大大消耗了CPU资源,程序运行效率低下;另一方面图像数据以二维方式存储访问,每读取写入一个数据需要索引水平和垂直两个方向坐标分量,读写耗时翻倍,且缓冲尺寸大小刚好等于一帧不利于后续样本插值优化.
针对这两个缺陷,本实验提出解决方法:一是将帧缓冲空间分配放在程序主函数(main)中读码流函数之前完成,全部视频序列解码完后释放该内存数据段;二是采用一维存储方式并对尺寸边界扩展.
改进的关键部分是将如下的程序片段for(refnum=0;refnumreference_frame[refnum][i],t->ss.
vertical_size,t->width);elseget_mem2D(&t->reference_frame[refnum][i],t->ss.
vertical_size/2,t->width_cr);}改进为如下的片段.
for(i=0;iedged_width_p*t->edged_height_p+(t->edged_width_p*t->edged_height_p>>1),CACHE_SIZE);t->refp[i].
Y=p+EDGED_HEIGHT_P*t->edged_width_p+EDGED_WIDTH_P;t->refp[i].
U=p+t->edged_width_p*t->edged_height_p+(t->edged_width_p*EDGED_HEIGHT_P>>2)+(EDGED_WIDTH_P>>1);t->refp[i].
V=p+t->edged_width_p*t->edged_height_p+(t->edged_width_p*t->edged_height_p>>2)+(t->edged_width_p*EDGED_HEIGHT_P>>2)+(EDGED_WIDTH_P>>1);}改进后数据存储结构可用下面示意图1表示,将一维空间等效为二维图理解.
程序中edged_width_p和edged_height_p分别表示边界扩展后存放亮度样本空间的宽度和高度,EDGED_WIDTH_P和EDGED_HEIGHT_P分别表示亮度边界扩展的宽度和高度.
色度U、V空间相应数据均为亮度的一半.
这样处理后,整个程序只进行一次对帧缓冲的分配,且用一维向量索引样本位置,大大提高了索引速率,同时做了边界尺寸扩展工作,为下一步样本插值优化打好了基础.

图1存储结构示意图Fig.
1Storagestructurediagram像素插值块AVS解码中样本插值是整个解码中最耗时的部分,是优化的关键环节.
依据运动矢量的横坐标dx和纵坐标dy为整像素、二分之一像素、四分之一像素位置的划分法,亮度样本插值分为九种情况,其中二分之一像素插值三种,四分之一像素插值五种,二分之一样本值通过四抽头滤波器(-1,5,5,-1)计算得到,四分之一样本值通过四抽头滤波器(1,7,7,1)计算得到.

参考软件RM52J中,亮度宏块是以8x8块大小进行样本插值的,由编码标准可知宏块的四个8x8块可拥有不同运动矢量,同一8x8块内像素共享同一运动矢量(dx,dy)[2],dx为运动矢量水平方向小数分量,dy为运动矢量垂直方向小数分量.
如果计算样本时用到的整像素位置超出图像边界,则像素值由最近的图像边界上的样本值取代.
以水平和垂直运动矢量分量均为整像素位置为例,RM52J程序实现如下面所示:if(dx==0&&dy==0){for(j=0;j=0&&y_pos+B8_SIZE-1=0&&x_pos+B8_SIZE-1mpr[b8_x+xx][b8_y+yy]+curr_blk[yy][xx];elsecurr_val=t->mpr[xx][yy]+curr_blk[yy][xx];curr_blk[yy][xx]=clamp(curr_val,0,255);if(block8x8imgY[t->mb.
pix_y+b8_y+yy][t->mb.
pix_x+b8_x+xx]=(uint8_t)curr_blk[yy][xx];elset->imgUV[block8x8-4][t->mb.
pix_c_y+yy][t->mb.
pix_c_x+xx]=(uint8_t)curr_blk[yy][xx];}}程序中,将亮度和色度块的判别放在了解码子块循环内,解码一个亮度8x8块样本值需要进行64次是否为亮度块的判断,而实际上只需一次,这样的重复判断是没有必要的;二维的数据存储方式增加了位置索引复杂度;对于系数全零的8x8块显然无必要参与重构.
针对这些缺陷,本文解决方法:将亮度和色度块判断提前到循环体外,分开解码;将二维的数据存储结构改进为一维存储;对于全零残差系数8x8块,在系数熵解码时参考CBP值用一个比特位加以标记,判断为全零则跳过反变换函数,以及重构时直接将预测数据作为最终样本值.
以亮度块为例,改进后代码实现片段如下所示:if(t->coeff[block8x8]==0)for(i=0;iedged_width_p+(block8x8%2)edged_width_p;}程序中tm_block[j]为预测块,curr_blk[block8x8][i]为4个8x8亮度和2个8x8色度残差系数块,tmp[i]为重构样本块,pp为存储8x8块行首地址.
经过程序的改进,以解码一个8x8亮度块为例,一是减少63次对亮度,色度块的判断;二是如果是全零系数块则减少了64次加法运算;三是预测数据一维存储后减少64次分量坐标索引;四是存储最后解码数据可引入memcpy函数一次处理8个数据,更主要的是这样的读写方式为下面利用多媒体指令优化打下了基础.

利用MMX技术优化解码器MMX简介Intel的多媒体指令集(MMX)技术是对Intel体系结构(IA)指令集的扩展,它使用了单指令多多数据技术(SIMD)[4],以并行方式处理多个元素,从而提高了多媒体软件的运行速度.
本节主要工作就是运用多媒体指令集对解码器进行优化,重点对其中的反变换、环路滤波、样本插值三块进行优化,目的是在C代码级优化的基础上继续提升解码帧率,实现解码器实时解码.

注意事项1.
使用内联汇编相对于调用汇编文件函数而言减少了调用语句指令,可进一步提高速度,尽量少打断内联汇编块,以减少运行时来回倒腾寄存器环境的时间.

2.
(4个以上)movq尽可能地在一起,指令配对可加快执行指令的速度,前提是在一起的mov不要使用一样的mmx寄存器,要避免前一条指令对寄存器写,后一条指令对寄存器再次读写的情况.

3.
尽可能地使用static变量,访问这样的变量是很快的,等于访问立即数的速度.
4.
尽可能地在寄存器中完成操作,不要去访问内存.
内存的访问要比寄存器的访问耗时得多,因此尽可能地把数据存放在寄存器中,最后再一次性写入到内存中,减少内存读取次数,提高cache命中率.

优化举例本节以样本插值中垂直方向整像素位置、水平方向二分之一像素位置样本值求取为例,用多媒体指令实现.
所写代码在很好得考虑了上面所列注意事项基础上实现了所需功能.
仅仅将几个8位的操作,改为对64位的操作,测试得到速度提告了3倍左右,同样的道理,将几个movq写在一起,这样可以提高5%左右的速度.

图4给出了多媒体指令集(MMX)求取水平方向第一行前四个二分之一像素的流程,用到的主要指令有movd、pshufw、punpckhbw、jnz、pmullw.

图4二分之一插值求取示意图Fig.
4Onehalfinterpolationfordrawing代码实现:staticvoidAVS_qpel8_interpolate(uint8_t*dst,uint8_t*src,intdstStride,intsrcStride){staticintt0=5;staticintt1=4;staticintt=8;__asm{__asmpxormm7,mm7__asmmovecx,srcStride__asmmovebx,dstStride__asmmoveax,dst__asmmovedx,src__asmmovdmm6,t0__asmpshufwmm6,mm6,0__asmp:__asmmovqmm0,[edx]__asmmovqmm2,[edx+1]__asmmovqmm1,mm0__asmmovqmm3,mm2__asmpunpcklbwmm0,mm7__asmpunpckhbwmm1,mm7__asmpunpcklbwmm2,mm7__asmpunpckhbwmm3,mm7__asmpaddwmm0,mm2__asmpaddwmm1,mm3__asmmovqmm3,[edx-1]__asmmovqmm4,[edx+2]__asmmovqmm2,mm3__asmmovqmm5,mm4__asmpunpcklbwmm3,mm7__asmpunpckhbwmm2,mm7__asmpunpcklbwmm4,mm7__asmpunpckhbwmm5,mm7__asmpaddwmm3,mm4__asmpaddwmm5,mm2__asmpmullwmm0,mm6__asmpmullwmm1,mm6__asmpsubwmm0,mm3__asmpsubwmm1,mm5__asmmovdmm5,t1__asmpshufwmm5,mm5,0__asmpaddwmm0,mm5__asmpaddwmm1,mm5__asmpsrawmm0,3__asmpsrawmm1,3__asmpackuswbmm0,mm1__asmmovq[eax],mm0__asmaddedx,ecx__asmaddeax,ebx__asmdect__asmjnzp}}实验结果及性能分析本文使用的操作系统是Windows7,处理器为奔腾双核,主频大小2.
0G,编译与调式环境是VisualStudio2005.
分别测试了帧数为300帧的Carphone.
qcif(176x144)、paris.
cif(352x288)和mobcal_D1.
avs(720x576)三个AVS视频序列.
优化前后的速率对比如表1所示.

表1解码帧率测试结果Tab.
1Decodingframeratetestresults帧率RM52JC代码优化后帧率MMX优化后帧率提高倍数Carphone.
qcif39.
48fps116.
24fps264.
13fps6.
69paris.
cif18.
53fps51.
86fps117.
20fps6.
32mobcal_D1.
avs5.
93fps16.
93fps38.
46fps6.
48从表中可知,经过C代码级改进优化,三种格式解码帧率依次增加了76.
76fps、32.
33fps、11.
00fps,实现了.
cif格式大小图像实时解码;经过MMX技术优化后,三种格式解码帧率依次提高至原RM52J的6.
69倍、6.
32倍、6.
48倍,实现了.
D1格式图像的实时解码.

表2信噪比测试结果Tab.
2Signaltonoiseratiotestresults信噪比优化前优化后测试序列PSNR_YPSNR_UPSNR_VPSNR_YPSNR_UPSNR_VCarphone.
qcif38.
6542.
3842.
7638.
5942.
3842.
76paris.
cif38.
4942.
7644.
88384342.
7644.
88Mobcal_D1.
yuv37.
2642.
5543.
3736.
8042.
5543.
37最后对软件进行了信噪比测试,由表2可知,由于只进行代码级优化,解码器的性噪比基本没有下降,保持原有图像质量.

结论本文给出了RM52J解码器C代码级改进和多媒体指令集优化的过程介绍,实验结果表明本实验在不影响图像质量的前提下实现了.
cif和.
D1格式图像的实时解码,由于AVS解码器涉及我国自主知识产权,实验成果有利于AVS视频解码器在集成电路(机顶盒)及高速DSP上的应用推广,在流媒体、视频会议等实时领域的应用与开发.

速云:广州移动/深圳移动/广东联通/香港HKT等VDS,9折优惠,最低月付9元;深圳独立服务器1050元/首月起

速云怎么样?速云,国人商家,提供广州移动、深圳移动、广州茂名联通、香港hkt等VDS和独立服务器。现在暑期限时特惠,力度大。广州移动/深圳移动/广东联通/香港HKT等9折优惠,最低月付9元;暑期特惠,带宽、流量翻倍,深港mplc免费试用!点击进入:速云官方网站地址速云优惠码:全场9折优惠码:summer速云优惠活动:活动期间,所有地区所有配置可享受9折优惠,深圳/广州地区流量计费VDS可选择流量翻...

阿里云服务器绑定域名的几个流程整理

今天遇到一个网友,他之前一直在用阿里云虚拟主机,我们知道虚拟主机绑定域名是直接在面板上绑定的。这里由于他的网站项目流量比较大,虚拟主机是不够的,而且我看他虚拟主机已经有升级过。这里要说的是,用过阿里云虚拟主机的朋友可能会比较一下价格,实际上虚拟主机价格比云服务器还贵。所以,基于成本和性能的考虑,建议他选择云服务器。毕竟他的备案都接入在阿里云。这里在选择阿里云服务器后,他就蒙圈不知道如何绑定域名。这...

易探云服务器怎么过户/转让?云服务器PUSH实操步骤

易探云服务器怎么过户/转让?易探云支持云服务器PUSH功能,该功能可将云服务器过户给指定用户。可带价PUSH,收到PUSH请求的用户在接收云服务器的同时,系统会扣除接收方的款项,同时扣除相关手续费,然后将款项打到发送方的账户下。易探云“PUSH服务器”的这一功能,可以让用户将闲置云服务器转让给更多需要购买的用户!易探云服务器怎么过户/PUSH?1.PUSH双方必须为认证用户:2.买家未接收前,卖家...

游戏内存修改器为你推荐
316不锈钢和304哪个好请问316不锈钢和304不锈钢有什么区别?从外观如何辨别?视频制作软件哪个好免费的视频剪辑软件用哪个好?聚酯纤维和棉哪个好袜子是棉的好还是聚酯纤维的好?涡轮增压和自然吸气哪个好自然吸气与涡轮增压发动机哪个更好涡轮增压和自然吸气哪个好发动机涡轮增压好还是自然吸气好涡轮增压和自然吸气哪个好涡轮增压和自然吸气哪个更好,优缺点是什么?滚筒洗衣机和波轮洗衣机哪个好滚筒洗衣机和波轮洗衣机的哪个好视频剪辑软件哪个好视频剪辑哪个软件好用电脑杀毒软件哪个好电脑杀毒软件哪个好用朱祁钰和朱祁镇哪个好明英宗和明代宗是怎么回事?
便宜vps 免备案cdn 发包服务器 gspeed 搜索引擎提交入口 万网主机管理 带宽租赁 浙江服务器 碳云 .htaccess comodo 侦探online 挂马检测工具 ssd ddos攻击小组 dmz主机 电脑主机响 戴尔主机 qq空间打开慢 lighttpdwindows 更多