CN104683800A - 基于avs的并行量化和反量化方法 - Google Patents
基于avs的并行量化和反量化方法 Download PDFInfo
- Publication number
- CN104683800A CN104683800A CN201510076280.9A CN201510076280A CN104683800A CN 104683800 A CN104683800 A CN 104683800A CN 201510076280 A CN201510076280 A CN 201510076280A CN 104683800 A CN104683800 A CN 104683800A
- Authority
- CN
- China
- Prior art keywords
- parameter
- inverse quantization
- iqshift
- formula
- matrix
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了基于AVS的并行量化和反量化方法,量化方法包括:分析量化公式中的参数,分别提取量化公式中的每个参数;分别将每个参数对应的8个值并行送入相应的寄存器中;利用保存有对应参数的寄存器对量化公式进行运算;获得同一行的8个量化结果;重复运算,依次获得8行量化结果。反量化方法包括:分析反量化公式中的参数,分别提取反量化公式中的每个参数;分别将每个参数对应的8个值并行送入相应的寄存器中;利用保存有对应参数的寄存器对反量化公式进行运算;获得同一行的8个反量化结果;重复运算,依次获得8行反量化结果。通过分别将量化和反量化中的参数并行放进寄存器中进行处理,实现高效率地得到量化结果和反量化结果。
Description
技术领域
本发明涉及数字视频编解码技术领域,具体涉及基于AVS(AudioVideo coding Standard)标准中,使用SIMD(Single InstructionMultiple Data)指令优化量化和反量化的方法。
背景技术
随着AVS标准在广播电视、互联网、机顶盒、监控等大规模产业化,在PC和嵌入式设备上播放和录制AVS文件要求越来越多,且都希望实时,由于AVS采用高复杂度算法获得高编码效率,因此,需要对编解码器进行有效的程序优化,才可能达到实时,画面流畅,播放和录制达到25fps,甚至30fps。
对编解码AVS码流分析,QUANT/DEQUANT耗时占很大比重,特别的,如果量化后的数据都为0,将可以不需要进行许多运算,优化好它们就能有效的提高编解码效率。现在的PC和嵌入式处理器芯片有SIMD指令,如:intel的mmx、sse和AMD的3D Now!,ARM的NEON,使用好这些SIMD指令,能有效地提高编解码速度。
量化公式如下:
如果cij大于等于0,则:
dij=(((cij*scale_m[i,j]+218)>>19)*Qp(qp)+qp_const)>>15;
如果cij小于0,则:
dij=-((((-cij*scale_m[i,j]+218)>>19)*Qp(qp)+qp_const)>>15);其中,cij为变换后的结果,dij为量化后的结果,scale_m[i,j]为标准规定的如下值:
Qp(qp)为标准规定的如下值,qp值大于等于0并且小于64:
qp_const是量化过程需要增加的偏差值,标准定义为:如果是I图像,则qp_const为(1<<15)*10/31,如果是P,B图像,则qp_const为(1<<15)*10/62。
基于AVS的量化过程简单理解就是缩小的过程,其过程为:将DCT变换后得到的8*8的矩阵系数,乘以标准中规定的scale_M[i,j]值;得到的值+(1<<18),然后再>>19;再乘以一个与量化值qp有关的一个系数矩阵Qp(qp)中对应的值,加上一个相对应的偏差值Qp_const,然后>>15得到量化结果。其中,Qp(qp)的值和qp_const的值在一次8*8量化运算中是不变的。
反量化公式如下:
如果cij大于等于0,则:
dij=(cij*IQTAB[qp]+(1<<(IQSHIFT[qp]-2)))>>(IQSHIFT[qp]-1);
如果cij小于0,则:
dij=-((-cij*IQTAB[qp]+(1<<(IQSHIFT[qp]-2)))>>(IQSHIFT[qp]-1));
其中,cij为量化后的结果,dij为反量化后的结果,IQTAB[qp]为标准规定的值,qp大于等于0且小于64,值如下:
IQSHIFT[qp]也为标准规定的值,qp大于等于0且小于64,值如下:
基于AVS的反量化过程简单理解就是放大的过程,其过程为:将量化后得到的系数矩阵,乘以IQTAB[qp];再加上一个与量化值qp有关的偏差值(1<<(IQSHIFT[qp]-2)),最后,将结果进行>>(IQSHIFT[qp]-1),得到反量化后的结果。
综上所述,进行8*8量化过程,需要有64次判断,128次乘法,128次加法,128次移位。进行8*8反量化过程,需要有64次判断,64次乘法,64次加法,64次移位。在编解码算法中,量化和反量化占有很大的耗时比,判断和乘法需要很多时钟周期,使编解码实时处理的效率低下。
发明内容
为了克服现有技术的不足,本发明的目的在于提供基于AVS的并行量化和反量化方法,使用SIMD指令,分别将量化和反量化中的参数并行放进寄存器中进行处理,实现高效率地得到量化结果和反量化结果。
为解决上述问题,本发明所采用的技术方案如下:
方案一:
基于AVS的并行量化方法,其特征在于,包括以下步骤:
步骤A:分析量化公式中的参数,分别提取量化公式中的每个参数,每个参数均为16位数据,参数数量包括5个,分别记为第一参数、第二参数、第三参数、第四参数和第五参数,第一参数位于第一矩阵内,第二参数位于第二矩阵内,第三参数、第四和第五参数为固定参数;
步骤B:分别将第一矩阵的当前行的8个第一参数和第二矩阵的当前行的8个第二参数并行送入相应的寄存器中,将8个第三参数、8个第四参数和8个第五参数亦分别并行送入相应的寄存器中;
步骤C:利用保存有对应参数的寄存器对量化公式进行运算;
步骤D:获得同一行的8个量化结果;
步骤E:重复执行8次步骤B、步骤C和步骤D,依次获得8行量化结果,得到8*8量化结果矩阵。
进一步地,在步骤B与步骤C之间还包括:
步骤B1:判断第一矩阵中的当前行的8个第一参数是否都为0,若是,则跳过步骤C的运算,在步骤D中直接获得8个量化结果,且8个量化结果均为0;否则执行步骤C。
进一步地,量化公式为:dij=(((cij*scale_m[i,j]+218)>>19)*Qp(qp)+qp_const)>>15,其中,dij为量化结果,cij为变换结果,i和j的取值范围为0-7;
在步骤A中,将量化公式进行等效转换,等效转换后的量化公式:dij=((((cij*scale_m[i,j]+22)>>3)*Qp(qp))<<1+qp_const<<1)>>16,其中,cij为第一参数,scale_m[i,j]为第二参数,22为第三参数,Qp(qp)为第四参数,qp_const为第五参数;
在步骤C中,利用保存有对应参数的寄存器对等效转换后的量化公式进行运算,首先取cij*scale_m[i,j]部分的高16位数据,再取2*((cij*scale_m[i,j]+22)>>3)*Qp(qp)部分的高16位数据和低16位数据,将2*((cij*scale_m[i,j]+22)>>3)*Qp(qp)部分的低16位数据与2*qp_const进行饱和相加,若饱和相加结果大于216,则向2*((cij*scale_m[i,j]+22)>>3)*Qp(qp)部分的高16位数据进一位,否则不需要进位。
进一步地,在步骤A中,判断cij是否为负数,若是,则去掉符号位,将cij转为正数,否则不变;在步骤D中,若步骤A中的cij为负数,则在对应的量化结果中还原去掉的符号位,将该量化结果转为负数。
进一步地,寄存器为SSE2中的xmm寄存器。
方案二:
基于AVS的并行反量化方法,包括以下步骤:
步骤A:分析反量化公式中的参数,分别提取反量化公式中的每个参数,每个参数均为16位数据,参数数量包括3个,分别记为第一参数、第二参数和第三参数,第一参数位于第一矩阵内,第二参数和第三参数为固定参数;
步骤B:将第一矩阵的当前行的8个第一参数,以及8个相同的第二参数和8个相同的第三参数分别并行送入相应的寄存器中;
步骤C:利用保存有对应参数的寄存器对反量化公式进行运算;
步骤D:获得同一行的8个反量化结果;
步骤E:重复执行8次步骤B、步骤C和步骤D,依次获得8行反量化结果,得到8*8反量化结果矩阵。
进一步地,在步骤B与步骤C之间还包括:
步骤B1:判断第一矩阵中的当前行的8个第一参数是否都为0,若是,则跳过步骤C的运算,在步骤D中直接获得8个反量化结果,且8个反量化结果均为0;否则执行步骤C。
进一步地,反量化公式为:dij=(cij*IQTAB[qp]+(1<<(IQSHIFT[qp]-2)))>>(IQSHIFT[qp]-1),其中,dij为反量化结果,cij为量化结果,i和j的取值范围为0-7;
在步骤A中,将反量化公式进行等效转换,等效转换后的反量化公式为:dij=(cij*IQTAB[qp]<<(17-IQSHIFT[qp])+(1<<(IQSHIFT[qp]-2))<<(17-IQSHIFT[qp]))>>16,其中,cij为第一参数,IQTAB[qp]为第二参数,(1<<(IQSHIFT[qp]-2))为第三参数;
在步骤C中,利用保存有对应参数的寄存器对等效转换后的反量化公式进行运算,取cij*IQTAB[qp]<<(17-IQSHIFT[qp])部分的高16位和低16位数据,将cij*IQTAB[qp]<<(17-IQSHIFT[qp])部分的低16位数据与(1<<(IQSHIFT[qp]-2))<<(17-IQSHIFT[qp])部分进行饱和相加,若饱和相加结果大于216,则向cij*IQTAB[qp]<<(17-IQSHIFT[qp])部分的高16位数据进一位,否则不需要进位。
进一步地,在步骤A中,判断cij是否为负数,若是,则去掉符号位,将cij转为正数,否则不变;在步骤D中,若步骤A中的cij为负数,则在对应的反量化结果中还原去掉的符号位,将该量化结果转为负数。
进一步地,寄存器为SSE2中的xmm寄存器。
相比现有技术,本发明的有益效果在于:利用寄存器每次对8个数据进行运算,只需要执行8次便能得到8*8量化结果矩阵/8*8反量化结果矩阵;通过将量化公式/反量化公式进行等效转换,使等效转换后的量化公式/反量化公式不需要进行32位运算,利用乘法取高位和乘法取低位指令便能完成运算,而且运算均在寄存器中完成,不需要经过内存,提高了运算效率;通过判断变换结果矩阵中/量化结果矩阵中的一行数据是否为0,避免对全为0的数据进行运算,节省了运算资源和增加了效率。
附图说明
图1为本发明的基于AVS的并行量化方法的流程图。
图2为本发明的基于AVS的并行反量化方法的流程图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述:
实施例1:
参考图1为基于AVS的并行量化方法,包括以下步骤:
步骤A:针对8*8矩阵分析量化公式中的参数,分别提取量化公式中的每个参数,每个参数均为16位数据,参数数量包括5个,其中,第一参数位于第一矩阵内,第二参数位于第二矩阵内,第三参数、第四和第五参数为固定参数。
本方案的量化是针对8*8变换结果矩阵进行量化,量化公式为:dij=(((cij*scale_m[i,j]+218)>>19)*Qp(qp)+qp_const)>>15,其中,dij为量化结果,cij为变换结果,i和j的取值范围为0-7,在同一个8*8量化过程中,cij根据i和j的取值在变换结果矩阵(即第一矩阵)内取值,变换结果矩阵在不同的8*8量化过程中是不同的;scale_m[i,j]也是根据i和j的取值在相应的scale_m矩阵(即第二矩阵)内取值,scale_m矩阵内的各个值在任意一个8*8量化运算中都是固定不变的,例如scale_m[0,0]为32768,scale_m[0,1]为37958;Qp(qp)的取值是由qp值确定,而qp值在执行该次8*8量化时就已经确定,而且是同一个值,例如,qp=0,则Qp(qp)就为32768;qp_const为偏差值,在执行该次8*8量化运算时,经过分析如果是帧内编码时,即为I图像,则qp_const为(1<<15)*10/31=10570,如果是帧间编码时,即为P,B图像,则qp_const为(1<<15)*10/62=5285。值得说明的是,公式中的>>表示右移运算,<<表示左移运算。
在本方案中,每个参数均为16位数据,一个寄存器的容量为128位,因此可以同时存储8个数据。由于运算中涉及到乘法,两个16位数据相乘得到的是32位的数据,如果要进行32位的数据处理就需要在内存中处理,而且还要转换,效率比寄存器低,因此如果能在运算中进行合理的移位,通过利用SIMD指令中的乘法取高16位指令和乘法取低16位指令完成量化公式的运算,使运算均在寄存器中执行,就能提高效率,降低复杂度。
因此,在步骤A中,还包括将量化公式进行等效转换,下面对等效转换的原理进行分析:首先分析(cij*scale_m[i,j]+218)>>19这一部分,可以在后面的运算步骤中利用相乘取高位指令得到cij*scale_m[i,j]的高16位数据;218相当于1<<18需要右移16位,即(1<<18)>>16得到1<<2,相当于22;而>>19则需要变为>>(19-16),即>>3;(cij*scale_m[i,j]+218)>>19实际上等效转换为(cij*scale_m[i,j]+22)>>3,cij*scale_m[i,j]这一部分则要在后面的运算中利用相乘取高位的指令,经过这样的等效转换,就可以直接对16位数据运算,不需要转换到32位,提高了效率;
为了使下面的分析更加直观清楚,将(cij*scale_m[i,j]+218)>>19记为X,下面就针对(X*Qp(qp)+qp_const)>>15进行分析,(X*Qp(qp)+qp_const)>>15可以等效转换为((X*Qp(qp))<<1+qp_const<<1)>>16,则在后面的运算步骤中就利用相乘取高位16位指令取(X*Qp(qp))<<1的高16位,再利用相乘取低位指令取(X*Qp(qp))<<1的低16位与qp_const<<1进行饱和相加,如果饱和相加的值大于216,则向(X*Qp(qp))<<1的高16位进一位便可得到量化结果。
由上面的分析可得,dij=(((cij*scale_m[i,j]+218)>>19)*Qp(qp)+qp_const)>>15等效转换为dij=((((cij*scale_m[i,j]+22)>>3)*Qp(qp))<<1+qp_const<<1)>>16,其中,cij为第一参数,scale_m[i,j]为第二参数,22为第三参数,Qp(qp)为第四参数,qp_const为第五参数。
步骤B:分别将第一矩阵的当前行的8个第一参数和第二矩阵的当前行的8个第二参数并行送入相应的寄存器中,将8个第三参数、8个第四参数和8个第五参数亦分别并行送入相应的寄存器中。
该步骤就是将上面的几个参数分别送入相应的寄存器中,寄存器为SSE2中的xmm寄存器。例如,将变换结果矩阵中的第一行的8个cij送进xmm1中,将scale_m矩阵中的第一行的8个scale_m[i,j]送进xmm3中,将8个22送进xmm4中,将8个相同的Qp(qp)值送进xmm5中,将8个相同的qp_const值送进xmm6中。这样一次运算就能同时处理8个数据,得到8个量化结果。
另外,由于在后面的运算过程中均为无符号运算,但是cij也可能会是负数,因此为了保证无符号运算,需要在该步骤中将负数的符号位去掉,转为正数进行运算。其将负数转为正数的伪指令如下:
pxor xmm0,xmm0;//设置xmm0=0。
pcmpgtw xmm0,xmm1;//判断xmm0是否大于xmm1,xmm1为cij。
pxor xmm1,xmm0;//xmm1与xmm0异或。
psubw xmm1,xmm0;//xmm1减去xmm0。
步骤B1:判断第一矩阵中的当前行的8个第一参数是否都为0,若是,则跳过步骤C的运算,在步骤D中直接获得8个量化结果,且8个量化结果均为0;否则执行步骤C。
如果寄存器中的8个cij为0,那么这8个cij经过量化后的值也必定为0,就不需要经过后面的运算了。因此,在该步骤中,如果判断出8个数据均为0,则可以节省时间,提高效率。
步骤C:利用保存有对应参数的寄存器对量化公式进行运算。在该步骤中,就利用步骤B中保存了参数的寄存器对经过等效转换后的量化公式进行运算。在运算过程中,两次乘法一共需要取两次高16位数据,取一次低16位数据,具体的运算原理在步骤A中的等效转换分析中有详细说明。
步骤D:获得同一行的8个量化结果。如果量化结果中原本所对应的cij为负数的,则在该量化结果中还原去掉的符号位,将该量化结果转为负数,可以通过如下伪指令再转换为负数:
pxor xmm1,xmm0;//xmm1与xmm0异或。
psubw xmm1,xmm0;//xmm1减去xmm0。
步骤E:重复执行8次步骤B至步骤D,依次获得8行量化结果,得到8*8量化结果矩阵。
进一步地,在得到8*8量化结果矩阵,即得到64个量化值后,可以对64个量化值进行判断是否64个数据均为0,如果8*8量化结果矩阵中的数据均为0,则可以省去后面的反量化等许多步骤。通过如下伪代码实现判断,其中xmm1为量化结果:
pxor xmm2,xmm2;//初始化xmm2都是0。
por xmm2,xmm1;//每次对8个16位的值进行或运算,进行8次por指令,其中xmm2为保存的结果。
通过上述的步骤进行量化有如下优点:利用寄存器每次对8个数据进行运算,只需要执行8次便能得到8*8量化结果矩阵;通过将量化公式进行等效转换,使等效转换后的量化公式不需要进行32位运算,利用乘法取高位和乘法取低位指令便能完成运算,而且运算均在寄存器中完成,不需要经过内存,提高了运算效率;通过判断变换结果矩阵中的一行数据是否为0,避免对全为0的数据进行运算,节省了运算资源和增加了效率。
实施例2:
参考图2为基于AVS的并行反量化方法,包括以下步骤:
步骤A:针对8*8矩阵分析反量化公式中的参数,分别提取反量化公式中的每个参数,每个参数均为16位数据,参数数量包括3个,其中,第一参数位于第一矩阵内,第二参数和第三参数为固定参数。
本方案的反量化是针对8*8量化结果矩阵进行反量化,反量化公式为:dij=(cij*IQTAB[qp]+(1<<(IQSHIFT[qp]-2)))>>(IQSHIFT[qp]-1),其中,dij为反量化结果,cij为量化结果,i和j的取值范围为0-7,在同一个8*8反量化过程中,cij根据i和j的取值在量化结果矩阵(即第一矩阵)内取值,量化结果矩阵在不同的8*8反量化过程中是不同的;IQTAB[qp]和IQSHIFT[qp]的取值由qp值确定,而qp值在执行一次8*8反量化时就已经确定,而且是同一个值,例如,qp=1,则IQTAB[qp]为36061,IQSHIFT[qp]为15。
在本方案中,每个参数均为16位数据,一个寄存器的容量为128位,因此可以同时存储8个数据。由于运算中涉及到乘法,两个16位数据相乘得到的是32位的数据,如果要进行32位的数据处理就需要在内存中处理,而且还要转换,效率比寄存器低,因此如果能在运算中进行合理的移位,通过利用SIMD指令中的乘法取高16位指令和乘法取低16位指令完成量化公式的运算,使运算均在寄存器中执行,就能提高效率,降低复杂度。
因此,在步骤A中,还包括将反量化公式进行等效转换,下面对等效转换的原理进行分析:首先分析IQSHIFT[qp]-1,为了使运算简化,就将IQSHIFT[qp]-1设为16,则(cij*IQTAB[qp]+(1<<(IQSHIFT[qp]-2)))这部分就需要相应地变为:(cij*IQTAB[qp]<<(17-IQSHIFT[qp])+(1<<(IQSHIFT[qp]-2))<<(17-IQSHIFT[qp])),因此等效变换后的反量化公式为:dij=(cij*IQTAB[qp]<<(17-IQSHIFT[qp])+(1<<(IQSHIFT[qp]-2))<<(17-IQSHIFT[qp]))>>16,其中,cij为第一参数,IQTAB[qp]为第二参数,(1<<(IQSHIFT[qp]-2))为第三参数。具体在设计算法时,可以利用16减去(IQSHIFT[qp]-1)得到一个分支值,根据该分支值跳转至与该分支值对应的分支中,不同的分支中有对应的等效转换后的反量化公式,例如,16减去(13-1)等于4,则跳转至4对应的分支中,该分支中的反量化公式为:dij=(cij*IQTAB[qp]<<4+(1<<(IQSHIFT[qp]-2))<<4)>>16。
经过上面的反量化公式的等效转换后,在后面的运算步骤中就可以利用相乘取高位指令取cij*IQTAB[qp]<<(17-IQSHIFT[qp])的高16位,再利用相乘取低位指令取cij*IQTAB[qp]<<(17-IQSHIFT[qp])的低16位与(1<<(IQSHIFT[qp]-2))<<(17-IQSHIFT[qp])进行饱和相加,如果饱和相加的值大于216,则向cij*IQTAB[qp]<<(17-IQSHIFT[qp])的高16位进一位便可得到反量化结果。
步骤B:将第一矩阵的当前行的8个第一参数,以及8个相同的第二参数和8个相同的第三参数分别并行送入相应的寄存器中。该步骤就是将上面的几个参数分别送入相应的寄存器中,寄存器为SSE2中的xmm寄存器。例如,将量化结果矩阵中的第一行的8个cij送进xmm1中,将8个相同的IQTAB[qp]值送进xmm2中,将8个(1<<(IQSHIFT[qp]-2))值送进xmm3中。这样一次运算就能同时处理8个数据,得到8个反量化结果。
另外,由于在后面的运算过程中均为无符号运算,但是cij也可能会是负数,因此为了保证无符号运算,需要在该步骤中将负数的符号位去掉,转为正数进行运算。
步骤B1:判断第一矩阵中的当前行的8个第一参数是否都为0,若是,则跳过步骤C的运算,在步骤D中直接获得8个反量化结果,且8个反量化结果均为0;否则执行步骤C。
如果寄存器中的8个量化结果均为0,那么这8个量化结果经过反量化后的值也必定为0,就不需要经过后面的运算了。因此,在该步骤中,如果判断出8个量化结果均为0,则可以节省时间,提高效率。
步骤C:利用保存有对应参数的寄存器对反量化公式进行运算。在该步骤中,就利用步骤B中保存了参数的寄存器对经过等效转换后的反量化公式进行运算。在运算过程中,需要取一次高16位数据和低16位数据,具体的运算原理在步骤A中的等效转换分析中有详细说明。
步骤D:获得同一行的8个反量化结果。如果反量化结果中原本所对应的cij为负数的,则在该反量化结果中还原去掉的符号位,将该量化结果转为负数。
步骤E:重复执行8次步骤B至步骤D,依次获得8行反量化结果,得到8*8反量化结果矩阵。
通过上述的步骤进行反量化有如下优点:利用寄存器每次对8个数据进行运算,只需要执行8次便能得到8*8反量化结果矩阵;通过将反量化公式进行等效转换,使等效转换后的反量化公式不需要进行32位运算,利用乘法取高位和乘法取低位指令便能完成运算,而且运算均在寄存器中完成,不需要经过内存,提高了运算效率;通过判断量化结果矩阵中的一行数据是否为0,避免对全为0的数据进行运算,节省了运算资源和增加了效率。
针对实施例1和实施例2中的方案分别与现有技术进行对比,对比条件是intel core i7 cpu,4G内存,intel vTune使用的时间为60秒,得出如下表格数据:
从表格中的数据可以看出,使用本发明的方法,能够有效的提高编解码速度。本发明的量化运算只有现有技术的量化运算的15%左右;反量化运算只有现有技术的反量化运算的30%左右。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。
Claims (10)
1.基于AVS的并行量化方法,其特征在于,包括以下步骤:
步骤A:分析量化公式中的参数,分别提取量化公式中的每个参数,每个参数均为16位数据,参数数量包括5个,分别记为第一参数、第二参数、第三参数、第四参数和第五参数,第一参数位于第一矩阵内,第二参数位于第二矩阵内,第三参数、第四和第五参数为固定参数;
步骤B:分别将第一矩阵的当前行的8个第一参数和第二矩阵的当前行的8个第二参数并行送入相应的寄存器中,将8个第三参数、8个第四参数和8个第五参数亦分别并行送入相应的寄存器中;
步骤C:利用保存有对应参数的寄存器对量化公式进行运算;
步骤D:获得同一行的8个量化结果;
步骤E:重复执行8次步骤B至步骤D,依次获得8行量化结果,得到8*8量化结果矩阵。
2.根据权利要求1所述的基于AVS的并行量化方法,其特征在于,在步骤B与步骤C之间还包括:
步骤B1:判断第一矩阵中的当前行的8个第一参数是否都为0,若是,则跳过步骤C的运算,在步骤D中直接获得8个量化结果,且8个量化结果均为0;否则执行步骤C。
3.根据权利要求1所述的基于AVS的并行量化方法,其特征在于,量化公式为:dij=(((cij*scale_m[i,j]+218)>>19)*Qp(qp)+qp_const)>>15,其中,dij为量化结果,cij为变换结果,i和j的取值范围为0-7;
在步骤A中,将量化公式进行等效转换,等效转换后的量化公式:dij=((((cij*scale_m[i,j]+22)>>3)*Qp(qp))<<1+qp_const<<1)>>16,其中,第一参数为cij,第二参数为scale_m[i,j],第三参数为22,第四参数为Qp(qp),第五参数为qp_const;
在步骤C中,利用保存有对应参数的寄存器对等效转换后的量化公式进行运算,首先取cij*scale_m[i,j]部分的高16位数据,再取2*((cij*scale_m[i,j]+22)>>3)*Qp(qp)部分的高16位数据和低16位数据,将2*((cij*scale_m[i,j]+22)>>3)*Qp(qp)部分的低16位数据与2*qp_cons t进行饱和相加,若饱和相加结果大于216,则向2*((cij*scale_m[i,j]+22)>>3)*Qp(qp)部分的高16位数据进一位,否则不需要进位。
4.根据权利要求3所述的基于AVS的并行量化方法,其特征在于,在步骤B中,将为负数的第一参数的符号位去掉,使该第一参数转为正数;在步骤D中,针对步骤B中为负数的第一参数,在对应的量化结果中还原去掉的符号位,将该量化结果转为负数。
5.根据权利要求1所述的基于AVS的并行量化方法,其特征在于,寄存器为SSE2中的xmm寄存器。
6.基于AVS的并行反量化方法,其特征在于,包括以下步骤:
步骤A:分析反量化公式中的参数,分别提取反量化公式中的每个参数,每个参数均为16位数据,参数数量包括3个,分别记为第一参数、第二参数和第三参数,第一参数位于第一矩阵内,第二参数和第三参数为固定参数;
步骤B:将第一矩阵的当前行的8个第一参数,以及8个相同的第二参数和8个相同的第三参数分别并行送入相应的寄存器中;
步骤C:利用保存有对应参数的寄存器对反量化公式进行运算;
步骤D:获得同一行的8个反量化结果;
步骤E:重复执行8次步骤B、步骤C和步骤D,依次获得8行反量化结果,得到8*8反量化结果矩阵。
7.根据权利要求6所述的基于AVS的并行反量化方法,其特征在于,在步骤B与步骤C之间还包括:
步骤B1:判断第一矩阵中的当前行的8个第一参数是否都为0,若是,则跳过步骤C的运算,在步骤D中直接获得8个反量化结果,且8个反量化结果均为0;否则执行步骤C。
8.根据权利要求6所述的基于AVS的并行反量化方法,其特征在于,反量化公式为:dij=(cij*IQTAB[qp]+(1<<(IQSHIFT[qp]-2)))>>(IQSHIFT[qp]-1),其中,dij为反量化结果,cij为量化结果,i和j的取值范围为0-7;
在步骤A中,将反量化公式进行等效转换,等效转换后的反量化公式为:dij=(cij*IQTAB[qp]<<(17-IQSHIFT[qp])+(1<<(IQSHIFT[qp]-2))<<(17-IQSHIFT[qp]))>>16,其中,cij为第一参数,IQTAB[qp]为第二参数,(1<<(IQSHIFT[qp]-2))为第三参数;
在步骤C中,利用保存有对应参数的寄存器对等效转换后的反量化公式进行运算,取cij*IQTAB[qp]<<(17-IQSHIFT[qp])部分的高16位和低16位数据,将cij*IQTAB[qp]<<(17-IQSHIFT[qp])部分的低16位数据与(1<<(IQSHIFT[qp]-2))<<(17-IQSHIFT[qp])部分进行饱和相加,若饱和相加结果大于216,则向cij*IQTAB[qp]<<(17-IQSHIFT[qp])部分的高16位数据进一位,否则不需要进位。
9.根据权利要求8所述的基于AVS的并行反量化方法,其特征在于,在步骤B中,将为负数的第一参数的符号位去掉,使该第一参数转为正数;在步骤D中,针对步骤B中为负数的第一参数,在对应的量化结果中还原去掉的符号位,将该量化结果转为负数。
10.根据权利要求6所述的基于AVS的并行反量化方法,其特征在于,寄存器为SSE2中的xmm寄存器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510076280.9A CN104683800B (zh) | 2015-02-11 | 2015-02-11 | 基于avs的并行量化和反量化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510076280.9A CN104683800B (zh) | 2015-02-11 | 2015-02-11 | 基于avs的并行量化和反量化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104683800A true CN104683800A (zh) | 2015-06-03 |
CN104683800B CN104683800B (zh) | 2017-12-15 |
Family
ID=53318287
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510076280.9A Active CN104683800B (zh) | 2015-02-11 | 2015-02-11 | 基于avs的并行量化和反量化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104683800B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105898334A (zh) * | 2016-06-22 | 2016-08-24 | 合肥工业大学 | 一种应用于视频编解码的dc预测电路及其方法 |
CN110858900A (zh) * | 2018-08-24 | 2020-03-03 | 上海天荷电子信息有限公司 | 复用精简反量化乘法因子和位移表的数据压缩方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1856997A (zh) * | 2003-09-24 | 2006-11-01 | 德州仪器公司 | 8×8变换及量化 |
CN1905676A (zh) * | 2006-08-07 | 2007-01-31 | 清华大学 | 一种基于合并处理的反量化方法及其装置 |
US20070053428A1 (en) * | 2001-03-30 | 2007-03-08 | Vixs Systems, Inc. | Managed degradation of a video stream |
CN101188761A (zh) * | 2007-11-30 | 2008-05-28 | 上海广电(集团)有限公司中央研究院 | Avs标准中基于并行处理来优化dct快速算法的方法 |
CN101860745A (zh) * | 2009-04-08 | 2010-10-13 | 何青帝 | 一种视频监控系统中的变换量化优化方法 |
-
2015
- 2015-02-11 CN CN201510076280.9A patent/CN104683800B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070053428A1 (en) * | 2001-03-30 | 2007-03-08 | Vixs Systems, Inc. | Managed degradation of a video stream |
CN1856997A (zh) * | 2003-09-24 | 2006-11-01 | 德州仪器公司 | 8×8变换及量化 |
CN1905676A (zh) * | 2006-08-07 | 2007-01-31 | 清华大学 | 一种基于合并处理的反量化方法及其装置 |
CN101188761A (zh) * | 2007-11-30 | 2008-05-28 | 上海广电(集团)有限公司中央研究院 | Avs标准中基于并行处理来优化dct快速算法的方法 |
CN101860745A (zh) * | 2009-04-08 | 2010-10-13 | 何青帝 | 一种视频监控系统中的变换量化优化方法 |
Non-Patent Citations (1)
Title |
---|
付永庆: "《基于FPGA的H_264解码核的实现》", 《应用科技》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105898334A (zh) * | 2016-06-22 | 2016-08-24 | 合肥工业大学 | 一种应用于视频编解码的dc预测电路及其方法 |
CN105898334B (zh) * | 2016-06-22 | 2017-12-05 | 合肥工业大学 | 一种应用于视频编解码的dc预测电路及其方法 |
CN110858900A (zh) * | 2018-08-24 | 2020-03-03 | 上海天荷电子信息有限公司 | 复用精简反量化乘法因子和位移表的数据压缩方法和装置 |
CN110858900B (zh) * | 2018-08-24 | 2022-08-05 | 上海天荷电子信息有限公司 | 复用精简反量化乘法因子和位移表的数据压缩方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104683800B (zh) | 2017-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105681807A (zh) | 一种基于h264协议的分像素运动矢量计算方法和装置 | |
Khemiri et al. | Optimisation of HEVC motion estimation exploiting SAD and SSD GPU‐based implementation | |
CN107154062A (zh) | 一种WebP有损压缩算法的实现方法、装置及系统 | |
CN101188761A (zh) | Avs标准中基于并行处理来优化dct快速算法的方法 | |
CN104469488B (zh) | 视频解码方法及系统 | |
CN103929649A (zh) | 一种视频压缩感知的重建方法 | |
CN102932643B (zh) | 一种适用于hevc标准的扩展可变块运动估计电路 | |
CN102572430A (zh) | 一种基于可重构技术的h.264去块滤波算法的实现方法 | |
CN104683800A (zh) | 基于avs的并行量化和反量化方法 | |
CN105163126A (zh) | 一种基于hevc协议的硬件解码方法和装置 | |
CN104378642A (zh) | 一种基于cuda的h.264分数像素快速插值方法 | |
CN104320668B (zh) | Hevc/h.265的dct变换和反变换的simd优化方法 | |
WO2022000806A1 (zh) | 一种数据采集的方法、系统、装置、终端设备及介质 | |
CN106231307B (zh) | 一种图像压缩帧内编码预测方法及其硬件实现 | |
CN105100799A (zh) | 一种减少hevc编码器中帧内编码时延的方法 | |
CN104683817A (zh) | 基于avs的并行变换和反变换方法 | |
CN103248885B (zh) | 帧内图像预测编解码方法及视频编解码器 | |
CN107172425B (zh) | 缩略图生成方法、装置及终端设备 | |
CN104185030A (zh) | 基于gpu的jpeg2000图像解压缩实现方法 | |
Doan et al. | Multi-asip based parallel and scalable implementation of motion estimation kernel for high definition videos | |
Wang et al. | An efficient deep learning accelerator architecture for compressed video analysis | |
Shan et al. | All phase discrete sine biorthogonal transform and its application in JPEG-like image coding using GPU | |
CN112738522A (zh) | 视频编码方法、装置 | |
Pham-Quoc | FPGA-Based Hardware/Software Codesign for Video Encoder on IoT Edge Platforms | |
CN106817583B (zh) | 一种hevc sao计算方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |