本申请涉及计算机技术领域,特别是涉及一种混洗方法及计算装置。
背景技术:
目前,soc(systemonachip,片上系统)中数据的编解码过程中,需要进行数据补齐,从而导致编解码率较高。因此,亟需一种可以降低编解码率的方案。
技术实现要素:
基于此,有必要针对上述技术问题,提供一种混洗方法及计算装置。
第一方面,提供了一种混洗方法,所述方法包括:
获取待编码数据块对应的多个编码流;
根据第一混洗等级,将所述多个编码流划分为多个第一混洗单元,并将所述多个第一混洗单元划分为至少一个第一混洗组,所述第一混洗单元包含至少一个编码流,所述第一混洗组包含多个第一混洗单元;
针对每个第一混洗组中的每个第一混洗单元,将该第一混洗单元包含的编码流中的待编码流块的总编码长度,确定为该第一混洗单元的编码长度;
根据所述各第一混洗单元的编码长度,在所述各第一混洗单元中,确定输出混洗单元和输入混洗单元;
将所述输出混洗单元中第一预设数目个待混洗流块,发送至所述输入混洗单元,作为所述输入混洗单元中的第一待编码流块,以通过所述输入混洗单元根据预设的编码算法对所述第一待编码流块进行编码。
第二方面,提供了一种混洗方法,所述方法包括:
获取待解码数据块对应的多个解码流;
根据第一混洗等级,将所述多个解码流划分为多个第一混洗单元,并将所述多个第一混洗单元划分为至少一个第一混洗组,所述第一混洗单元包含至少一个解码流,所述第一混洗组包含多个第一混洗单元;
针对每个第一混洗组中的每个第一混洗单元,将该第一混洗单元包含的解码流中的待解码流块的总编码长度,确定为该第一混洗单元的编码长度;
根据所述各第一混洗单元的编码长度,在所述各第一混洗单元中,确定输出混洗单元和输入混洗单元;
将所述输出混洗单元中第一预设数目个待混洗流块,发送至所述输入混洗单元,作为所述输入混洗单元中的第一待解码流块,以通过所述输入混洗单元根据预设的解码算法对所述第一待解码流块进行解码。
第三方面,提供了一种计算装置,所述计算装置包括处理器;
所述处理器,用于接收源数据,并使用如第一方面任一项所述方法对所述源数据进行编码,得到编码数据。
作为一种可选的实施方式,所述处理器包括控制模块、片上存储模块和运算模块;
所述控制模块,用于将所述处理器接收到的机器指令译码为编码微指令,利用所述编码微指令控制所述运算模块对所述片上存储模块中的源数据进行运算,并写入片外存储模块;
所述控制模块包括编码单元,所述编码单元用于执行编码指令,将所述编码指令译码为编码微指令。
第四方面,提供了一种计算装置,所述计算装置包括处理器;
所述处理器,用于接收编码数据,并使用如第二方面任一项所述方法对所述编码数据进行解码,得到源数据。
作为一种可选的实施方式,所述处理器包括控制模块、片上存储模块和运算模块;
所述控制模块,用于将所述处理器接收到的机器指令译码为解码微指令,利用所述解码微指令控制所述运算模块对片外存储模块中的编码数据进行运算,并写入所述片上存储模块;
所述控制模块包括解码单元,所述解码单元用于执行解码指令,将所述解码指令译码为解码微指令。
本申请实施例提供了一种混洗方法及计算装置。编解码器根据第一混洗等级,确定待编码数据块对应的至少一个第一混洗组。其中,第一混洗组包含多个第一混洗单元,第一混洗单元包含至少一个编码流。然后,编解码器确定各第一混洗单元的编码长度,根据各第一混洗单元的编码长度,在各第一混洗单元中,确定输出混洗单元和输入混洗单元。之后,编解码器将输出混洗单元中第一预设数目个待混洗流块,发送至输入混洗单元,作为输入混洗单元中的第一待编码流块,以通过输入混洗单元根据预设的编码算法对第一待编码流块进行编码。这样,通过对待编码数据块的各编码流进行混洗,可以保证各编码流的编码长度相近,从而避免由于各个编码流之间的对齐要求造成的补数过多,进而降低编码率。同时,还可以避免各编码流之间产生死锁情况。
附图说明
图1为本申请实施例提供的一种编解码器的结构示意图;
图2为本申请实施例提供的一种编码流的生成方法的流程示意图;
图3为本申请实施例提供的一种源数据的示意图;
图4a为本申请实施例提供的一种流块划分的示意图;
图4b为本申请实施例提供的一种流块划分的示意图;
图5为本申请实施例提供的一种混洗方法的流程示意图;
图6为本申请实施例提供的一种确定输出/输入混洗单元的流程示意图;
图7a为本申请实施例提供的一种编码流的混洗前的示意图;
图7b为本申请实施例提供的另一种编码流的混洗前的示意图;
图8a为本申请实施例提供的一种编码流的混洗过程的示意图;
图8b为本申请实施例提供的另一种编码流的混洗过程的示意图;
图9a为本申请实施例提供的一种编码流的混洗完成的示意图;
图9b为本申请实施例提供的另一种编码流的混洗完成的示意图;
图10为本申请实施例提供的一种编码数据的示意图;
图11为本申请实施例提供的一种源数据子块拼接的示意图;
图12a为本申请实施例提供的一种编码数据子块拼接的示意图;
图12b为本申请实施例提供的一种编码数据子块拼接的示意图;
图12c为本申请实施例提供的一种编码数据子块拼接的示意图;
图12d为本申请实施例提供的一种编码数据子块拼接的示意图;
图13为本申请实施例提供的一种混洗方法的流程示意图;
图14为本申请实施例提供的一种确定输出/输入混洗单元的流程示意图;
图15为本申请实施例提供的一种解码流混洗前的示意图;
图16为本申请实施例提供的一种解码流混洗过程的示意图;
图17为本申请实施例提供的一种解码流混洗完成的示意图;
图18为本申请实施例提供的一种编码头数据的示意图;
图19为本申请实施例提供的一种待解码时数据划分的示意图;
图20为本申请实施例提供的一种待解码时数据划分的示意图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包含”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包含复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包含这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
本申请实施例提供了一种混洗方法,该方法可以应用于编解码器(codec)。图1为本申请实施例提供的一种编解码器的系统架构图。如图1所示,该编解码器采用通用处理器架构,该通用处理器架构包含至少一个存储器和通用处理器。该至少一个存储器用于存储计算机程序。该通用处理器用于根据存储器中存储的计算机程序执行混洗方法,以保证各编码流的编码长度相近,从而避免由于各个编码流之间的对齐要求造成的补数过多,进而降低编码率。其中,该通用处理器可以为ipu(intelligentprocessingunit,智能处理器)或cpu(centralprocessingunit,中央处理器)或gpu(graphicsprocessingunit,图形处理器)。
为了便于理解,本申请实施例优先对本申请实施例提供的一种编码流的生成方法进行详细的说明。如图2所示,具体步骤如下:
步骤201,获取待编码的源数据。
在实施中,当编解码器需要对源数据进行编码时,编解码器可以获取预先存储的待编码的源数据。如图3所示,源数据的格式为二维格式,低维为x,高维为y,起始地址为数据地址(dataaddress),源数据的大小为低维数据大小(datasizex)*高维数据大小(datasizey),源数据的在低维上的步幅(stride)为低维数据步幅(datastridex)。源数据可以进一步在二维上均匀的划分为多个源数据块(block),如图3所示,每个方块表示一个源数据块,源数据块的大小为低维源数据块大小(blocksizex)*高维源数据块大小(blocksizey),相邻两个源数据块之间的低维间隔为低维源数据块步幅(blockstridex),高维间隔为高维源数据块步幅(blockstridey)。
步骤202,根据接收到的编码指令,在源数据中,确定编码指令对应的编码区域,编码区域包含至少一个待编码数据块,待编码数据块为源数据块或源数据子块。
在实施中,编解码器获取到待编码的源数据后,可以根据接收到的编码指令,在源数据中,确定该编码指令对应的编码区域。其中,编码区域包含至少一个待编码数据块,待编码数据块为源数据块或源数据子块。如图3所示,虚线框为编码区域,该编码区域可以通过在源数据中指定低维方向上的低维偏移量(offsetx)和指定高维方向上的高维偏移量(offsety)得到。其中,该编码区域在低维方向上包含低维源数据块数目(blocknumx)个源数据块,在高维方向上包含高维源数据块数目(blocknumy)个源数据块。该编码区域的起始地址(startaddress)为起始源数据块的地址。
编解码器得到该编码指令对应的编码区域后,针对中央的源数据块(即图3中使用竖线方块表示的源数据块),编解码器可以直接对该源数据块进行编码。而对于边缘的源数据块(即图3中使用斜线方块表示的源数据块),编解码器可以通过指定上(top)、下(bottom)、左(left)和右(right)四个参数在源数据块中确定源数据子块,并对确定出的源数据子块进行编码。
需要说明的是,除编码区域外,该源数据中的其他区域中的数据无需进行分块,其他区域中的数据的大小也无需对齐到源数据块的大小,低维偏移量、高维偏移量、低维源数据块步幅、高维源数据块步幅、低维源数据大小、高维源数据大小和低维源数据步幅也无需与低维源数据块大小或高维源数据块大小对齐。也即编解码器支持在源数据中任意地分块,并在得到的源数据块中任意取出编码区域进行编码。
步骤203,针对至少一个待编码数据块中的每个待编码数据块,将该待编码数据块划分为多个流块,并将多个流块发送至该待编码数据块对应的多个编码流,作为多个编码流中的待混洗流块。
在实施中,为了提高编码的吞吐量,编解码器可以通过多个编码流并行对同一待编码数据块进行编码。同理,编解码器在进行混洗时,针对每个待编码数据块,编解码器可以将该待编码数据块划分为多个流块,并将多个流块发送至该待编码数据块对应的多个编码流,作为多个编码流中的待混洗流块。可选的,编解码器可以将待编码数据块划分成多个行序列,每个行序列中包含至少一个待编码数据子块。然后,针对每个行序列中的每个待编码数据子块,编解码器可以将该待编码数据子块划分为多个流块。这样,可以保证每个编码流中的流块的数目相近。例如,如图4a所示,编解码器将待编码数据块划分为4个行序列。其中,第一行序列包含待编码数据子块1、待编码数据子块2、待编码数据子块3和待编码数据子块4;第二行序列包含待编码数据子块5、待编码数据子块6、待编码数据子块7和待编码数据子块8;第三行序列包含待编码数据子块9、待编码数据子块10、待编码数据子块11和待编码数据子块12;第四行序列包含待编码数据子块13、待编码数据子块14、待编码数据子块15和待编码数据子块16,各行序列中斜线方块表示该待编码数据块中非编码数据。然后,如图4b所示,针对每个行序列中的每个待编码数据子块,编解码器可以将该待编码数据子块划分为4个流块,分别发送至编码流(steam)1至编码流4中,作为各编码流中的待混洗流块。其中,编码流1和编码流2包含16个待混洗流块,编码流3和编码流4包含12个待混洗流块。
下面将结合具体的实施例,对本申请实施例提供的一种混洗方法进行详细的说明,该混洗方法应用于编码过程。如图5所示,具体步骤如下:
步骤501,获取待编码数据块对应的多个编码流。
在实施中,当编解码器需要对待编码数据块对应的多个编码流进行混洗时,编解码器可以获取待编码数据块对应的多个编码流。
步骤502,根据第一混洗等级,将多个编码流划分为多个第一混洗单元,并将多个第一混洗单元划分为至少一个第一混洗组。其中,第一混洗单元包含至少一个编码流,第一混洗组包含多个第一混洗单元。
在实施中,编解码器可以根据各编码流包含的流块数目的差异,在预设的各混洗等级中选取对应的混洗等级。例如,编解码器中可以预设三个混洗等级,混洗等级1、混洗等级2和混洗等级3。编解码器选定某一混洗等级(即第一混洗等级)后,可以进一步根据该第一混洗等级,确定待编码数据块对应的至少一个第一混洗组。其中,第一混洗组包含多个第一混洗单元,第一混洗单元包含至少一个编码流。
编解码器获取到待编码数据块对应的多个编码流后,编解码器可以根据第一混洗等级,将多个编码流划分为多个第一混洗单元,并将多个第一混洗单元划分为至少一个第一混洗组。其中,第一混洗单元包含至少一个编码流,第一混洗组包含多个第一混洗单元。例如,待编码数据块对应32个编码流,当第一混洗等级为混洗等级1时,编解码器可以将32个编码流划分为32个第一混洗单元,并将32个第一混洗单元划分为8个第一混洗组,也即,每相邻的4个编码流进行混洗;当第一混洗等级为混洗等级2时,编解码器可以将32个编码流划分为8个第一混洗单元,并将8个第一混洗单元划分为2个第一混洗组,也即,每相邻的16个编码流中以4个编码流为一个混洗单元进行混洗;当第一混洗等级为混洗等级3时,编解码器可以将32个编码流划分为2个第一混洗单元,并将2个第一混洗单元划分为1个第一混洗组,也即,32个编码流中以16个编码流为一个混洗单元进行混洗。
步骤503,针对每个第一混洗组中的每个第一混洗单元,编解码器可以将该第一混洗单元包含的编码流中的待编码流块的总编码长度,确定为该第一混洗单元的编码长度。
在实施中,编解码器确定出待编码数据块对应的第一混洗组后,针对每个第一混洗组中的每个第一混洗单元,编解码器可以进一步将该第一混洗单元包含的编码流中待编码流块的总编码长度,确定为该第一混洗单元的编码长度。可选的,针对混洗处理和编码处理同步进行的情况,编解码器还可以将第一混洗单元包含的编码流中的待编码流块和已编码流块的总编码长度,确定为该第一混洗单元的编码长度。
步骤504,根据各第一混洗单元的编码长度,在各第一混洗单元中,确定输出混洗单元和输入混洗单元。
在实施中,编解码器确定出各第一混洗单元的编码长度后,可以根据各第一混洗单元的编码长度,在各第一混洗单元中,确定输出混洗单元和输入混洗单元。其中,如图6所示,编解码器根据各第一混洗单元的编码长度,在各第一混洗单元中,确定输出混洗单元和输入混洗单元的处理过程如下:
步骤601,根据各第一混洗单元的编码长度,确定各第一混洗单元的混洗类型。
在实施中,编解码器确定出各第一混洗单元的编码长度后,编解码器可以根据各第一混洗单元的编码长度,确定各第一混洗单元的混洗类型。其中,编解码器根据各第一混洗单元的编码长度,确定各第一混洗单元的混洗类型的方式可以是多种多样的,本申请实施例提供了两种可行的方式,具体如下:
方式一,针对每个第一混洗单元,编解码器可以根据该第一混洗单元的编码长度与其他第一混洗单元的编码长度的第一差值,确定该第一混洗单元的混洗类型。具体处理过程如下:
步骤一,针对各第一混洗单元中的每个第一混洗单元,确定该第一混洗单元的编码长度与其他第一混洗单元的编码长度的第一差值。
在实施中,编解码器确定出各第一混洗单元的编码长度后,针对每个第一混洗单元,编解码器可以进一步确定该第一混洗单元的编码长度与其他第一混洗单元的编码长度的第一差值。示例一,如图7a所示,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,编码流1的编码长度为n+5,编码流2的编码长度为n+9,编码流3的编码长度为n,编码流4的编码长度为n+3,n为正整数,则编码流1对应的第一差值为{-4,5,2},编码流2对应的第一差值为{4,9,6},编码流3对应的第一差值为{-5,-9,-3},编码流4对应的第一差值为{-2,-6,3}。
示例二,如图7b所示,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,编码流1的编码长度为n+15,编码流2的编码长度为n+10,编码流3的编码长度为n+8,编码流4的编码长度为n,n为正整数,则编码流1对应的第一差值为{5,7,15},编码流2对应的第一差值为{-5,2,10},编码流3对应的第一差值为{-7,-2,8},编码流4对应的第一差值为{-15,-10,-8}。
步骤二,根据该第一混洗单元对应的第一差值,确定该第一混洗单元的混洗类型。
在实施中,编解码器中可以预先存储有第一预设差值阈值。该第一预设差值阈值可以由技术人员根据经验进行设置。编解码器得到该第一混洗单元对应的第一差值后,可以判断该第一混洗单元对应的第一差值中是否存在绝对值大于或等于第一预设差值阈值的目标差值,且目标差值是否均为正数。如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且目标差值均为正数,则编解码器执行步骤三。如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且目标差值中存在负数的目标差值,则编解码器执行步骤四。如果该第一混洗单元对应的第一差值中不存在绝对值大于或等于第一预设差值阈值的目标差值。则编解码器执行步骤五。
步骤三,确定该第一混洗单元的混洗类型为高编码类型。
在实施中,如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且目标差值均为正数,则编解码器可以确定该第一混洗单元的混洗类型为高编码类型(以下用h表示)。例如,在上述示例一中,如图7a所示,第一预设差值阈值为7,则编码流2的混洗类型为h,在上述示例二中,如图7b所示,第一预设差值阈值为7,则编码流1和编码流2的混洗类型为h。
步骤四,确定该第一混洗单元的混洗类型为低编码类型。
在实施中,如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且目标差值中存在负数的目标差值,则编解码器可以确定该第一混洗单元的混洗类型为低编码类型(以下用l表示)。例如,在上述示例一中,如图7a所示,第一预设差值阈值为7,则编码流3的混洗类型为l,在上述示例二中,如图7b所示,第一预设差值阈值为7,则编码流3和编码流4的混洗类型为l。
步骤五,确定该第一混洗单元的混洗类型为中编码类型。
在实施中,如果该第一混洗单元对应的第一差值中不存在绝对值大于或等于第一预设差值阈值的目标差值,则编解码器可以确定该第一混洗单元的混洗类型为中编码类型(以下用m表示)。例如,在上述示例一中,如图7a所示,第一预设差值阈值为7,则编码流1和编码流4的混洗类型为m。
方式二,针对每个第一混洗单元,编解码器可以根据该第一混洗单元的编码长度与平均编码长度的第二差值,确定该第一混洗单元的混洗类型。具体处理过程如下:
步骤一,根据各第一混洗单元的编码长度,确定平均编码长度。
在实施中,编解码器确定出各第一混洗单元的编码长度后,可以根据各第一混洗单元的编码长度,确定平均编码长度。示例三,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,编码流1的编码长度为n+5,编码流2的编码长度为n+9,编码流3的编码长度为n,编码流4的编码长度为n+3,n为正整数,则平均编码长度为n+4.25。
示例四,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,编码流1的编码长度为n+15,编码流2的编码长度为n+10,编码流3的编码长度为n+8,编码流4的编码长度为n,n为正整数,则平均编码长度为n+8.25。
步骤二,针对各第一混洗单元中的每个第一混洗单元,确定该第一混洗单元的编码长度与平均编码长度的第二差值。
在实施中,编解码器确定出平均编码长度后,针对每个第一混洗单元,编解码器可以进一步确定该第一混洗单元的编码长度与平均编码长度的第二差值。例如,在上述示例三中,编码流1对应的第二差值为0.75,编码流2对应的第二差值为4.75,编码流3对应的第二差值为-4.25,编码流4对应的第二差值为-1.25;在上述示例四中,编码流1对应的第二差值为6.75,编码流2对应的第二差值为1.75,编码流3对应的第二差值为-0.25,编码流4对应的第二差值为-8.25。
步骤三,根据该第一混洗单元对应的第二差值,确定该第一混洗单元的混洗类型。
在实施中,编解码器中可以预先存储有第二预设差值阈值。该第二预设差值阈值可以由技术人员根据经验进行设置。编解码器得到该第一混洗单元对应的第二差值后,可以判断该第一混洗单元对应的第二差值的绝对值是否大于或等于第二预设差值阈值,且第二差值是否为正数。如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且第二差值为正数,则编解码器执行步骤四。如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且第二差值为负数,则编解码器执行步骤五。如果该第一混洗单元对应的第二差值的绝对值小于第二预设差值阈值,则编解码器执行步骤六。
步骤四,确定该第一混洗单元的混洗类型为高编码类型。
在实施中,如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且第二差值为正数,则编解码器可以确定该第一混洗单元的混洗类型为高编码类型(即h)。例如,在上述示例三中,第二预设差值阈值为4,则编码流2的混洗类型为h;在上述示例四中,第二预设差值阈值为6,则编码流1的混洗类型为h。
步骤五,确定该第一混洗单元的混洗类型为低编码类型。
在实施中,如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且第二差值为负数,则编解码器可以确定该第一混洗单元的混洗类型为低编码类型(即l)。例如,在上述示例三中,第二预设差值阈值为4,则编码流3的混洗类型为l;在上述示例四中,第二预设差值阈值为6,则编码流4的混洗类型为l。
步骤六,确定该第一混洗单元的混洗类型为中编码类型。
在实施中,如果该第一混洗单元对应的第二差值的绝对值小于第二预设差值阈值,则编解码器可以确定该第一混洗单元的混洗类型为中编码类型(即m)。例如,在上述示例三中,第二预设差值阈值为4,则编码流1和编码流4的混洗类型为m;在上述示例四中,第二预设差值阈值为6,则编码流2和编码流3的混洗类型为m。
步骤602,根据各第一混洗单元的混洗类型和预设的混洗规则,在各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元。
在实施中,编解码器中可以预先存储有混洗规则。该混洗规则可以由技术人员根据经验进行设置。编解码器得到各第一混洗单元的混洗类型后,可以进一步根据各第一混洗单元的混洗类型和预设的混洗规则,在各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元。其中,编解码器根据各第一混洗单元的混洗类型和预设的混洗规则,在各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元的处理过程如下:
步骤一,如果高编码类型的第一目标混洗单元的第一数目小于或等于低编码类型的第二目标混洗单元的第二数目,则将第一目标混洗单元确定为输出混洗单元,并针对每个输出混洗单元,在第二目标混洗单元中,确定至少一个第二目标混洗单元作为该输出混洗单元对应的输入混洗单元。
在实施中,如果高编码类型的第一目标混洗单元的第一数目小于或等于低编码类型的第二目标混洗单元的第二数目,则编解码器可以将第一目标混洗单元确定为输出混洗单元。然后,针对每个输出混洗单元,编解码器可以在第二目标混洗单元中,确定至少一个第二目标混洗单元作为该输出混洗单元对应的输入混洗单元。其中,一个第二目标混洗单元可以仅作为一个输出混洗单元对应的输入混洗单元,也可以作为多个输出混洗单元对应的输入混洗单元,本申请实施例不作限定。例如,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,当编码流1至编码流4的混洗类型为hmml时,编解码器可以将编码流1确定为输出混洗单元,并将编码流4确定为编码流1的输入混洗单元;当编码流1至编码流4的混洗类型为hmll时,编解码器可以将编码流1确定为输出混洗单元,并将编码流3和编码流4确定为编码流1的输入混洗单元;当编码流1至编码流4的混洗类型为hlll时,编解码器可以将编码流1确定为输出混洗单元,并将编码流2、编码流3和编码流4确定为编码流1的输入混洗单元;当编码流1至编码流4的混洗类型为hhll时,编解码器可以将编码流1和编码流2确定为输出混洗单元,并将编码流3确定为编码流1的输入混洗单元,将编码流4确定为编码流2的输入混洗单元,编解码器也可以将编码流3和编码流4确定为编码流1的输入混洗单元,将和编码流3和编码流4确定为编码流2的输入混洗单元,编解码器也可以将编码流3确定为编码流1的输入混洗单元,将和编码流3和编码流4确定为编码流2的输入混洗单元。
步骤二,如果高编码类型的第一目标混洗单元的第一数目大于低编码类型的第二目标混洗单元的第二数目,则将第二数目个第一目标混洗单元确定为输出混洗单元,并针对每个输出混洗单元,在第二目标混洗单元中,确定至少一个第二目标混洗单元作为该输出混洗单元对应的输入混洗单元。
在实施中,如果高编码类型的第一目标混洗单元的第一数目大于低编码类型的第二目标混洗单元的第二数目,则编解码器可以在各第一目标混洗单元中将第二数目个第一目标混洗单元确定为输出混洗单元。然后,针对每个输出混洗单元,编解码器可以在第二目标混洗单元中,确定至少一个第二目标混洗单元作为该输出混洗单元对应的输入混洗单元。其中,一个第二目标混洗单元可以仅作为一个输出混洗单元对应的输入混洗单元,也可以作为多个输出混洗单元对应的输入混洗单元,本申请实施例不作限定。例如,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,当编码流1至编码流4的混洗类型为hhml时,编解码器可以将编码流2确定为输出混洗单元,并将编码流4确定为编码流2的输入混洗单元;当编码流1至编码流4的混洗类型为hhhl时,编解码器可以将编码流3确定为输出混洗单元,并将编码流4确定为编码流1的输入混洗单元。
需要说明的是,如果高编码类型的第一目标混洗单元的第一数目大于低编码类型的第二目标混洗单元的第二数目,且各混洗单元中存在中编码类型的第三目标混洗单元,则编解码器还可以进一步在除确定为第二目标混洗单元对应的输出混洗单元(以下称为第一输出混洗单元)以外的第一目标混洗单元中,确定若干个第一目标混洗单元作为输出混洗单元(以下称为第二输出混洗单元),并针对每个第二输出混洗单元,编解码器可以在第三目标混洗单元中,确定至少一个第三目标混洗单元作为该第二输出混洗单元对应的输入混洗单元。例如,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,当编码流1至编码流4的混洗类型为hhml时,编解码器可以将编码流2确定为第一输出混洗单元,并将编码流4确定为编码流2的输入混洗单元;同时,编解码器还可以将编码流1确定为第二输出混洗单元,并将编码流3确定为编码流1的输入混洗单元。
另外,对于中编码类型的第三目标混洗单元,针对每个第三目标混洗单元,编解码器可以将该第三目标混洗单元确定为输出混洗单元,并将自身确定为该第三目标混洗单元对应的输入混洗单元。例如,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,当编码流1至编码流4的混洗类型为mmmm时,编解码器可以将编码流1确定为输出混洗单元,并将编码流1确定为编码流1的输入混洗单元,编码流2至编码流4与之类似,此处不再赘述。
步骤505,将输出混洗单元中第一预设数目个待混洗流块,发送至输入混洗单元,作为输入混洗单元中的第一待编码流块,以通过输入混洗单元根据预设的编码算法对第一待编码流块进行编码。
在实施中,编解码器中可以预先存储有第一预设数目。该第一预设数目可以由技术人员根据经验进行设置。编解码器确定出输出混洗单元和输入混洗单元后,编解码器可以将输出混洗单元中第一预设数目个待混洗流块,发送至输入混洗单元,作为输入混洗单元中的第一待编码流块,以通过输入混洗单元根据预设的编码算法对第一待编码流块进行编码。其中,第一预设数目可以大于或等于输入混洗单元的数目;每个输入混洗单元接收到的待混洗流块可以相同,也可以不同;针对每个输入混洗单元,编解码器还可以将该输入混洗单元中第三预设数目个待混洗单元输入至该输入混洗单元的待编码队列,作为该输入混洗单元的第一待编码流块。
可选的,针对每个输出混洗单元,将该输出混洗单元中第二预设数目个待混洗流块,发送至该输出混洗单元对应的输入混洗单元,作为该输入混洗单元中的第一待编码流块。
在实施中,编解码器中可以预先存储有第二预设数目。该第二预设数目可以由技术人员根据经验进行设置。对于输出混洗单元与输入混洗单元对应的情况,针对每个输出混洗单元,编解码器可以将该输出混洗单元中第二预设数目个待混洗流块,发送至该输出混洗单元对应的输入混洗单元,作为该输入混洗单元中的第一待编码流块。其中,第二预设数目可以大于或等于该输出混洗单元对应的输入混洗单元的数目,且每个输入混洗单元接收到的待混洗流块的数目可以相同,也可以不同。这样,可以保证各个混洗单元的编码长度相近。例如,如图8a所示,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,编码流1至编码流4的混洗类型为mhlm,则编码流2为输出混洗单元,编码流3为编码流2的输入混洗单元,则编码流1可以向编码流1输出1个待混洗流块,编码流2可以向编码流3输出1个待混洗流块,编码流4可以向编码流4输出1个待混洗流块。这样,如图9a所示,混洗完成后编码流1的编码长度为n+8,编码流2的编码长度为n+9,编码流3的编码长度为n+3,编码流4的编码长度为n+6,编码流1至编码流4的混洗类型为mmmm。又如,如图8b所示,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个编码流为例,编码流1至编码流4的混洗类型为hhll,则编码流1和编码流2为输出混洗单元,编码流3和编码流4为编码流1的输入混洗单元,编码流4为编码流2的输入混洗单元,则编码流1可以分别向编码流3和编码流4输出1个待混洗流块,编码流2可以向编码流4输出2个待混洗流块。这样,如图9b所示,混洗完成后编码流1的编码长度为n+15,编码流2的编码长度为n+10,编码流3的编码长度为n+11,编码流4的编码长度为n+9,编码流1至编码流4的混洗类型为mmmm。
作为一种可选地实施方式,编解码器可以根据第二混洗等级,确定待编码数据块对应的至少一个第二混洗组。其中,第二混洗组包含多个第二混洗单元,第二混洗单元包含至少一个编码流。然后,编解码器可以将各第二混洗单元中的待编码流块作为待混洗流块重新进行混洗处理,直到各第二混洗单元的编码长度满足预设接近度条件。
在实施中,编解码器根据第一混洗等级对待编码数据块对应的编码流进行混洗后,编解码器还可以进一步根据第二混洗等级,确定待编码数据块对应的至少一个第二混洗组。其中,第二混洗组包含多个第二混洗单元,第二混洗单元包含至少一个编码流。编解码器根据第二混洗等级,确定待编码数据块对应的至少一个第二混洗组的处理过程如步骤502类似,此处不再赘述。然后,编解码器可以将各第二混洗单元中的待编码流块作为待混洗流块重新进行混洗处理,直到各第二混洗单元的编码长度满足预设接近度条件。
需要说明的是,编解码器根据第二混洗等级对待编码数据块对应的编码流进行混洗后,还可以进一步根据第三混洗等级对待编码数据块对应的编码流进行混洗。例如,编解码器可以按照混洗等级1-混洗等级2—混洗等级3对待编码数据块对应的编码流进行混洗,也可以按照混洗等级1-混洗等级3—混洗等级2对待编码数据块对应的编码流进行混洗,还可以按照混洗等级2-混洗等级3—混洗等级1对待编码数据块对应的编码流进行混洗。
作为一种可选地实施方式,当编解码器检测到多个编码流中的第一编码流编码完成时,将多个编码流中未编码完成的第二编码流中第三预设数目个待编码流块发送至第一编码流,作为第一编码流中的待编码流块。
在实施中,为了进一步平衡各个编码流的编码长度,提高小数据块编码时的编码率。编解码器中可以预先存储有第三预设数目。该第三预设数目可以由技术人员根据经验进行设置。当编解码器检测到多个编码流中的第一编码流编码完成(也即第一编码流输出编码流结束(streamfinish)标记)时,可以将多个编码流中未编码完成的第二编码流中第三预设数目个待编码流块发送至第一编码流,作为第一编码流中的待编码流块。其中,第二编码流可以为多个编码流中全部的未编码完成的编码流,也可以为多个编码流中部分的未编码完成的编码流。
作为一种可选地实施方式,编解码器通过输入混洗单元根据预设的编码算法对第一待编码流块进行编码的处理过程如下:
步骤一,根据预设字符对应的第一编码规则,对第一待编码流块中包含的预设字符进行编码,得到第一编码数据。
在实施中,编解码器中可以预先存储有预设字符对应的第一编码规则。该预设字符对应的第一编码规则可以由技术人员根据经验进行设置。编解码器可以根据预设字符对应的第一编码规则,对第一待编码流块中包含的预设字符进行编码,得到第一编码数据。其中,由于神经网络数据具有稀疏特性,因此,技术人员可以将连续若干个全零字符设置为预设字符。表一为各预设字符,如表一所示:
表一
步骤二,根据预设的第二编码规则对第一编码数据进行编码。
在实施中,编解码器中可以预先存储有第二编码规则。该第二编码规则可以为前缀码编码算法,也可以为其他编码算法,本申请实施例不作限定。编解码器得到第一编码数据后,可以进行一步根据预设的第二编码规则对第一编码数据进行编码。
作为一种可选地实施方式,编解码器对待编码数据块进行编码,得到编码数据块后,可以生成各待编码数据块对应的编码数据块的编码头块。其中,编码头块中包含编码头块对应的编码数据块的存储地址。然后,编解码器可以将各编码头块进行存储,并在各编码头块之后存储各编码数据块。
在实施中,对于待编码数据块对应的编码数据块,如图10所示,编解码器采用头-数据块(header-datablock)映射的形式进行存储。该映射形式分为两大部分,分别为编码头(header)部分和编码数据块(datablock)部分。编码头部分的起始地址为编码头地址(headaddress);编码头部分占据的空间为编码头总数目(headtotalnumber)个编码头块的大小,编码头总数目可以大于或等于有效的编码头块的数目。其中,每个编码头块的大小为16比特(byte),每个编码头块中存储有该编码头块对应的编码数据块的起始地址和实际大小等信息,各个编码头块在存储设备中连续存放。编码数据块部分紧挨着编码头部分的结束地址存放。每个编码数据块部分包含了若干个编码数据块,每个编码数据块与h编码头块一一对应。其中,编码数据块的存储格式分为打包(packing)格式和非打包(unpacking)格式两种。
可选的,对于打包格式,编码数据块由编码数据组成,编码数据的大小等于待编码数据块中待编码数据编码后的大小。
在实施中,如图10所示,打包格式下,编码数据块紧密存放,每个编码数据块由编码数据组成,编码数据的大小等于待编码数据块中待编码数据编码后的大小。也即,编码数据块占据的空间为待编码数据块编码后的实际大小。
可选的,对于非打包格式,编码数据块由编码数据和填充数据组成,编码数据的大小和填充数据的大小之和等于待编码数据块的大小。
在实施中,如图10所示,非打包格式下,每个编码数据块由编码数据和填充数据组成,编码数据的大小和填充数据的大小之和等于待编码数据块的大小。也即,每个编码数据块都占用相同的空间,且等于编码前一个完整的待编码数据块的大小。其中,前一部分为编码数据,后一部分为保留的填充数据。
作为一种可选地实施方式,编码数据块由属于同一源数据块中的多个源数据子块对应的编码数据子块组成。在打包格式下,编码数据子块由编码数据组成,编码数据的大小等于源数据子块中待编码数据编码后的大小。在非打包格式下,编码数据子块由编码数据和填充数据组成,编码数据的大小和填充数据的大小之和等于源数据子块的大小。
在实施中,编解码器根据不同的编码指令,在源数据中确定多个编码区域时,可能会将一个完整的源数据块切分成多个源数据子块。其中,各编码指令对应的编码区域在相邻的那一侧,要么都编码完整的源数据块,而且源数据块之间互不重叠;要么各自编码同一源数据块的一部分(也即源数据子块),且各源数据子块在源数据块内部的边界正好重叠。如图11所示,四个编码指令在源数据中确定出的四个编码区域将部分源数据块(以灰色斜线方块表示)切分成多个源数据子块,同一源数据块中的各源数据子块的边界正好重叠。编解码器根据不同编码指令对同一源数据块中的各源数据子块进行编码,得到编码数据子块。编解码器在对同一源数据块中的多个源数据子块对应的编码数据子块进行存储时,可以将该编码数据子块存储至同一编码数据块中。这样,可以实现多条编码指令协同完成特定编码区域的拼接,其效果与通过一条编码指令进行编码完全相同,并且这些编码指令的执行顺序可以任意甚至并发执行,从而在多核的源数据划分和单核内部为了流水执行而分块的情况下,能够将编码任务进行划分。
如图12a所示,一个源数据块在低维和高维均被划分为两部分,使得该源数据块划分为4个源数据子块,分别为tl(top-left),tr(top-right),bl(bottom-left)和br(bottom-right)。其中,每个源数据子块的大小如图12a所示,编解码器可以通过源数据块内部的blockleft,blockright,blocktop,blockbottom四个参数指定。每个源数据子块可以是编码数据,也可以是非编码数据。在非打包格式下的编码数据块中,上述4个源数据子块对应4个编码数据子块可以按照tl-tr-bl-br的固定顺序存储,每个编码数据子块由编码数据和填充数据组成,编码数据的大小和填充数据的大小之和等于源数据子块的大小。也即,每个编码数据子块所占据的空间为该编码数据子块对应的源数据子块编码前的大小。这样,编码数据块的空间与源数据块的大小相同,从而保证了如果源数据块的每个源数据子块都是由不同的编码指令进行编码,每条编码指令都可以根据划分信息(可以通过指令域计算得到)计算出所负责的编码数据子块的地址,从而实现多条编码指令结果的拼接。
如图12a所示,编解码器可以通过编码移动(move)等方式将非打包格式下的编码数据块转化为打包格式下的编码数据块。在打包格式下的编码数据块中,每个编码数据子块由编码数据组成,编码数据的大小等于源数据子块中待编码数据编码后的大小。其中,各编码数据子块之间紧密存放,每个编码数据子块的起始地址需要根据前面的编码数据子块的实际大小累加获得,整个编码数据块所占据的空间就是所有编码数据子块的大小之和。
如图12b所示,一个源数据块在高维被划分为两部分,使得该源数据块划分为2个源数据子块,分别为tl和bl,或者bl和br。如图12c所示,一个源数据块在低维被划分为两部分,使得该源数据块划分为2个源数据子块,分别为tl和tr,或者tr和br。
一个源数据块在低维和高维均不进行划分,仅有一个源数据子块,该源数据子块可以为tl、tr、bl或br。如图12d所示,一个源数据块仅有tl一个源数据子块。
为了支持不同编码区域的拼接,包含多个编码数据子块的编码数据块对应的编码头的格式如表二所示。
表二
作为一种可选地实施方式,如果各第一混洗组中待编码流块总编码长度大于待编码数据块的原长度,则终止对待编码数据块的编码处理。
在实施中,为了保证编码数据块可以按照非打包格式进行存储,需要保证编码数据块的大小不能超过待编码数据块的大小。编解码器在对待编码数据块进行混洗处理时,如果检测到各第一混洗组中待编码流块总编码长度大于待编码数据块的原长度,则终止对待编码数据块的编码处理。然后编解码器可以重新发送请求读取待编码数据块,读取的待编码数据块无需进行编码处理,直接进行存储。可选的,编解码器还可以在对待编码数据块进行编码时,如果检测到编码处理输出的编码长度大于待编码数据块的大小,则终止对待编码数据块的编码处理。
本申请实施例提供了一种混洗方法。编解码器根据第一混洗等级,确定待编码数据块对应的至少一个第一混洗组。其中,第一混洗组包含多个第一混洗单元,第一混洗单元包含至少一个编码流。然后,编解码器确定各第一混洗单元的编码长度,根据各第一混洗单元的编码长度,在各第一混洗单元中,确定输出混洗单元和输入混洗单元。之后,编解码器将输出混洗单元中第一预设数目个待混洗流块,发送至输入混洗单元,作为输入混洗单元中的第一待编码流块,以通过输入混洗单元根据预设的编码算法对第一待编码流块进行编码。这样,通过对待编码数据块的各编码流进行混洗,可以保证各编码流的编码长度相近,从而避免由于各个编码流之间的对齐要求造成的补数过多,进而降低编码率。同时,还可以避免各编码流之间产生死锁情况。
本申请实施例还提供了一种混洗方法,该混洗方法应用于解码过程。如图13所示,具体步骤如下:
步骤1301,获取待解码数据块对应的多个解码流。
步骤1301的处理过程与步骤501的处理过程类似,此处不再赘述。
步骤1302,根据第一混洗等级,将多个解码流划分为多个第一混洗单元,并将多个第一混洗单元划分为至少一个第一混洗组。其中,第一混洗单元包含至少一个解码流,第一混洗组包含多个第一混洗单元。
步骤1302的处理过程与步骤502的处理过程类似,此处不再赘述。
步骤1303,针对每个第一混洗组中的每个第一混洗单元,将该第一混洗单元包含的解码流中的待解码流块的总编码长度,确定为该第一混洗单元的编码长度。
可选的,针对混洗处理和解码处理同步进行的情况,编解码器还可以将第一混洗单元包含的解码流中的待解码流块和已解码流块的总编码长度,确定为该第一混洗单元的编码长度。
步骤1303的处理过程与步骤503的处理过程类似,此处不再赘述。
步骤1304,根据各第一混洗单元的编码长度,在各第一混洗单元中,确定输出混洗单元和输入混洗单元。
步骤1304的处理过程与步骤504的处理过程类似,此处不再赘述。
可选的,如图14所示,编解码器根据各第一混洗单元的编码长度,在各第一混洗单元中,确定输出混洗单元和输入混洗单元的处理过程如下:
步骤1401,根据各第一混洗单元的编码长度,确定各第一混洗单元的混洗类型。其中,编解码器根据各第一混洗单元的编码长度,确定各第一混洗单元的混洗类型的方式可以是多种多样的,本申请实施例提供了两种可行的方式,具体如下:
方式一,针对每个第一混洗单元,编解码器可以根据该第一混洗单元的编码长度与其他第一混洗单元的编码长度的第一差值,确定该第一混洗单元的混洗类型。具体处理过程如下:
步骤一,针对各第一混洗单元中的每个第一混洗单元,确定该第一混洗单元的编码长度与其他第一混洗单元的编码长度的第一差值。
示例五,如图15所示,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个解码流为例,解码流1的编码长度为n+5,解码流2的编码长度为n+9,解码流3的编码长度为n,解码流4的编码长度为n+3,n为正整数,则解码流1对应的第一差值为{-4,5,2},解码流2对应的第一差值为{4,9,6},解码流3对应的第一差值为{-5,-9,-3},解码流4对应的第一差值为{-2,-6,3}。
步骤二,根据该第一混洗单元对应的第一差值,确定该第一混洗单元的混洗类型。
步骤三,如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且目标差值均为正数,则确定该第一混洗单元的混洗类型为高编码类型。
例如,在上述示例五中,如图15所示,第一预设差值阈值为7,则解码流2的混洗类型为h。
步骤四,如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且目标差值中存在负数的目标差值,则确定该第一混洗单元的混洗类型为低编码类型。
例如,在上述示例五中,如图15所示,第一预设差值阈值为7,则解码流3的混洗类型为l。
步骤五,如果该第一混洗单元对应的第一差值中不存在绝对值大于或等于第一预设差值阈值的目标差值,则确定该第一混洗单元的混洗类型为中编码类型。
例如,在上述示例五中,如图15所示,第一预设差值阈值为7,则解码流1和解码流4的混洗类型为m。
方式二,针对每个第一混洗单元,编解码器可以根据该第一混洗单元的编码长度与平均编码长度的第二差值,确定该第一混洗单元的混洗类型。具体处理过程如下:
步骤一,根据各第一混洗单元的编码长度,确定平均编码长度。
步骤二,针对各第一混洗单元中的每个第一混洗单元,确定该第一混洗单元的编码长度与平均编码长度的第二差值。
步骤三,根据该第一混洗单元对应的第二差值,确定该第一混洗单元的混洗类型。
步骤四,如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且第二差值为正数,则确定该第一混洗单元的混洗类型为高编码类型。
步骤五,如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且第二差值为负数,则确定该第一混洗单元的混洗类型为低编码类型。
步骤六,如果该第一混洗单元对应的第二差值的绝对值小于第二预设差值阈值,则确定该第一混洗单元的混洗类型为中编码类型。
步骤1401的处理过程与步骤601的处理过程类似,此处不再赘述。
步骤1402,根据各第一混洗单元的混洗类型和预设的混洗规则,在各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元。
可选的,编解码器根据各第一混洗单元的混洗类型和预设的混洗规则,在各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元的处理过程如下:
步骤一,如果高解码类型的第一目标混洗单元的第一数目大于低解码类型的第二目标混洗单元的第二数目,则将第二目标混洗单元确定为输出混洗单元,并针对每个输出混洗单元,在第一目标混洗单元中,确定至少一个第一目标混洗单元作为该输出混洗单元对应的输入混洗单元。
步骤二,如果高解码类型的第一目标混洗单元的第一数目小于或等于低解码类型的第二目标混洗单元的第二数目,则将第一数目个第二目标混洗单元确定为输出混洗单元,并针对每个输出混洗单元,在第一目标混洗单元中,确定至少一个第一目标混洗单元作为该输出混洗单元对应的输入混洗单元。
步骤1402的处理过程与步骤602的处理过程类似,此处不再赘述。
步骤1305,将输出混洗单元中第一预设数目个待混洗流块,发送至输入混洗单元,作为输入混洗单元中的第一待解码流块,以通过输入混洗单元根据预设的解码算法对第一待解码流块进行解码。
可选的,针对每个输出混洗单元,将该输出混洗单元中第二预设数目个待混洗流块,发送至该输出混洗单元对应的输入混洗单元,作为该输入混洗单元中的第一待解码流块。
例如,如图16所示,以4个混洗单元为一个混洗组进行混洗,每个混洗单元包含一个解码流为例,解码流1至解码流4的混洗类型为mhlm,则解码流3为输出混洗单元,解码流2为解码流3的输入混洗单元,则解码流1可以向解码流1输出1个待混洗流块,解码流3可以向解码流2输出1个待混洗流块,解码流4可以向解码流4输出1个待混洗流块。这样,如图17所示,混洗完成后解码流1的编码长度为n+8,解码流2的编码长度为n+9,解码流3的编码长度为n+3,解码流4的编码长度为n+6,解码流1至解码流4的混洗类型为mmmm。
步骤1305的处理过程与步骤505的处理过程类似,此处不再赘述。
作为一种可选地实施方式,编解码器根据第二混洗等级,确定待解码数据块对应的至少一个第二混洗组。其中,第二混洗组包含多个第二混洗单元,第二混洗单元包含至少一个解码流。然后,编解码器将各第二混洗单元中的待解码流块作为待混洗流块重新进行混洗处理,直到各第二混洗单元的编码长度满足预设接近度条件。
在实施中,编解码器根据第一混洗等级对待解码数据块对应的解码流进行混洗后,编解码器还可以进一步根据第二混洗等级,确定待解码数据块对应的至少一个第二混洗组。其中,第二混洗组包含多个第二混洗单元,第二混洗单元包含至少一个解码流。编解码器根据第二混洗等级,确定待解码数据块对应的至少一个第二混洗组的处理过程如步骤1301类似,此处不再赘述。然后,编解码器可以将各第二混洗单元中的待解码流块作为待混洗流块重新进行混洗处理,直到各第二混洗单元的编码长度满足预设接近度条件。
需要说明的是,编解码器根据第二混洗等级对待解码数据块对应的解码流进行混洗后,还可以进一步根据第三混洗等级对待解码数据块对应的解码流进行混洗。例如,编解码器可以按照混洗等级1-混洗等级2—混洗等级3对待解码数据块对应的解码流进行混洗,也可以按照混洗等级1-混洗等级3—混洗等级2对待解码数据块对应的解码流进行混洗,还可以按照混洗等级2-混洗等级3—混洗等级1对待解码数据块对应的解码流进行混洗。
作为一种可选地实施方式,当编解码器检测到多个解码流中的第一解码流解码完成时,将多个解码流中未解码完成的第二解码流中第二预设数目个待解码流块发送至第一解码流,作为第一解码流中的待解码流块。
在实施中,为了进一步平衡各个解码流的编码长度,提高小数据块解码时的解码率。编解码器中可以预先存储有第三预设数目。该第三预设数目可以由技术人员根据经验进行设置。当编解码器检测到多个解码流中的第一解码流解码完成(也即第一解码流输出解码流结束(streamfinish)标记)时,可以将多个解码流中未解码完成的第二解码流中第三预设数目个待解码流块发送至第一解码流,作为第一解码流中的待解码流块。其中,第二解码流可以为多个解码流中全部的未解码完成的解码流,也可以为多个解码流中部分的未解码完成的解码流。
作为一种可选地实施方式,编解码器获取解码流的处理过程如下:
步骤一,获取待解码数据对应的编码头数据。
在实施中,对于编码数据块,如图10所示,编解码器采用头-数据块(header-datablock)映射的形式进行存储。当编解码器需要获取待解码数据时,编解码器需要先获取待解码数据对应的编码头数据。如图18所示,编码头数据的格式为二维格式,低维为x,高维维y,编码头数据的大小为低维编码头大小(headsizex)*高维编码头大小(headsizey)。编码头数据可以进一步在二维上均匀的划分为多个编码头块(block)。
步骤二,根据接收到的解码指令,在编码头数据中,确定解码指令对应的包含至少一个编码头块的解码区域,并获取至少一个编码头块对应的至少一个待解码数据块。其中,编码头块中包含编码头块对应的编码数据块的存储地址。
在实施中,编解码器获取到编码头数据后,可以根据接收到的解码指令,在编码头数据中,确定解码指令对应的包含至少一个编码头块的解码区域。如图18所示,解码区域的起始地址为编码头起始(headstart)位置,可以通过低维编码头偏移(headoffsetx)和高维编码头偏移(headoffsety)得到。该解码区域在低维方向上包含低维编码头数目(headnumberx)个编码头块,在高维上包含高维编码头数目(headnumbery)个编码头块。其中,编码头块中包含编码头块对应的编码数据块的存储地址。编解码器得到解码区域后,针对解码区域中的每个编码头块,编解码器可以根据该编码头块中存储的编码数据块的存储地址,获取待解码数据块。
步骤三,针对至少一个待解码数据块中的每个待解码数据块,将该待解码数据块划分为多个流块,并将多个流块发送至该待解码数据块对应的多个解码流,作为多个解码流中的待混洗流块。
在实施中,为了提高解码的吞吐量,编解码器可以通过多个解码流并行对同一待解码数据块进行解码。同理,编解码器在进行混洗时,针对每个待解码数据块,编解码器可以将该待解码数据块划分为多个流块,并将多个流块发送至该待解码数据块对应的多个解码流,作为多个解码流中的待混洗流块。可选的,编解码器可以将待解码数据块划分成多个行序列,每个行序列中包含至少一个待解码数据子块。然后,针对每个行序列中的每个待解码数据子块,编解码器可以将该待解码数据子块划分为多个流块。这样,可以保证每个解码流中的流块的数目相近。
可选的,打包格式下,待解码数据块由编码数据组成,编码数据的大小等于待编码数据块中待编码数据编码后的大小。
在实施中,如图10所示,打包格式下,解码数据块紧密存放,每个解码数据块由编码数据组成,编码数据的大小等于待编码数据块中待编码数据编码后的大小。也即,解码数据块占据的空间为待编码数据块编码后的实际大小。
可选的,非打包格式下,待解码数据块由编码数据和填充数据组成,编码数据的大小和填充数据的大小之和等于待编码数据块的大小。
在实施中,如图10所示,非打包格式下,每个解码数据块由编码数据和填充数据组成,编码数据的大小和填充数据的大小之和等于待编码数据块的大小。也即,每个解码数据块都占用相同的空间,且等于编码前一个完整的待编码数据块的大小。其中,前一部分为编码数据,后一部分为保留的填充数据。
可选的,待解码数据块由属于同一源数据块中的多个源数据子块对应的编码数据子块组成。在打包格式下,编码数据子块由编码数据组成,编码数据的大小等于源数据子块中待编码数据编码后的大小。在非打包格式下,编码数据子块由编码数据和填充数据组成,编码数据的大小和填充数据的大小之和等于源数据子块的大小。
在实施中,编解码器根据不同的编码指令,在源数据中确定多个编码区域时,可能会将一个完整的源数据块切分成多个源数据子块。其中,各编码指令对应的编码区域在相邻的那一侧,要么都编码完整的源数据块,而且源数据块之间互不重叠;要么各自编码同一源数据块的一部分(也即源数据子块),且各源数据子块在源数据块内部的边界正好重叠。如图11所示,四个编码指令在源数据中确定出的四个编码区域将部分源数据块(以灰色斜线方块表示)切分成多个源数据子块,同一源数据块中的各源数据子块的边界正好重叠。编解码器根据不同编码指令对同一源数据块中的各源数据子块进行编码,得到编码数据子块。编解码器在对同一源数据块中的多个源数据子块对应的编码数据子块进行存储时,可以将该编码数据子块存储至同一编码数据块中。这样,可以实现多条编码指令协同完成特定编码区域的拼接,其效果与通过一条编码指令进行编码完全相同,并且这些编码指令的执行顺序可以任意甚至并发执行,从而在多核的源数据划分和单核内部为了流水执行而分块的情况下,能够将编码任务进行划分。
如图12a所示,一个源数据块在低维和高维均被划分为两部分,使得该源数据块划分为4个源数据子块,分别为tl(top-left),tr(top-right),bl(bottom-left)和br(bottom-right)。其中,每个源数据子块的大小如图12a所示,编解码器可以通过源数据块内部的blockleft,blockright,blocktop,blockbottom四个参数指定。每个源数据子块可以是编码数据,也可以是非编码数据。在非打包格式下的编码数据块中,上述4个源数据子块对应4个编码数据子块可以按照tl-tr-bl-br的固定顺序存储,每个编码数据子块由编码数据和填充数据组成,编码数据的大小和填充数据的大小之和等于源数据子块的大小。也即,每个编码数据子块所占据的空间为该编码数据子块对应的源数据子块编码前的大小。这样,编码数据块的空间与源数据块的大小相同,从而保证了如果源数据块的每个源数据子块都是由不同的编码指令进行编码,每条编码指令都可以根据划分信息(可以通过指令域计算得到)计算出所负责的编码数据子块的地址,从而实现多条编码指令结果的拼接。
如图12a所示,编解码器可以通过编码移动(move)等方式将非打包格式下的编码数据块转化为打包格式下的编码数据块。在打包格式下的编码数据块中,每个编码数据子块由编码数据组成,编码数据的大小等于源数据子块中待编码数据编码后的大小。其中,各编码数据子块之间紧密存放,每个编码数据子块的起始地址需要根据前面的编码数据子块的实际大小累加获得,整个编码数据块所占据的空间就是所有编码数据子块的大小之和。
如图12b所示,一个源数据块在高维被划分为两部分,使得该源数据块划分为2个源数据子块,分别为tl和bl,或者bl和br。如图12c所示,一个源数据块在低维被划分为两部分,使得该源数据块划分为2个源数据子块,分别为tl和tr,或者tr和br。
一个源数据块在低维和高维均不进行划分,仅有一个源数据子块,该源数据子块可以为tl、tr、bl或br。如图12d所示,一个源数据块仅有tl一个源数据子块。
可选的,解码时的数据划分与编码时可能不同,当解码指令的数据划分与编码数据块的划分不对齐时,就会有编码时的边界数据块,对于边界数据块,如果它只有tl部分,那么如果这部分是未编码的源数据形式,那么可以只读出所需要的部分,如果是已编码的编码数据形式,那么需要对整个编码数据块解压后,只将需要的部分写到目的地址。如果边界数据块本身包含四个部分,并且与编码时的划分不同,那么会出现对于4个编码数据子块的再次划分。如图19所示,实线框表示编码(encode)时的数据划分,虚线框表示了解码时的数据划分,它们的划分点不同,使得解码时的待解码数据块可能是一个编码数据块的一部分,如左斜线方块表示的tl块,也可能是最多4个子数据块的部分拼接而成,如竖线方块表示的br块。
这种划分共有如图20所示的四种情况,分别对应解码划分的交叉点和编码划分的交叉点不同的位置关系,考虑到每种情况下解码时都需要取4种不同的数据块(tl,tr,bl,br),解码时共有16种不同的数据块。此处只考虑了最一般的情形,其它的划分不足4块或者编码和解码时的划分对齐的情况可以看做这4类情况的特例。
本申请实施例提供了一种混洗方法。编解码器根据第一混洗等级,确定待解码数据块对应的至少一个第一混洗组。其中,第一混洗组包含多个第一混洗单元,第一混洗单元包含至少一个解码流。然后,编解码器确定各第一混洗单元的编码长度,根据各第一混洗单元的编码长度,在各第一混洗单元中,确定输出混洗单元和输入混洗单元。之后,编解码器将输出混洗单元中第一预设数目个待混洗流块,发送至输入混洗单元,作为输入混洗单元中的第一待解码流块,以通过输入混洗单元根据预设的解码算法对第一待解码流块进行解码。这样,通过对待解码数据块的各解码流进行混洗,可以保证各解码流的编码长度相近,从而避免由于各个解码流之间的对齐要求造成的补数过多,进而降低解码流。同时,还可以避免各解码流之间产生死锁情况。
本申请实施例还提供了一种计算装置,所述计算装置包括处理器;
所述处理器,用于接收源数据,并使用上述方法对所述源数据进行编码,得到编码数据。
作为一种可选的实施方式,所述处理器包括控制模块、片上存储模块和运算模块;
所述控制模块,用于将所述处理器接收到的机器指令译码为编码微指令,利用所述编码微指令控制所述运算模块对所述片上存储模块中的源数据进行运算,并写入片外存储模块;
所述控制模块包括编码单元,所述编码单元用于执行编码指令,将所述编码指令译码为编码微指令。
本申请实施例还提供了一种计算装置,所述计算装置包括处理器;
所述处理器,用于接收编码数据,并使用上述方法对所述编码数据进行解码,得到源数据。
作为一种可选的实施方式,所述处理器包括控制模块、片上存储模块和运算模块;
所述控制模块,用于将所述处理器接收到的机器指令译码为解码微指令,利用所述解码微指令控制所述运算模块对片外存储模块中的编码数据进行运算,并写入所述片上存储模块;
所述控制模块包括解码单元,所述解码单元用于执行解码指令,将所述解码指令译码为解码微指令。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
进一步需要说明的是,虽然图2-4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-4中的至少一部分步骤可以包含多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
应该理解,上述的装置实施例仅是示意性的,本披露的装置还可通过其它的方式实现。例如,上述实施例中所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如,多个单元、模块或组件可以结合,或者可以集成到另一个系统,或一些特征可以忽略或不执行。
另外,若无特别说明,在本披露各个实施例中的各功能单元/模块可以集成在一个单元/模块中,也可以是各个单元/模块单独物理存在,也可以两个或两个以上单元/模块集成在一起。上述集成的单元/模块既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元/模块如果以硬件的形式实现时,该硬件可以是数字电路,模拟电路等等。硬件结构的物理实现包含但不局限于晶体管,忆阻器等等。若无特别说明,所述人工智能处理器可以是任何适当的硬件处理器,比如cpu、gpu、fpga、dsp和asic等等。若无特别说明,所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如,阻变式存储器rram(resistiverandomaccessmemory)、动态随机存取存储器dram(dynamicrandomaccessmemory)、静态随机存取存储器sram(staticrandom-accessmemory)、增强动态随机存取存储器edram(enhanceddynamicrandomaccessmemory)、高带宽内存hbm(high-bandwidthmemory)、混合存储立方hmc(hybridmemorycube)等等。
所述集成的单元/模块如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本披露的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包含若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
依据以下条款可更好地理解前述内容:
条款a1,对应权1;条款a2,对应权2;条款a3,对应权3;条款a4,对应权4;条款a5,对应权5;条款a6,对应权6;条款a7,对应权7;条款a8,对应权8;条款a9,对应权9;条款a10,对应权10;条款a11,对应权11;条款a12,对应权12;条款a13,对应权13;条款a14,对应权14;条款a15,对应权15;条款a16,对应权16;条款a17,对应权17;条款a18,对应权18;条款a19,对应权19;条款a20,对应权20;条款a21,对应权21;条款a22,对应权22;条款a23,对应权23;条款a24,对应权24;条款a25,对应权25;条款a26,对应权26;条款a27,对应权27;条款a28,对应权28;条款a29,对应权29;条款a30,对应权30;条款a31,对应权31;条款a32,对应权32;条款a33,对应权33;条款a34,对应权34;条款a35,对应权35。
例如,条款a1、一种混洗方法,所述方法应用于通用处理器,所述方法包括:
获取待编码数据块对应的多个编码流;
根据第一混洗等级,将所述多个编码流划分为多个第一混洗单元,并将所述多个第一混洗单元划分为至少一个第一混洗组,所述第一混洗单元包含至少一个编码流,所述第一混洗组包含多个第一混洗单元;
针对每个第一混洗组中的每个第一混洗单元,将该第一混洗单元包含的编码流中的待编码流块的总编码长度,确定为该第一混洗单元的编码长度;
根据所述各第一混洗单元的编码长度,在所述各第一混洗单元中,确定输出混洗单元和输入混洗单元;
将所述输出混洗单元中第一预设数目个待混洗流块,发送至所述输入混洗单元,作为所述输入混洗单元中的第一待编码流块,以通过所述输入混洗单元根据预设的编码算法对所述第一待编码流块进行编码。
条款a2、根据条款a1所述的方法,所述根据所述各第一混洗单元的编码长度,在所述各第一混洗单元中,确定输出混洗单元和输入混洗单元,包括:
根据所述各第一混洗单元的编码长度,确定所述各第一混洗单元的混洗类型;
根据所述各第一混洗单元的混洗类型和预设的混洗规则,在所述各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元;
所述将所述输出混洗单元中第一预设数目个待混洗流块,发送至所述输入混洗单元,作为所述输入混洗单元中的第一待编码流块,包括:
针对每个输出混洗单元,将该输出混洗单元中第二预设数目个待混洗流块,发送至该输出混洗单元对应的输入混洗单元,作为该输入混洗单元中的第一待编码流块。
条款a3、根据条款a2所述的方法,所述根据所述各第一混洗单元的编码长度,确定所述各第一混洗单元的混洗类型,包括:
针对所述各第一混洗单元中的每个第一混洗单元,确定该第一混洗单元的编码长度与其他第一混洗单元的编码长度的第一差值;
根据该第一混洗单元对应的第一差值,确定该第一混洗单元的混洗类型。
条款a4、根据条款a3所述的方法,所述根据该第一混洗单元对应的第一差值,确定该第一混洗单元的混洗类型,包括:
如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且所述目标差值均为正数,则确定该第一混洗单元的混洗类型为高编码类型;
如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且所述目标差值中存在负数的目标差值,则确定该第一混洗单元的混洗类型为低编码类型。
条款a5、根据条款a4所述的方法,所述方法还包括:
如果该第一混洗单元对应的第一差值中不存在绝对值大于或等于第一预设差值阈值的目标差值,则确定该第一混洗单元的混洗类型为中编码类型。
条款a6、根据条款a2所述的方法,所述根据所述各第一混洗单元的编码长度,确定所述各第一混洗单元的混洗类型,包括:
根据所述各第一混洗单元的编码长度,确定平均编码长度;
针对所述各第一混洗单元中的每个第一混洗单元,确定该第一混洗单元的编码长度与所述平均编码长度的第二差值;
根据该第一混洗单元对应的第二差值,确定该第一混洗单元的混洗类型。
条款a7、根据条款a6所述的方法,所述根据该第一混洗单元对应的第二差值,确定该第一混洗单元的混洗类型,包括:
如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且所述第二差值为正数,则确定该第一混洗单元的混洗类型为高编码类型;
如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且所述第二差值为负数,则确定该第一混洗单元的混洗类型为低编码类型。
条款a8、根据条款a7所述的方法,所述方法还包括:
如果该第一混洗单元对应的第二差值的绝对值小于第二预设差值阈值,则确定该第一混洗单元的混洗类型为中编码类型。
条款a9、根据条款a2所述的方法,所述根据所述各第一混洗单元的混洗类型和预设的混洗规则,在所述各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元,包括:
如果高编码类型的第一目标混洗单元的第一数目小于或等于低编码类型的第二目标混洗单元的第二数目,则将第一目标混洗单元确定为输出混洗单元,并针对每个输出混洗单元,在第二目标混洗单元中,确定至少一个第二目标混洗单元作为该输出混洗单元对应的输入混洗单元;
如果高编码类型的第一目标混洗单元的第一数目大于低编码类型的第二目标混洗单元的第二数目,则将第二数目个第一目标混洗单元确定为输出混洗单元,并针对每个输出混洗单元,在第二目标混洗单元中,确定至少一个第二目标混洗单元作为该输出混洗单元对应的输入混洗单元。
条款a10、根据条款a1所述的方法,所述方法还包括:
获取待编码的源数据;
根据接收到的编码指令,在所述源数据中,确定所述编码指令对应的编码区域,所述编码区域包含至少一个待编码数据块,所述待编码数据块为源数据块或源数据子块;
针对所述至少一个待编码数据块中的每个待编码数据块,将该待编码数据块划分为多个流块,并将所述多个流块发送至该待编码数据块对应的多个编码流,作为所述多个编码流中的待混洗流块。
条款a11、根据条款a1所述的方法,所述方法还包括:
当检测到多个编码流中的第一编码流编码完成时,将所述多个编码流中未编码完成的第二编码流中第四预设数目个待编码流块发送至所述第一编码流,作为所述第一编码流中的待编码流块。
条款a12、根据条款a1所述的方法,所述方法还包括:
如果各第一混洗组中待编码流块总编码长度大于所述待编码数据块的原长度,则终止对所述待编码数据块的编码处理。
条款a13、根据条款a1所述的方法,所述方法包括:
根据第二混洗等级,确定待编码数据块对应的至少一个第二混洗组,所述第二混洗组包含多个第二混洗单元,所述第二混洗单元包含至少一个编码流;
将各第二混洗单元中的待编码流块作为待混洗流块重新进行混洗处理,直到各第二混洗单元的编码长度满足预设接近度条件。
条款a14、根据条款a1所述的方法,所述通过所述输入混洗单元根据预设的编码算法对所述第一待编码流块进行编码,包括:
根据预设字符对应的第一编码规则,对所述第一待编码流块中包含的预设字符进行编码,得到第一编码数据;
根据预设的第二编码规则对所述第一编码数据进行编码。
条款a15、根据条款a10所述的方法,所述方法还包括:
生成各待编码数据块对应的编码数据块的编码头块,所述编码头块中包含所述编码头块对应的编码数据块的存储地址;
将各编码头块进行存储,并在所述各编码头块之后存储各编码数据块。
条款a16、根据条款a15所述的方法,所述编码数据块由编码数据组成,所述编码数据的大小等于待编码数据块中待编码数据编码后的大小;或者,
所述编码数据块由编码数据和填充数据组成,所述编码数据的大小和所述填充数据的大小之和等于待编码数据块的大小。
条款a17、根据条款a15所述的方法,所述编码数据块由属于同一源数据块中的多个源数据子块对应的编码数据子块组成;
所述编码数据子块由编码数据组成,所述编码数据的大小等于源数据子块中待编码数据编码后的大小;或者,
所述编码数据子块由编码数据和填充数据组成,所述编码数据的大小和所述填充数据的大小之和等于所述源数据子块的大小。
条款a18、一种混洗方法,所述方法包括:
获取待解码数据块对应的多个解码流;
根据第一混洗等级,将所述多个解码流划分为多个第一混洗单元,并将所述多个第一混洗单元划分为至少一个第一混洗组,所述第一混洗单元包含至少一个解码流,所述第一混洗组包含多个第一混洗单元;
针对每个第一混洗组中的每个第一混洗单元,将该第一混洗单元包含的解码流中的待解码流块的总编码长度,确定为该第一混洗单元的编码长度;
根据所述各第一混洗单元的编码长度,在所述各第一混洗单元中,确定输出混洗单元和输入混洗单元;
将所述输出混洗单元中第一预设数目个待混洗流块,发送至所述输入混洗单元,作为所述输入混洗单元中的第一待解码流块,以通过所述输入混洗单元根据预设的解码算法对所述第一待解码流块进行解码。
条款a19、根据条款a18所述的方法,所述根据所述各第一混洗单元的编码长度,在所述各第一混洗单元中,确定输出混洗单元和输入混洗单元,包括:
根据所述各第一混洗单元的编码长度,确定所述各第一混洗单元的混洗类型;
根据所述各第一混洗单元的混洗类型和预设的混洗规则,在所述各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元;
所述将所述输出混洗单元中第一预设数目个待混洗流块,发送至所述输入混洗单元,作为所述输入混洗单元中的第一待解码流块,包括:
针对每个输出混洗单元,将该输出混洗单元中第二预设数目个待混洗流块,发送至该输出混洗单元对应的输入混洗单元,作为该输入混洗单元中的第一待解码流块。
条款a20、根据条款a19所述的方法,所述根据所述各第一混洗单元的编码长度,确定所述各第一混洗单元的混洗类型,包括:
针对所述各第一混洗单元中的每个第一混洗单元,确定该第一混洗单元的编码长度与其他第一混洗单元的编码长度的第一差值;
根据该第一混洗单元对应的第一差值,确定该第一混洗单元的混洗类型。
条款a21、根据条款a20所述的方法,所述根据该第一混洗单元对应的第一差值,确定该第一混洗单元的混洗类型,包括:
如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且所述目标差值均为正数,则确定该第一混洗单元的混洗类型为高编码类型;
如果该第一混洗单元对应的第一差值中存在绝对值大于或等于第一预设差值阈值的目标差值,且所述目标差值中存在负数的目标差值,则确定该第一混洗单元的混洗类型为低编码类型。
条款a22、根据条款a21所述的方法,所述方法还包括:
如果该第一混洗单元对应的第一差值中不存在绝对值大于或等于第一预设差值阈值的目标差值,则确定该第一混洗单元的混洗类型为中编码类型。
条款a23、根据条款a19所述的方法,所述根据所述各第一混洗单元的编码长度,确定所述各第一混洗单元的混洗类型,包括:
根据所述各第一混洗单元的编码长度,确定平均编码长度;
针对所述各第一混洗单元中的每个第一混洗单元,确定该第一混洗单元的编码长度与所述平均编码长度的第二差值;
根据该第一混洗单元对应的第二差值,确定该第一混洗单元的混洗类型。
条款a24、根据条款a23所述的方法,所述根据该第一混洗单元对应的第二差值,确定该第一混洗单元的混洗类型,包括:
如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且所述第二差值为正数,则确定该第一混洗单元的混洗类型为高编码类型;
如果该第一混洗单元对应的第二差值的绝对值大于或等于第二预设差值阈值,且所述第二差值为负数,则确定该第一混洗单元的混洗类型为低编码类型。
条款a25、根据条款a24所述的方法,所述方法还包括:
如果该第一混洗单元对应的第二差值的绝对值小于第二预设差值阈值,则确定该第一混洗单元的混洗类型为中编码类型。
条款a26、根据条款a19所述的方法,所述根据所述各第一混洗单元的混洗类型和预设的混洗规则,在所述各第一混洗单元中,确定输出混洗单元以及每个输出混洗单元对应的输入混洗单元,包括:
如果高解码类型的第一目标混洗单元的第一数目大于低解码类型的第二目标混洗单元的第二数目,则将第二目标混洗单元确定为输出混洗单元,并针对每个输出混洗单元,在第一目标混洗单元中,确定至少一个第一目标混洗单元作为该输出混洗单元对应的输入混洗单元;
如果高解码类型的第一目标混洗单元的第一数目小于或等于低解码类型的第二目标混洗单元的第二数目,则将第一数目个第二目标混洗单元确定为输出混洗单元,并针对每个输出混洗单元,在第一目标混洗单元中,确定至少一个第一目标混洗单元作为该输出混洗单元对应的输入混洗单元。
条款a27、根据条款a18所述的方法,所述方法还包括:
获取待解码数据对应的编码头数据;
根据接收到的解码指令,在所述编码头数据中,确定所述解码指令对应的包含至少一个编码头块的解码区域,并获取所述至少一个编码头块对应的至少一个待解码数据块,所述编码头块中包含所述编码头块对应的编码数据块的存储地址;
针对所述至少一个待解码数据块中的每个待解码数据块,将该待解码数据块划分为多个流块,并将所述多个流块发送至该待解码数据块对应的多个解码流,作为所述多个解码流中的待混洗流块。
条款a28、根据条款a27所述的方法,所述待解码数据块由编码数据组成,所述编码数据的大小等于待编码数据块中待编码数据编码后的大小;或者,
所述待解码数据块由编码数据和填充数据组成,所述编码数据的大小和所述填充数据的大小之和等于待编码数据块的大小。
条款a29、根据条款a27所述的方法,所述待解码数据块由属于同一源数据块中的多个源数据子块对应的编码数据子块组成;
所述编码数据子块由编码数据组成,所述编码数据的大小等于源数据子块中待编码数据编码后的大小;或者,
所述编码数据子块由编码数据和填充数据组成,所述编码数据的大小和所述填充数据的大小之和等于所述源数据子块的大小。
条款a30、根据条款a18所述的方法,所述方法还包括:
当检测到多个解码流中的第一解码流解码完成时,将所述多个解码流中未解码完成的第二解码流中第二预设数目个待解码流块发送至所述第一解码流,作为所述第一解码流中的待解码流块。
条款a31、根据条款a18所述的方法,所述方法还包括:
根据第二混洗等级,确定待解码数据块对应的至少一个第二混洗组,所述第二混洗组包含多个第二混洗单元,所述第二混洗单元包含至少一个解码流;
将各第二混洗单元中的待解码流块作为待混洗流块重新进行混洗处理,直到各第二混洗单元的编码长度满足预设接近度条件。
条款a32、一种计算装置,所述计算装置包括处理器;
所述处理器,用于接收源数据,并使用如条款a1-17任一项所述方法对所述源数据进行编码,得到编码数据。
条款a33、根据条款a32所述的计算装置,所述处理器包括控制模块、片上存储模块和运算模块;
所述控制模块,用于将所述处理器接收到的机器指令译码为编码微指令,利用所述编码微指令控制所述运算模块对所述片上存储模块中的源数据进行运算,并写入片外存储模块;
所述控制模块包括编码单元,所述编码单元用于执行编码指令,将所述编码指令译码为编码微指令。
条款a34、一种计算装置,所述计算装置包括处理器;
所述处理器,用于接收编码数据,并使用如条款a18-31任一项所述方法对所述编码数据进行解码,得到源数据。
条款a35、根据条款a34所述的计算装置,所述处理器包括控制模块、片上存储模块和运算模块;
所述控制模块,用于将所述处理器接收到的机器指令译码为解码微指令,利用所述解码微指令控制所述运算模块对片外存储模块中的编码数据进行运算,并写入所述片上存储模块;
所述控制模块包括解码单元,所述解码单元用于执行解码指令,将所述解码指令译码为解码微指令。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本披露的方法及其核心思想。同时,本领域技术人员依据本披露的思想,基于本披露的具体实施方式及应用范围上做出的改变或变形之处,都属于本披露保护的范围。综上所述,本说明书内容不应理解为对本披露的限制。