一种冗余编码的方法、装置、设备及计算机可读存储介质
技术领域
本申请涉及编码领域,特别涉及一种冗余编码的方法、装置、设备及计算机可读存储介质。
背景技术
在视频传输网络中,在传送至译码器端时,视频数据时常会丢失。这可能是由网络拥塞、信道衰落和干扰、接收机缓存器溢出等多种原因所导致的。为了将终端用户的视觉体验保持在一定水平,编码器通常以多种方式为比特流增加容错的能力。
在国际标准化组织/国际电工委员会(ISO/IEC)运动图像专家组-4(MPEG-4)第10部分的高级视频编码(AVC)标准/国际电信联盟的电信部门(ITU-T)的H.264建议(以下称“MPEG-4AVC标准”)中介绍了一种新工具,冗余切片(redundant slice),用以提高视频容错的健壮性。冗余切片提出一种利用视频编码器增加源冗余的方式。利用冗余切片编码,以可能不同于主要编码图像的编码参数对图像的冗余表示进行编码。在译码器处,当主要切片丢失,但其冗余切片可用时,该译码器通过对冗余切片进行译码的方式重构图像,进而恢复出部分或全部的丢失信息。
然而,冗余切片所提供的容错功能是以额外的比特率为代价的。冗余切片编码的低效设计会消耗大量比特率,同时仅提供有限的降低视频失真的能力,这是因为冗余编码过程含有大量的乘法运算,占用CPU资源比重很大,使得冗余编码的效率较低。
因此,如何提高冗余编码的效率是本领域技术人员目前需要解决的技术问题。
发明内容
本申请的目的是提供一种冗余编码的方法、装置、设备及计算机可读存储介质,用于提高冗余编码的效率。
为解决上述技术问题,本申请提供一种冗余编码的方法,该方法包括:
在有限域空间内构造乘法表;
接收输入的待编码数据;
确定预设冗余编码算法对所述待编码数据的编码计算过程;
利用所述乘法表对所述编码计算过程中的乘法运算进行查表运算,从而得到所述乘法运算的运算结果。
可选的,所述在有限域空间内构造乘法表,包括:
在GF(2^8)有限域空间内构造256*16大小的低四位乘法表和256*16大小的高四位乘法表。
可选的,利用所述乘法表对所述编码计算过程中的乘法运算进行查表运算,包括:
将所述低四位乘法表和所述高四位乘法表加载到SIMD寄存器中;
调用所述SIMD寄存器对所述编码计算过程中的乘法运算进行查表运算。
可选的,当所述编码计算过程中乘法运算的第一因数及第二因数均为单字节数据时,调用所述SIMD寄存器对所述编码计算过程中的乘法运算进行查表运算,包括:
确定所述编码计算过程中乘法运算的第一因数及第二因数;
将所述第一因数的高四位清零得到第三因数;将所述第一因数的低四位清零,并将所述第一因数的高四位右移四位得到第四因数;
依据所述低四位乘法表对所述第三因数与第二因数的乘法进行查表运算,以确定所述第一因数的低四位与所述第二因数的低乘积;
依据所述高四位乘法表对所述第四因数与所述第二因数的乘法进行查表运算,以确定所述第一因数的高四位与所述第二因数的高乘积;
对所述低乘积及所述高乘积进行异或运算,得到所述第一因数与所述第二因数的乘积结果。
可选的,所述SIMD寄存器为NEON寄存器。
可选的,当所述编码计算过程中乘法运算的第一因数为数组数据,第二因数为单字节数据时,调用所述SIMD寄存器对所述编码计算过程中的乘法运算进行查表运算,包括:
将所述第一因数中的每个字节的高四位清零得到第五因数;
将所述第一因数中的每个字节的低四位清零,并将所述第一因数中的每个字节的高四位右移到低4位,得到第六因数;
依据所述低四位乘法表对所述第五因数与所述第二因数的乘法进行查表运算,以确定所述第一因数的低四位与所述第二因数的所述低乘积;依据所述高四位乘法表对所述第六因数与所述第二因数的乘法进行查表运算,以确定所述第一因数的高四位与所述第二因数的所述高乘积;
对所述低乘积及所述高乘积进行异或运算,得到所述第一因数与所述第二因数的所述乘积结果。
可选的,当利用所述预设冗余编码算法对所述待编码数据进行编码计算时,还包括:
调用所述SIMD寄存器完成所述编码计算过程中的加法运算。
本申请还提供一种冗余编码的装置,该装置包括:
构造模块,用于在有限域空间内构造乘法表;
接收模块,用于接收输入的待编码数据;
确定模块,用于确定预设冗余编码算法对所述待编码数据的编码计算过程;
乘法运算模块,用于利用所述乘法表对所述编码计算过程中的乘法运算进行查表运算,从而得到所述乘法运算的运算结果。
本申请还提供一种冗余编码设备,所述冗余编码设备包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的冗余编码程序,所述冗余编码程序被所述处理器执行时实现如上述任一项所述的冗余编码的方法的步骤。
本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有冗余编码程序,所述冗余编码程序可被一个或者多个处理器执行,以实现如上述任一项所述的冗余编码的方法的步骤。
本申请所提供冗余编码的方法,包括:在有限域空间内构造乘法表;接收输入的待编码数据;确定预设冗余编码算法对待编码数据的编码计算过程;利用乘法表对编码计算过程中的乘法运算进行查表运算,从而得到乘法运算的运算结果。
本申请所提供的技术方案,通过在有限域空间内构造乘法表,并确定预设冗余编码算法对待编码数据的编码计算过程,然后利用乘法表对编码计算过程中的乘法运算进行查表运算,从而得到乘法运算的运算结果,充分的利用有限域的乘法运算特点,将乘法运算转换成查表运算,大幅提升了冗余编码的效率,同时减少了对CPU资源的消耗,使得在计算资源有限的设备上也能进行冗余编码。本申请同时还提供了一种冗余编码的装置、设备及计算机可读存储介质,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例所提供的一种冗余编码的方法的流程图;
图2为图1所提供的一种冗余编码的方法中S105的一种实际表现方式的流程图;
图3为图2中步骤S202的一种实际表现方式的流程图;
图4为图2中步骤S202的另一种实际表现方式的流程图;
图5为本申请实施例所提供的一种冗余编码的装置的结构图;
图6为本申请实施例所提供的另一种冗余编码的装置的结构图;
图7为本申请实施例所提供的一种冗余编码设备的结构图。
具体实施方式
本申请的核心是提供一种冗余编码的方法、装置、设备及计算机可读存储介质,用于提高冗余编码的效率。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1为本申请实施例所提供的一种冗余编码的方法的流程图。
其具体包括如下步骤:
S101:在有限域空间内构造乘法表;
基于冗余编码过程中含有大量的乘法运算,占用CPU资源比重很大,如果只采用编译器的优化选项并不能大幅提升编解码的效率,故本申请提供了一种冗余编码的方法,用于解决上述问题;
有限域亦称伽罗瓦域(galois field),是仅含有限个元素的域。有限域的特征数必为某一素数p,因此它含的素域同构于Zp。若F是特征为p的有限域,则F中元素的个数为pn,n为某一正整数。元素个数相同的有限域是同构的。因此,通常用GF(pn)表示pn元的有限域。GF(pn)的乘法群是(pn-1)阶的循环群。有限域在近代编码、计算机理论、组合数学等各方面有着广泛的应用。
可选的,为方便计算,这里提到的有限域具体可以为GF(2^8);
本申请在有限域空间内构造乘法表,其目的在于将编码过程中的乘法运算转换到有限域空间内进行,这样可以将乘法运算转换成查表运算,减少对CPU资源的消耗;
优选的,为使乘法表能够加载到SIMD寄存器中进行运算,这里提到的在有限域空间内构造乘法表,其具体可以为:
在GF(2^8)有限域空间内构造256*16大小的低四位乘法表和256*16大小的高四位乘法表;
这使得单字节数据的乘法运算能够转换成两次查表运算结合一次异或运算,而表的大小为16字节刚好可以加载到SIMD寄存器中进行运算,减少了资源的消耗。
S102:接收输入的待编码数据;
S103:确定预设冗余编码算法对待编码数据的编码计算过程;
基于冗余编码过程中的编码计算包括若干个乘法运算和加法运算,本申请在接收到待编码数据时,先确定预设冗余编码算法对该待编码数据的编码计算过程;
这里提到的待编码数据,其输入动作的执行者具体可以为用户或者计算机程序,本申请对该输入动作的执行者不做具体限定;
这里提到的预设冗余编码算法,其具体可以由厂家提供,也可以是用户自行下载,本申请并不对预设冗余编码算法的获得方式做具体限定,只需要能够确定该预设冗余编码算法对该待编码数据的编码计算过程即可,实际情况中可以根据生产厂家的生产环境来具体制定。
S104:利用乘法表对编码计算过程中的乘法运算进行查表运算,从而得到乘法运算的运算结果。
在确定了待编码数据的编码计算过程后,本申请将编码计算过程中的乘法运算移动至有限域空间内,并在利用预设冗余编码算法对待编码数据进行编码计算时,在有限域空间内完成编码计算过程中的乘法运算,充分的利用有限域的乘法运算特点,大幅提升了冗余编码的效率;
可选的,当利用预设冗余编码算法对待编码数据进行编码计算时,还包括:
调用SIMD寄存器完成编码计算过程中的加法运算。
基于上述技术方案,本申请所提供的一种冗余编码的方法,通过在有限域空间内构造乘法表,并确定预设冗余编码算法对待编码数据的编码计算过程,然后利用乘法表对编码计算过程中的乘法运算进行查表运算,从而得到乘法运算的运算结果,充分的利用有限域的乘法运算特点,将乘法运算转换成查表运算,大幅提升了冗余编码的效率,同时减少了对CPU资源的消耗,使得在计算资源有限的设备上也能进行冗余编码。
基于上述实施例,在步骤S101具体为在GF(2^8)有限域空间内构造256*16大小的低四位乘法表和256*16大小的高四位乘法表的情况下,步骤S105中所描述的内容具体也可以通过调用SIMD寄存器进行实现,下面结合图2进行说明。
请参考图2,图2为图1所提供的一种冗余编码的方法中S105的一种实际表现方式的流程图。
其具体包括以下步骤:
S201:将低四位乘法表和高四位乘法表加载到SIMD寄存器中;
S202:调用SIMD寄存器对编码计算过程中的乘法运算进行查表运算。
SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集,SIMD具有性能上的优势:
以加法指令为例,单指令单数据(SISD)的CPU对加法指令译码后,执行部件先访问内存,取得第一个操作数;之后再一次访问内存,取得第二个操作数;随后才能进行求和运算。而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算,这个特点使SIMD特别适合于多媒体应用等数据密集型运算,故本申请实施例中通过调用SIMD寄存器完成编码计算过程中的乘法运算;
进一步的,当编码计算过程中乘法运算的第一因数及第二因数均为单字节数据时,步骤S202中所描述的内容也可以通过如图3所示的步骤进行实现,请参考图3,图3为图2中步骤S202的一种实际表现方式的流程图。
其具体包括以下步骤:
S301:确定编码计算过程中乘法运算的第一因数及第二因数;
S302:将第一因数的高四位清零得到第三因数;将第一因数的低四位清零,并将第一因数的高四位右移四位得到第四因数;
S303:依据低四位乘法表对第三因数与第二因数的乘法进行查表运算,以确定第一因数的低四位与第二因数的低乘积;
S304:依据高四位乘法表对第四因数与第二因数的乘法进行查表运算,以确定第一因数的高四位与第二因数的高乘积;
S305:对低乘积及高乘积进行异或运算,得到第一因数与第二因数的乘积结果。
以单字节数据的乘法Z=X*Y为例,X、Y均为单字节数据,大小为8bit,取值范围为[0…255],在GF(2^8)Z=X*Y等价于Z=X[0…3]*Y+X[4…7]*Y(将0…3前4bit和4…7后四bit分开),因此构造16*256(低4bit的取值范围为0…15,高4bit的取值范围[0…15]<<4)的两张乘法表,乘法表分别为[0…15]*[0…255]和([0…15]<<4)*[0…255]进行构造,单字节数据的乘法则转换成两次查表运算结合一次异或运算;
以X=00100001,Y=10101011为例,实际上Z=X*Y=00100000*10101011+00000001*10101011,在查表运算前,需要将X分为低四位因数0001(将X高四位清0)和高四位因数0010(将X低四位清0,且将高四位右移四位),假设高四位的乘法表为TH[256][16],低四位的乘法表为TL[256][16],则Z=TH[171][2]+TL[171][1],其中2即0010,是将高四位右移四位的结果。
针对于上一实施例中的步骤S202,其中所描述的SIMD寄存器具体可以为NEON寄存器,128位的NEON寄存器支持单条指令同时运行16个字节的查表以及异或运算;在此基础上,当编码计算过程中乘法运算的第一因数为数组数据,第二因数为单字节数据时,步骤S202中所描述的内容也可以通过如图4所示的步骤进行实现,请参考图4,图4为图2中步骤S202的另一种实际表现方式的流程图。
其具体包括以下步骤:
S401:将第一因数中的每个字节的高四位清零得到第五因数;
本步骤可利用vandq_u8指令实现高四位的清零;
S402:将第一因数中的每个字节的低四位清零,并将第一因数中的每个字节的高四位右移到低4位,得到第六因数;
本步骤可利用vandq_u8指令实现低四位的清零,并可利用vshrq_n_u8指令实现高四位右移到低4位;
S403:依据低四位乘法表对第五因数与第二因数的乘法进行查表运算,以确定第一因数的低四位与第二因数的低乘积;依据高四位乘法表对第六因数与第二因数的乘法进行查表运算,以确定第一因数的高四位与第二因数的高乘积;
本步骤可以利用vqtbl1q_u8指令实现查表运算;
S404:对低乘积及高乘积进行异或运算,得到第一因数与第二因数的乘积结果。
本步骤可以通过veorq_u8指令实现本步骤中的异或运算。
以Z[16]=X[16]*Y为例,其中X为16字节大小的数组,Y为一个字节,Z[16]为待求乘法结果,本申请实施例通过vld1q_u8指令将X数组、以及以Y为参构造出来的16字节乘法表加载到NEON寄存器,通过vandq_u8指令将X数组的每个字节的高4位或者低4位清零,通过vshrq_n_u8指令将X数组的每个字节高四位右移到低4位,通过vqtbl1q_u8指令进行查表运算,通过veorq_u8将两次查表结果进行异或,最后将异或的结果通过vst1q_u8写回Z所在的16字节内存空间。
请参考图5,图5为本申请实施例所提供的一种冗余编码的装置的结构图。
该装置可以包括:
构造模块100,用于在有限域空间内构造乘法表;
接收模块200,用于接收输入的待编码数据;
确定模块300,用于确定预设冗余编码算法对待编码数据的编码计算过程;
乘法运算模块400,用于利用乘法表对编码计算过程中的乘法运算进行查表运算,从而得到乘法运算的运算结果。
请参考图6,图6为本申请实施例所提供的另一种冗余编码的装置的结构图。
该构造模块100可以包括:
构造子模块,用于在GF(2^8)有限域空间内构造256*16大小的低四位乘法表和256*16大小的高四位乘法表。
该乘法运算模块500可以包括:
加载子模块,用于将低四位乘法表和高四位乘法表加载到SIMD寄存器中;
调用子模块,用于调用SIMD寄存器对编码计算过程中的乘法运算进行查表运算。
进一步的,该调用子模块可以包括:
第一确定单元,用于当编码计算过程中乘法运算的第一因数及第二因数均为单字节数据时,确定编码计算过程中乘法运算的第一因数及第二因数;
第二确定单元,用于
将第一因数的高四位清零得到第三因数;将第一因数的低四位清零,并将第一因数的高四位右移四位得到第四因数;
第一查表运算单元,用于
依据低四位乘法表对第三因数与第二因数的乘法进行查表运算,以确定第一因数的低四位与第二因数的低乘积;
第二查表运算单元,用于
依据高四位乘法表对第四因数与第二因数的乘法进行查表运算,以确定第一因数的高四位与第二因数的高乘积;
第一异或运算单元,用于对低乘积及高乘积进行异或运算,得到第一因数与第二因数的乘积结果。
进一步的,该调用子模块也可以包括:
清零单元,用于将第一因数中的每个字节的高四位清零得到第五因数;
右移单元,用于将第一因数中的每个字节的低四位清零,并将第一因数中的每个字节的高四位右移到低4位,得到第六因数;
第三查表运算单元,用于依据低四位乘法表对第五因数与第二因数的乘法进行查表运算,以确定第一因数的低四位与第二因数的低乘积;依据高四位乘法表对第六因数与第二因数的乘法进行查表运算,以确定第一因数的高四位与第二因数的高乘积;
第二异或运算单元,用于对低乘积及高乘积进行异或运算,得到第一因数与第二因数的乘积结果。
该装置还可以包括:
调用模块,用于调用SIMD寄存器完成编码计算过程中的加法运算。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
请参考图7,图7为本申请实施例所提供的一种冗余编码设备的结构图。
在本实施例中,冗余编码设备1可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、掌上电脑、便携计算机。
如图7所示,该冗余编码设备1可以包括存储器11、处理器12和总线13。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是冗余编码设备1的内部存储单元,例如该冗余编码设备1的硬盘。存储器11在另一些实施例中也可以是冗余编码设备1的外部存储设备,例如冗余编码设备1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括冗余编码设备1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于冗余编码设备1的应用软件及各类数据,例如冗余编码程序01的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行冗余编码程序01等。
该总线13可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
进一步地,冗余编码设备还可以包括网络接口14,网络接口14可选的可以包括有线接口和/或无线接口(如WI-FI接口、蓝牙接口等),通常用于在该设备1与其他电子设备之间建立通信连接。
可选地,该设备1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在冗余编码设备1中处理的信息以及用于显示可视化的用户界面。
图7仅示出了具有组件11-14以及冗余编码程序01的冗余编码设备1,本领域技术人员可以理解的是,图7示出的结构并不构成对冗余编码设备1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上仅为本申请的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。