RM52J解码器实时优化实现

内存卡读不出来怎么办  时间:2021-01-16  阅读:()

赵首元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上的应用推广,在流媒体、视频会议等实时领域的应用与开发.

HostKvm香港VPS七折:$5.95/月KVM-2GB内存/40GB硬盘/500GB月流量

HostKvm是一家成立于2013年的国外主机服务商,主要提供VPS主机,基于KVM架构,可选数据中心包括日本、新加坡、韩国、美国、俄罗斯、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。商家本月针对香港国际机房提供特别7折优惠码,其他机房全场8折,优惠后2G内存香港VPS每月5.95美元起,支持使用PayPal或者支付宝付款。下面以香港国际(HKGlobal)为...

搬瓦工(季付46.7美元)新增荷兰(联通线路)VPS,2.5-10Gbps

搬瓦工最近新增了荷兰机房中国联通(AS9929、AS4837)线路的VPS产品,选项为NL - China Unicom Amsterdam(ENUL_9),与日本软银和洛杉矶(DC06)CN2 GIA配置一致可以互换,属于高端系列,2.5Gbps-10Gbps大带宽,最低季付46.7美元起。搬瓦工VPS隶属于老牌IT7公司旗下,主要提供基于KVM架构VPS主机,数据中心包括美国洛杉矶、凤凰城、纽...

ParkInHost - 俄罗斯VPS主机 抗投诉 55折,月付2.75欧元起

ParkInHost主机商是首次介绍到的主机商,这个商家是2013年的印度主机商,隶属于印度DiggDigital公司,主营业务有俄罗斯、荷兰、德国等机房的抗投诉虚拟主机、VPS主机和独立服务器。也看到商家的数据中心还有中国香港和美国、法国等,不过香港机房肯定不是直连的。根据曾经对于抗投诉外贸主机的了解,虽然ParkInHost以无视DMCA的抗投诉VPS和抗投诉服务器,但是,我们还是要做好数据备...

内存卡读不出来怎么办为你推荐
免费国外空间哪些免费的国外空间最好?速度快.功能大?免费国内空间想做一个网站想找个免费的空间最好是国外的,国内的太多都是骗人的或者不稳定的。谢谢!域名服务商买域名,一定要选择好的服务商网站空间商个人网站备案如何从空间商到备案虚拟主机管理系统我也想和你学虚拟主机管理系统的操作虚拟主机系统什么是虚拟主机?长沙虚拟主机长沙点航网络科技有限公司怎么样?沈阳虚拟主机网站慢想要换一个沈阳的双线机房m3型虚拟主机谁在用中国万网M3虚拟主机?怎么样?域名是什么什么是域名?域名是干什么用的?
万网域名查询 香港bgp机房 国内免备案主机 Dedicated 建站代码 三拼域名 lol台服官网 域名接入 中国电信宽带测速网 免费phpmysql空间 万网空间管理 重庆电信服务器托管 主机管理系统 全能空间 lamp怎么读 阿里云邮箱登陆 成都主机托管 阿里云邮箱个人版 网络速度 网站防护 更多