基于AVS的并行变换和反变换方法技术

技术编号:11857402 阅读:113 留言:0更新日期:2015-08-12 01:04
本发明专利技术公开了基于AVS的并行变换和反变换方法,变换方法包括以下步骤:将八个当前像素值减去八个预测像素值得到八个残差值并保存于一个寄存器中;重复7次得到八行共64个残差值,八行残差值分别保存于八个寄存器中;对残差矩阵进行转置得到转置残差矩阵;对转置残差矩阵进行水平变换部分的蝶形运算得到水平变换运算矩阵;对水平变换运算矩阵进行转置得到转置水平变换运算矩阵;对转置水平变换运算矩阵进行垂直变换部分的蝶形算法的运算得到垂直变换运算矩阵;对垂直变换运算矩阵进行如下运算:rij=(hij+24)>>5,得到变换结果矩阵。本发明专利技术使用SIMD指令,分别将变换和反变换中的参数并行放进寄存器中进行处理,实现高效率地得到变换结果和反变换结果。

【技术实现步骤摘要】
基于AVS的并行变换和反变换方法
本专利技术涉及数字视频编解码
,具体涉及基于AVS(AudioVideocodingStandard)标准中,使用SIMD(SingleInstructionMultipleData)指令优化变换和反变换的方法。
技术介绍
随着AVS标准在广播电视、互联网、机顶盒、监控等大规模产业化,在PC和嵌入式设备上播放和录制AVS文件要求越来越多,且都希望实时,由于AVS采用高复杂度算法获得高编码效率,因此,需要对编解码器进行有效的程序优化,才可能达到实时,画面流畅,播放和录制达到25fps,甚至30fps。对编解码AVS码流分析,QUANT/DEQUANT耗时占很大比重,特别的,如果量化后的数据都为0,将可以不需要进行许多运算,优化好它们就能有效的提高编解码效率。现在的PC和嵌入式处理器芯片有SIMD指令,如:intel的mmx、sse和AMD的3DNow!,ARM的NEON,使用好这些SIMD指令,能有效地提高编解码速度。DCT即为变换,是将当前像素与预测像素相减,以8x8变换为例,得到8x8的残差系数矩阵,然后进行8x8整数正离散余弦变换,步骤如下:1.将样本点精度为8位的无符号的当前像素值与预测像素值进行相减,得到精度为16位的有符号的残差值,形成8x8的残差矩阵。2.对残差矩阵进行水平变换:H’=ResidualMatrix*T8,ResidualMatrix为残差矩阵,T8是AVS标准规定的变换矩阵,H’表示水平变换后的中间结果矩阵。3.对H’进行垂直变换:H”=T8T*H’,其中,T8T为T8的转置矩阵,H”为垂直变换后的中间结果矩阵。4.将上面得到的垂直变换后的中间结果矩阵H”进行调整:rij=(hij”+24)>>5,得到变换的最终结果矩阵,其中,hij”为H”中的数据,rij为变换的最终结果矩阵中的数据,i和j的取值范围为0-7。IDCT即为反变换,是将经过变换、量化和反量化得到的反量化矩阵转换为残差矩阵,加上预测值,得到反变换后的结果,步骤如下::1.对反量化矩阵进行水平反变换:H’=CoeffMatrix*T8T,其中CoeffMatrix为反量化矩阵,T8T为T8的转置矩阵,H’为水平反变换的中间结果矩阵。2.对H’中的数据进行如下计算:hij”=clip3(-2n+7,2n+7-1,(hij’+4))>>3,得到水平反变换的调整矩阵H”,hij’为水平反变换的中间结果矩阵中的数据,hij”为H”中的数据,i和j的取值范围为0-7,n为样本点精度,一般取值为8,clip3为取三个值的中间值。3.对H”进行垂直反变换:H=T8*H”,H为垂直反变换的中间结果矩阵。4.对H中的数据进行调整,得到残差矩阵中的残差值:rij=clip3(-2n+7,2n+7-1,(hij+64))>>7,hij为矩阵H中的数据,rij为残差矩阵中的数据。5.将残差值和变换前的预测值pij相加,再与255进行比较,取最小值调整:cij=min(rij+pij,255),预测值pij为预测值矩阵中的数据,cij为反变换结果矩阵中的数据。上述的变换和反变换过程中,每计算一个像素点都需要16次乘法和14次加法,即使采用蝶形算法能一定程度地优化运算过程,但耗时还是很大。
技术实现思路
为了克服现有技术的不足,本专利技术的目的在于提供基于AVS的并行变换和反变换方法,使用SIMD指令,分别将变换和反变换中的参数并行放进寄存器中进行处理,实现高效率地得到变换结果和反变换结果。为解决上述问题,本专利技术所采用的技术方案如下:方案一:基于AVS的并行变换方法,包括以下步骤:步骤A:利用两个寄存器分别并行读入八个当前像素值和八个预测像素值,利用低位交叉指令使当前像素值与预测像素值进行交叉得到第一交叉结果,以及使预测像素值与自身进行交叉得到第二交叉结果,将第一交叉结果减去第二交叉结果得到八个残差值并送进一个寄存器中,其中,当前像素值与预测像素值为8位数据,残差值为16位数据;步骤B:重复执行七次步骤A,得到64个残差值,组成8*8的残差矩阵,其中,每执行一次步骤A所得到的八个残差值为残差矩阵中的其中一行数据,八行数据分别保存于八个寄存器中;步骤C:结合低位交叉指令和高位交叉指令对残差矩阵进行转置得到转置残差矩阵,所述八个寄存器中的数据分别替换为转置残差矩阵中的八行数据;步骤D:针对转置残差矩阵中的数据进行水平变换部分的蝶形算法的运算,得到水平变换运算矩阵,所述八个寄存器中的数据分别替换为水平变换运算矩阵中的八行数据;步骤E:结合低位交叉指令和高位交叉指令对水平变换运算矩阵进行转置得到转置水平变换运算矩阵,所述八个寄存器中的数据分别替换为转置水平变换运算矩阵中的八行数据;步骤F:针对转置水平变换运算矩阵中的数据进行垂直变换部分的蝶形算法的运算,得到垂直变换运算矩阵,所述八个寄存器中的数据分别替换为垂直变换运算矩阵中的八行数据;步骤G:针对垂直变换运算矩阵进行如下运算:rij=(hij+24)>>5,得到变换结果矩阵,其中,hij为垂直变换运算矩阵中的数据,rij为变换结果矩阵中的数据,i和j的取值范围为0-7。优选地,在步骤F中包括如下子步骤:步骤F0:将转置水平变换运算矩阵中的数据由16位转为32位,将转置水平变换运算矩阵中的每一行数据的前四个数据分别送入对应的寄存器中,转置水平变换运算矩阵中的每一行数据的后四个数据暂存于内存中;步骤F1:针对已经保存至八个寄存器中的数据进行垂直变换部分的蝶形算法的运算,得到垂直变换运算矩阵中的左半部分数据,然后将垂直变换运算矩阵中的左半部分数据暂存于内存中;步骤F2:将转置水平变换运算矩阵中的暂存于内存中的数据分别从内存中送进所述八个寄存器中;步骤F3:针对已经保存至八个寄存器中的数据进行垂直变换部分的蝶形算法的运算,得到垂直变换运算矩阵中的右半部分数据,将垂直变换运算矩阵中的左半部分数据和右半部分数据组合得到垂直变换运算矩阵。优选地,在水平变换部分的蝶形算法的运算和垂直变换部分的蝶形算法的运算中,针对需要分别进行相加和进行相减的两组保存于各自寄存器中的数据,执行如下运算步骤:将两个寄存器分别记为xmm0和xmm7,将xmm0中的数据记为x0,将xmm7中的数据记为x7,首先将xmm0与xmm7相加保存于xmm0中,然后将xmm0与xmm0相加保存于xmm7中,最后将xmm7减去xmm0保存于xmm7中;经过运算步骤后,x0+x7的结果保存于xmm0中,x0-x7的结果保存于xmm7中。优选地,在水平变换部分的蝶形算法的运算和垂直变换部分的蝶形算法的运算中,将需要与10相乘的保存于寄存器中的数据记为y,则针对y*10这一乘法运算执行如下运算步骤:将保存有数据y的寄存器记为xmm1,首先将数据y复制至另一寄存器中,将另一寄存器记为xmm2,然后将xmm2中的数据左移两位后与xmm1中的数据相加,相加结果保存于xmm1中,再将xmm1与自身相加;经过该运算步骤,使y*10的结果保存于xmm1中。方案二:基于AVS的并行反变换方法,包括以下步骤:步骤a:利用八个寄存器分别保存反量化矩阵中的八行数据,反量化矩阵中的数据本文档来自技高网
...
基于AVS的并行变换和反变换方法

【技术保护点】
基于AVS的并行变换方法,其特征在于,包括以下步骤:步骤A:利用两个寄存器分别并行读入八个当前像素值和八个预测像素值,利用低位交叉指令使当前像素值与预测像素值进行交叉得到第一交叉结果,以及使预测像素值与自身进行交叉得到第二交叉结果,将第一交叉结果减去第二交叉结果得到八个残差值并送进一个寄存器中,其中,当前像素值与预测像素值为8位数据,残差值为16位数据;步骤B:重复执行七次步骤A,得到64个残差值,组成8*8的残差矩阵,其中,每执行一次步骤A所得到的八个残差值为残差矩阵中的其中一行数据,八行数据分别保存于八个寄存器中;步骤C:结合低位交叉指令和高位交叉指令对残差矩阵进行转置得到转置残差矩阵,所述八个寄存器中的数据分别替换为转置残差矩阵中的八行数据;步骤D:针对转置残差矩阵中的数据进行水平变换部分的蝶形算法的运算,得到水平变换运算矩阵,所述八个寄存器中的数据分别替换为水平变换运算矩阵中的八行数据;步骤E:结合低位交叉指令和高位交叉指令对水平变换运算矩阵进行转置得到转置水平变换运算矩阵,所述八个寄存器中的数据分别替换为转置水平变换运算矩阵中的八行数据;步骤F:针对转置水平变换运算矩阵中的数据进行垂直变换部分的蝶形算法的运算,得到垂直变换运算矩阵,所述八个寄存器中的数据分别替换为垂直变换运算矩阵中的八行数据;步骤G:针对垂直变换运算矩阵进行如下运算:rij=(hij+24)>>5,得到变换结果矩阵,其中,hij为垂直变换运算矩阵中的数据,rij为变换结果矩阵中的数据,i和j的取值范围为0‑7。...

【技术特征摘要】
1.基于AVS的并行变换方法,其特征在于,包括以下步骤:步骤A:利用两个寄存器分别并行读入八个当前像素值和八个预测像素值,利用低位交叉指令使当前像素值与预测像素值进行交叉得到第一交叉结果,以及使预测像素值与自身进行交叉得到第二交叉结果,将第一交叉结果减去第二交叉结果得到八个残差值并送进一个寄存器中,其中,当前像素值与预测像素值为8位数据,残差值为16位数据;步骤B:重复执行七次步骤A,得到64个残差值,组成8*8的残差矩阵,其中,每执行一次步骤A所得到的八个残差值为残差矩阵中的其中一行数据,八行数据分别保存于八个寄存器中;步骤C:结合低位交叉指令和高位交叉指令对残差矩阵进行转置得到转置残差矩阵,所述八个寄存器中的数据分别替换为转置残差矩阵中的八行数据;步骤D:针对转置残差矩阵中的数据进行水平变换部分的蝶形算法的运算,得到水平变换运算矩阵,所述八个寄存器中的数据分别替换为水平变换运算矩阵中的八行数据;步骤E:结合低位交叉指令和高位交叉指令对水平变换运算矩阵进行转置得到转置水平变换运算矩阵,所述八个寄存器中的数据分别替换为转置水平变换运算矩阵中的八行数据;步骤F:针对转置水平变换运算矩阵中的数据进行垂直变换部分的蝶形算法的运算,得到垂直变换运算矩阵,所述八个寄存器中的数据分别替换为垂直变换运算矩阵中的八行数据;步骤G:针对垂直变换运算矩阵进行如下运算:rij=(hij+24)>>5,得到变换结果矩阵,其中,hij为垂直变换运算矩阵中的数据,rij为变换结果矩阵中的数据,i和j的取值范围为0-7;在步骤F中包括如下子步骤:步骤F0:将转置水平变换运算矩阵中的数据由16位转为32位,将转置水平变换运算矩阵中的每一行数据的前四个数据分别送入对应的寄存器中,转置水平变换运算矩阵中的每一行数据的后四个数据暂存于内存中;步骤F1:针对已经保存至八个寄存器中的数据进行垂直变换部分的蝶形算法的运算,得到垂直变换运算矩阵中的左半部分数据,然后将垂直变换运算矩阵中的左半部分数据暂存于内存中;步骤F2:将转置水平变换运算矩阵中的暂存于内存中的数据分别从内存中送进所述八个寄存器中;步骤F3:针对已经保存至八个寄存器中的数据进行垂直变换部分的蝶形算法的运算,得到垂直变换运算矩阵中的右半部分数据,将垂直变换运算矩阵中的左半部分数据和右半部分数据组合得到垂直变换运算矩阵。2.根据权利要求1所述的基于AVS的并行变换方法,其特征在于,在水平变换部分的蝶形算法的运算和垂直变换部分的蝶形算法的运算中,针对需要分别进行相加和进行相减的两组保存于各自寄存器中的数据,执行如下运算步骤:将两个寄存器分别记为xmm0和xmm7,将xmm0中的数据记为x0,将xmm7中的数据记为x7,首先将xmm0与xmm7相加保存于xmm0中,然后将xmm0与xmm0相加保存于xmm7中,最后将xmm7减去xmm0保存于xmm7中;经过运算步骤后,x0+x7的结果保存于xmm0中,x0-x7的结果保存于xmm7中。3.根据权利要求1所述的基于AVS的并行变换方法,其特征在于,在水平变换部分的蝶形算法的运算和垂直变换部分的蝶形算法的运算中,将需要与10相乘的保存于寄存器中的数据记为y,则针对y*10这一乘法运算执行如下运算步骤:将保存有数据y的寄存器记为xmm1,首先将数据y复制至另一寄存器中,将另一寄存器记为xmm2,然后将xmm2中的数据左移两位后与xmm1中的数据相加,相加结果保存于xmm1中,再将xmm1与自身相加;经过该运算步骤,使y*10的结果保存于xmm1中。4.基于AVS的并行反变换方法,其特征在于,包括以下步骤:步骤a:利用八个寄存器分别保存反量化矩阵中的八行数据,反量化矩阵中的数据为16位数据;步骤b:结合低位交叉指令和高位交叉指令对反量化矩阵进行转置得到...

【专利技术属性】
技术研发人员:叶广明
申请(专利权)人:广州柯维新数码科技有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1