压缩数据的排布方法、装置和电子设备与流程

文档序号:23341966发布日期:2020-12-18 16:39阅读:93来源:国知局
压缩数据的排布方法、装置和电子设备与流程

本申请涉及数据压缩领域,尤其涉及一种压缩数据的排布方法、装置和电子设备。



背景技术:

随着人们对高品质图像的需求逐渐增多,如4k、8k等超高清视频,这些大尺寸高分辨率的图像越发广泛的被使用,导致在对这些图像数据进行处理时,对系统的带宽和处理速度的要求越来越高,对图像进行压缩也因此被广泛使用于图形图像处理领域。

在对高分辨率图像实时压缩/解压处理中,需要使解压缩端能一个时钟周期解出多个像素数据,如在8k,60帧,时钟频率600m的系统下,需要确保每个时钟周期并行处理4像素,这给图像压缩熵编码后的变长编码的数据排布带来了极大的挑战。目前,现有技术做法是将需要同时解出的数据,存放在不同的位置,这样就能同时抓取不同位置的压缩数据来进行解压缩,从而实现一个时钟周期解出多个像素。但这种方法带来的问题是,每个存储压缩数据的位置都要按照空间占用最多的情形来分配,会极大地浪费ddr(ddrsdram,双倍速率同步动态随机存储器)内存的存储空间。



技术实现要素:

本申请提出了一种压缩数据的排布方法、装置和电子设备,以减少压缩数据占用的空间,同时能够在同一时钟周期解压多个像素的数据,实现了满足数据处理速度的同时,避免ddr的存储空间的浪费。

为了实现上述目的,本申请采用了如下方案:

一方面,本申请实施例提供了一种压缩数据的排布方法,应用于压缩端,包括:

确定用于存储第一目标数据的目标存储空间,所述第一目标数据为待压缩数据经过熵编码后得到的数据;

将所述目标存储空间切分为m个大小相等的子空间;

从所述m个大小相等的子空间中确定n个第一子空间和m-n个第二子空间,并确定所述n个第一子空间的位置和每个第一子空间的数据排布方向,n≥1;

将所述第一目标数据分成n组,获取n组第一目标子数据,并将每一组所述第一目标子数据分别存入对应的第一子空间,在存入过程中,若目标第一子空间的剩余空间容量小于等于第一预设值,将所述目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部;

当所述第一目标数据全部存入所述目标存储空间时,生成与所述第一目标数据对应的压缩数据流。

可选的,所述确定用于存储第一目标数据的目标存储空间包括:

确定所述目标存储空间的首地址且所述目标存储空间为一块连续的存储空间。

可选的,所述将所述目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部包括:

确定所述第二子空间的数据排布方向与所述第一子空间的数据排布方向相同。

可选的,将所述第一目标数据分成n组,获取n组第一目标子数据,并将每一组所述第一目标子数据分别存入对应的第一子空间,在存入过程中,若目标第一子空间的剩余空间容量小于等于第一预设值,将所述目标第一子空间数据排布方向尾端连接至第二子空间头部,包括:

对每一组所述第一目标子数据进行分段,并使每一组的数据段数量相同;

当目标数据段无法完全存入目标第一子空间时,对所述目标数据段进行分割,使所述目标数据段一部分存入所述第一子空间,另一部分存入所述第二子空间。

可选的,所述若所述目标第一子空间的剩余空间容量小于等于第一预设值,将所述目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部包括:

第一判断步骤:判断所述目标第一子空间的剩余空间容量是否小于等于第一预设值;

第一增加步骤:若所述目标第一子空间的剩余空间容量小于等于第一预设值,将所述目标第一子空间数据排布方向尾端连接至一个第二子空间的头部,形成新的目标第一子空间,并返回所述第一判断步骤,直至目标第一子空间对应的所述第一目标子数据全部存入。

一方面,本申请实施例提供了一种压缩数据的排布方法,应用于解压端,包括:

从与第一目标数据对应的压缩数据流中获取用于抽取第一目标数据的目标数据包,所述第一目标数据为待压缩数据经过熵编码后得到的数据;

将所述目标数据包切分为m个大小相等的子数据包;

从所述m个大小相等的子数据包中确定n个第一子数据包和m-n个第二子数据包,并确定所述n个第一子数据包的位置和每个第一子数据包的数据排布方向,n≥1;

从n个第一子数据包中分别抽取出对应的第一目标子数据,若目标第一子据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设规则,将所述目标第一子数据包的数据排布方向尾端连接至第二子数据包头部;

当所述第一目标数据全部被抽出时,获取所述第一目标数据。

可选的,所述将所述目标第一子数据包的数据排布方向尾端连接至第二子数据包头部,包括:

确定所述第二子数据包的数据排布方向与所述第一子数据包的数据排布方向相同。

可选的,所述若目标第一子数据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设抽取规则,将所述目标第一子数据包的数据排布方向尾端连接至第二子数据包头部,包括:

第一判断步骤:判断第一子数据包中已经抽出数据的累计位宽是否大于等于第二预设值;

第一增加步骤:若第一子数据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设规则,将所述目标第一子数据包的数据排布方向尾端连接至一个第二子数据包头部,形成新的目标第一子数据包,并返回所述第一判断步骤,直至目标第一子数据包对应的所述第一目标子数据全部抽取出。

一方面,本申请实施例提供了一种压缩数据的排布装置,包括:

第一处理模块,用于确定用于存储第一目标数据的目标存储空间,所述第一目标数据为待压缩数据经过熵编码后得到的数据;

第二处理模块,用于将所述目标存储空间切分为m个大小相等的子空间;

第三处理模块,用于从所述m个大小相等的子空间中确定n个第一子空间和m-n个第二子空间,并确定所述n个第一子空间的位置和每个第一子空间的数据排布方向,n≥1;

第四处理模块,用于将所述第一目标数据分成n组,获取n组第一目标子数据,并将每一组所述第一目标子数据分别存入对应的第一子空间,在存入过程中,若目标第一子空间的剩余空间容量小于等于第一预设值,将所述目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部;

生成模块,用于在当所述第一目标数据全部存入所述目标存储空间时,生成与所述第一目标数据对应的压缩数据流。

一方面,本申请实施例提供了一种压缩数据的排布装置,包括:

第一处理模块,用于从与第一目标数据对应的压缩数据流中获取用于抽取第一目标数据的目标数据包,所述第一目标数据为待压缩数据经过熵编码后得到的数据;

第二处理模块,用于将所述目标数据包切分为m个大小相等的子数据包;

第三处理模块,用于从所述m个大小相等的子数据包中确定n个第一子数据包和m-n个第二子数据包,并确定所述n个第一子数据包的位置和每个第一子数据包的数据排布方向,n≥1;

第四处理模块,用于从n个第一子数据包中分别抽取出对应的第一目标子数据,若目标第一子据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设规则,将所述目标第一子数据包的数据排布方向尾端连接至第二子数据包头部;

获取模块,用于在当所述第一目标数据全部被抽出时,获取所述第一目标数据。

一方面,本申请实施例提供还了一种电子设备,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序,所述程序被所述处理器执行时实现如本申请实施例提供的任一种压缩数据的排布方法的步骤。

一方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如本申请实施例提供的任一种压缩数据的排布方法的步骤。

本申请实施例提供的技术方案带来的有益效果至少包括:

本申请实施例提供的压缩排布处理方法通过先确定用于存储第一目标数据的目标存储空间,其次将所述目标存储空间切分为m个大小相等的子空间,然后再从所述m个大小相等的子空间中确定n个第一子空间和m-n个第二子空间,并确定所述n个第一子空间的位置和每个第一子空间的数据排布方向,n≥1;之后将所述第一目标数据分成n组,获取n组第一目标子数据,并将每一组所述第一目标子数据分别存入对应的第一子空间,在存入过程中,若目标第一子空间的剩余空间容量小于等于第一预设值,将所述目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部;最后当所述第一目标数据全部存入所述目标存储空间时,生成与所述第一目标数据对应的压缩数据流,通过上述方法,能够减少压缩数据占用的空间,实现在同一时钟周期解压多个像素的数据时对存储空间的充分利用,避免了存储空间浪费。

附图说明

图1为本申请实施例提供的一种压缩数据的排布方法流程图;

图2为本申请实施例提供的一种压缩数据的排布方法示意图;

图3为本申请实施例提供的一种压缩数据的排布方法示意图;

图4为本申请实施例提供的一种压缩数据的排布方法示意图;

图5为本申请实施例提供的一种压缩数据的排布方法示意图。

图6为本申请实施例提供的一种压缩数据的排布方法示意图;

图7为本申请实施例提供的一种压缩数据的排布方法流程图;

图8为本申请实施例提供的一种压缩数据的排布方法示意图;

图9为本申请实施例提供的一种压缩数据的排布方法示意图;

图10为本申请实施例提供的一种压缩数据的排布方法示意图;

图11为本申请实施例提供的一种压缩数据的排布装置结构示意图;

图12为本申请实施例提供的一种压缩数据的排布装置结构示意图;

图13为本申请实施例提供的一种压缩数据的排布装置结构示意图;

图14为本申请实施例提供的一种电子设备结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例的附图,对本申请实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于所描述的本申请的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请的保护范围。

本申请的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。

下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的语音检测方法进行详细地说明。

此外,下面所描述的本申请不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。

本申请实施例提供的压缩数据排布方法可应用于原数据经过熵编码后得到的数据,也就是对编码数据的打包;或者应用于对压缩数据流的解包过程;

参考图1示出了本申请实施例提供的压缩数据的排布方法的流程图示意,所述压缩数据的排布方法包括:

步骤101,确定用于存储第一目标数据的目标存储空间,第一目标数据为待压缩数据经过熵编码后得到的数据;

可选的,确定用于存储第一目标数据的目标存储空间包括:

确定目标存储空间的首地址且目标存储空间为一块连续的存储空间。

根据相关预设参数,确定一块连续的存储空间作为目标存储空间用于存储第一目标数据,可以根据待压缩数据经过熵编码后得到的数据或其他相关参数对目标存储空间需要的大小进行估算,选择适合的一块连续的存储空间。

步骤102,将目标存储空间切分为m个大小相等的子空间;

示例性的,参考图2,将目标存储空间20切分成了m个大小相等的子空间201、202、203……20m,这m个大小相等的子空间的大小可以根据预设参数进行调整,如图2中所示的每一个子空间大小都为32bit,也可以根据预设进行空间切分时使每个子空间大小为64bit等大小。

步骤103,从m个大小相等的子空间中确定n个第一子空间和m-n个第二子空间,并确定n个第一子空间的位置和每个第一子空间的数据排布方向,n≥1;

示例性的,参考图3,从m个大小相等的子空间201-20m中确认201和202这两个子空间为第一子空间,其他子空间则为第二子空间,其中201和202的数据排布方向如图3中箭头所示,分别为201从左到右,202从右到左;

值得注意的是,在子空间中的数据排布方向,如果是数据从左向右排,则数据msb(mostsignificantbit,最高有效位)在左,lsb(leastsignificantbit,最低有效位)在右边;如果是从右向左排,数据lsb在左,msb在右边。

步骤104,将第一目标数据分成n组,获取n组第一目标子数据,并将每一组第一目标子数据分别存入对应的第一子空间,在存入过程中,若目标第一子空间的剩余空间容量小于等于第一预设值,将目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部;

示例性的,参考图4,此时n=2,201和202为第一子空间,其他子空间为第二子空间,一个子空间的头部为20xa(x为1-m),尾端为20xb(x为1-m),如子空间201的头部为201a,尾端为201b;子空间20m的头部为20ma,尾端为20mb;

将第一目标数据分为两组,组1存入第一子空间201,数据排布方向为从左向右(如图4中箭头所示为子空间的数据排布方向),组2存入第一子空间202,数据排布方向为从右向左,如图4中所示,存入第一子空间201中的数据从左向右排布,201a为第一子空间201的头部,201b为201的尾端,随着组1中数据的不断存入,当第一子空间201中剩余的空间容量小于等于第一预设值时,将201b连接至目标存储空间中第一子空间相邻的第二子空间数据排布方向的头部,如图4中将201b连接至第一子空间202相邻的第二子空间203头部203a,在之后存储数据的过程中,若子空间201空间余量为0,将组1中剩余数据存入203;

当第一子空间202的剩余空间容量也小于等于预设值时,将其尾部202b连接至相邻于前一个第二子空间的下一个未被连接的第二子空间的头部,示例性的,如图4中201b已经连接至203a,此时目标数据的组1与组2继续分别存入第一子空间201、第一子空间202,这一过程中,第一子空间202的剩余容量不足预设值,则将202b连接至第二子空间204的头部204a;

如果多个组剩余空间同时不足的,则多个第一子空间按预设顺序连接第二子空间,如图4中若第一子空间201与202同时剩余容量小于等于第一预设值,则若预设顺序为201优先连接,且连接第二子空间的顺序为顺延连接相邻与第一子空间或相邻于已连接于第一子空间的未被连接的第二子空间;

值得注意的是,在步骤103中确定第一子空间时,可以使所有的第一子空间从目标存储地址的首地址开始相邻排布,这种排布方式可以极大的减少后续存入目标数据时的计算量,提高数据排布的效率,同时也能极大提高解压过程中解包环节获取第一目标数据的速度。

步骤105,当第一目标数据全部存入目标存储空间时,生成与第一目标数据对应的压缩数据流。

通过上述步骤,本申请实施例提供的数据排布方法能够极大的减少存储空间的浪费,只需要一个存储空间就可实现同一时钟周期多个数据同时排布,如进行图像压缩时,实现同一时钟周期同时压缩多个像素,只需要将这些数据分组存入对应的第一子空间,之后根据预设参数在第一子空间剩余容量不足时,为第一子空间增加第二子空间扩充容量即可,且当某一组第一目标数据全部存入对应的第一子空间,该第一子空间便不再继续连接其他第二子空间,此时该组数据占用的存储空间不会继续扩大;通过这种数据排布方法,每一组第一目标子数据最终占用的存储空间容量是不同的,并且可以通过调整相关预设参数,避免每个子空间过大带来的浪费问题,本申请实施例提供的数据排布方法避免了传统存储方式同时压缩多个数据(如同时压缩多个像素)需要预留多个存储空间带来的大量空间浪费问题,可以做到满足数据处理速度的同时,同时避免ddr的存储空间的浪费。

可选的,将目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部包括:

确定第二子空间的数据排布方向与第一子空间的数据排布方向相同。

参考图4,目标第一子空间为201时,201尾端201b与第二子空间203连接头部203a连接,此时需要使第二子空间203的数据排布方向确定与第一子空间201相同,图4中都是从右向左;同理,若目标第一子空间的数据排布方向为从左向右,则与其连接的第二子空间数据排布方向也得确定为从左向右,也就是说在第一子空间剩余空间不足,通过连接第二子空间扩充容量时,连接之后的原第一子空间+原第二子空间中数据排布方向是一致的,这有利于进行打包或解包时数据排布的效率。

可选的,步骤104,将第一目标数据分成n组,获取n组第一目标子数据,并将每一组第一目标子数据分别存入对应的第一子空间,在存入过程中,若目标第一子空间的剩余空间容量小于等于第一预设值,将目标第一子空间数据排布方向尾端连接至第二子空间头部,包括:

对每一组第一目标子数据进行分段,并使每一组的数据段数量相同;

当目标数据段无法完全存入目标第一子空间时,对目标数据段进行分割,使目标数据段一部分存入第一子空间,另一部分存入第二子空间。

示例性,参考图5所示,将第一目标数据分为2组,分别为组51和组52,对每个组的第一目标数据进行分段,使组51和组52分别有8个数据段,数据段内的数字为大小,单位比特bit;

结合图2、图3和图5,将组51的数据存入第一子空间201,将组52的数据存入第一子空间202,当存储到组第二个数据段时,此时组511-512已经存入第一子空间201,占用20bit空间,第一子空间201剩余12bit空间,剩余空间小于等于预设值18bit,将第一子空间201与第二子空间203连接扩充第一子空间的容量,即将201b与203a连接;此时组52中的2个数据段存入202中仅占用8bit空间,剩余空间容量为24bit大于预设值无需扩充空间;

继续存储数据,当存储到第四个数据段时,组51的前三个数据段存入第一子空间201后,占用空间为24bit,子空间201剩余空间容量为8bit,组51中第四个数据段为514,16bit大小,此时需要将数据段514进行切分,使得它前一半bit存入子空间201,后一半8bit存入201连接的子空间203。

可选的,若目标第一子空间的剩余空间容量小于等于第一预设值,将目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部包括:

第一判断步骤:判断目标第一子空间的剩余空间容量是否小于等于第一预设值;

第一增加步骤:若目标第一子空间的剩余空间容量小于等于第一预设值,将目标第一子空间数据排布方向尾端连接至一个第二子空间的头部,形成新的目标第一子空间,并返回第一判断步骤,直至目标第一子空间对应的第一目标子数据全部存入。

示例性的,下面参考图2-6,进一步对上述压缩数据排布方法,尤其是对判断步骤与增加步骤做进一步说明:

示例性的,参考图3,将目标存储空间切分为若干个大小相等都为32bit的子空间201-20m,其中确定201和202这两个子空间为第一子空间,第一子空间与第二子空间的数据排布方向分别为从左向右和从右向左排布;

第一目标数据如图5所示,被分成2组,每组被分成8个数据段,组51的个8个数据段511-518的大小分别为8、12、4、16、4、8、12、4(单位:比特bit),组52的8个数据段521-528的大小分别为4、4、8、4、12、4、8、4(单位:比特bit),组51存入第一子空间201,组52存入第一子空间202,同一时间内两组数据分别存入第一子空间201和第一子空间202相同的段数,此时预设剩余容量为18bit;

参考图中组51中数据段511-518有连接线指向他们存储的位置,组52中的数据段521-528同理,具体描述下进行数据排布的过程,当两组数据都分别存入对应的第一子空间2个数据段时,511和512数据段的大小分别为8bit和12bit,当511与512存入第一子空间201时,201中的剩余容量为32bit-20bit只有12bit,小于预设剩余容量18bit,将第一子空间尾端201b连接至第二子空间203头部203a,并确定203的数据排布方向与201相同都为从左向右,这相当于扩充了第一子空间201的剩余容量,此时将子空间201+203作为数据组51对应的新的第一子空间;

当第一子空间201与第一子空间202都存入第三个数据段时,第一子空间(201+203)的剩余空间容量为44bit(201剩余12bit,203剩余32bit)远大于预设剩余容量,无需新增第二子空间,第一子空间202的剩余空间容量为32-4-4-8=16bit,已经小于预设剩余容量,此时将与子空间203相邻的未被连接的第二子空间204的头部204a连接至第一子空间202的尾端202b,并且确定子空间204的数据排布方向与202相同都为从右向左,此时将子空间202+204作为数据组52对应的新的第一子空间;

继续向两个第一子空间中存入相应的数据段,存入第六个数据段后,第一子空间(201+203)的剩余容量为64-8-12-4-16-4-8=12bit小于预设剩余容量,同理将下一个未被连接的第二子空间205的头部205a连接至第一子空间203的尾部203b,并确定子空间205的数据排布方向与201、203相同都为从左向右;

继续存入相应数据,存入第八个数据段后,第一子空间(202+204)的剩余容量为64-4-4-8-4-12-4-8-4=16bit,小于预设剩余容量,将下一个未被连接的第二子空间206的头部206a与第一子空间204的尾端204b连接,并确定子空间206的数据排布方向与第一子空间202、204相同,都为从右向左;

至此,第一目标数据中的所有数据都已经存入目标存储空间,其中数据组51占用的空间为201+203+205,数据组52占用的空间为202+204+206,据此生成第一目标数据的压缩数据流。

通过本申请实施例提供的压缩数据排布方法,能够实现仅通过一个存储地址同时对多个压缩数据进行排布,如仅通过一个存储地址在同一个时钟周期内对多个像素进行打包,并且通过将目标存储空间切分为m个大小相等的子空间,然后再从m个大小相等的子空间中确定n个第一子空间和m-n个第二子空间,并确定n个第一子空间的位置和每个第一子空间的数据排布方向,n≥1;之后将第一目标数据分成n组,获取n组第一目标子数据,并将每一组第一目标子数据分别存入对应的第一子空间,若目标第一子空间的剩余空间容量小于等于第一预设值,将目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部,生成新的第一子空间,通过这种方式进行循环判断,根据该组第一目标数据的实际大小来决定用于存储的空间大小,直到全部第一目标数据存入目标存储空间,则第一子空间不再继续连接剩余第二子空间,这种压缩数据排布方法极大的减少了存储空间的浪费实现在同一时钟周期解压多个像素的数据时,满足对存储空间的充分利用,避免了存储空间浪费。

参考图7,本申请实施例提供了一种压缩数据的排布方法,应用于解压端,包括:

步骤701,从与第一目标数据对应的压缩数据流中获取用于抽取第一目标数据的目标数据包,第一目标数据为待压缩数据经过熵编码后得到的数据。

示例性的,根据本申请提供的实施例提供的压缩数据排布方法,参考步骤101-105作为压缩端生成了一段压缩数据流,下面以这段压缩数据流为例,对可应用于解压端的步骤701-705相关的压缩数据的排布方法做具体说明。

步骤702,将目标数据包切分为m个大小相等的子数据包。

示例性的,步骤702对目标数据包进行切分时,需要和压缩端提供的压缩数据流匹配,参考图6和图8,根据压缩端生成的压缩数据流如图6中一共有个201-206这6个子空间用于存储第一目标数据,步骤702对该压缩数据流对应的目标数据包进行切分时候,参考图8,将这个数据包切分成6个子数据包801-806,且他们的大小与图6中的子空间大小一致均为32bit。

步骤703,从m个大小相等的子数据包中确定n个第一子数据包和m-n个第二子数据包,并确定n个第一子数据包的位置和每个第一子数据包的数据排布方向,n≥1。

步骤703也需要和压缩端提供的压缩数据流匹配,示例性的,以图6中压缩端生成的压缩数据流为例,参考图8,从6个大小相等的子数据包中,确定2个第一子数据包为801和802,803-806为第二子数据包,且第一子数据包801的数据排布方向与图6中第一子空间的201的数据排布方向一致都是从左向右,第一子数据包802的数据排布方向与图6的中第一子空间202的数据排布方向一致都是从右向左。

步骤704,从n个第一子数据包中分别抽取出对应的第一目标子数据,若目标第一子数据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设规则,将目标第一子数据包的数据排布方向尾端连接至第二子数据包头部;

示例性的,第二预设值以及相应的预设规则也需要和压缩端排布压缩数据流的参数相互匹配,如步骤101-105中压缩端进行排布时,第一子空间的剩余容量第一预设值为18bit,那么解压段,第二预设值为第一子数据包中已经抽出数据的累计位宽,由于第一子数据包连接第二子数据包后待读取的数据会变多,因此第二预设值与目标第一子数据包连接的第二子数据包的数量有关,第二预设值为14+32*y比特(其中32比特为每连接一个第二子数据包后,形成的新的第一子数据包增加的总空间,14比特为32-18(第一预设值)=14bit),y为目标第一子数据包已经连接的第二子数据包的个数。

可选的,将目标第一子数据包的数据排布方向尾端连接至第二子数据包头部,包括:

确定第二子数据包的数据排布方向与第一子数据包的数据排布方向相同。

示例性的,参考图9,在进行数据抽取时,若第一子数据包801中已经抽出数据的累计位宽首先大于等于第二预设值14bit(此时y=0),则将确定第二子数据包803的数据排布方向确定为与第一子数据包801相同都为从左向右,将第一子数据包801的尾端801b连接至子数据包803的头部803a,当子数据包801中的数据全部被抽取后,继续抽取子数据包803中的数据。

可选的,若目标第一子数据包中已经抽出数据的累计位宽累计位宽大于等于第二预设值,根据预设抽取规则,将目标第一子数据包的数据排布方向尾端连接至第二子数据包头部,包括:

第一判断步骤:判断第一子数据包中已经抽出数据的累计位宽是否大于等于第二预设值;

第一增加步骤:若第一子数据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设规则,将目标第一子数据包的数据排布方向尾端连接至一个第二子数据包头部,形成新的目标第一子数据包,并返回第一判断步骤,直至目标第一子数据包对应的第一目标子数据全部抽取出。

参考图8-10,结合步骤701-703与步骤101-105中生成的压缩数据流,对第一判断步骤和第一增加步骤做进一步说明,上述步骤已经将目标压缩数据流切分为32bit的6个子数据包,并且确定了第一子数据包为801数据排布方向从左向右,802数据排布方向从右向左,压缩端进行打包时第一与设置为18bit,解压端第二预设值为14+32*y比特(y为第一子数据包连接的第二子数据包的数量);

在数据抽出过程中,与压缩端参数匹配,在同一时钟周期分别从第一子数据包801和802中抽出相同片数的数据段,当抽取至第二个数据片时,第一子数据包801中已抽出数据为(8+12)bit,大于等于第二预设值14bit,因此根据预设,确定第二子数据包803的数据排布方向与第一子数据包801相同都是从左向右,将第二子数据包803的头部803a连接至第一子数据包801尾部801b,形成新的第一子数据包(801+803),之后当801中的数据都被抽出后,从803中抽出该组数据(与压缩端参数对应,第一子数据包801中抽出组51中的第一目标数据;第一子数据包802中抽出组52中的第一目标数据);

当抽取到第三个数据段时,第一子数据包802中已经抽出数据为(4+4+8)bit,大于等于第二预设值14bit,根据预设,确定第二子数据包804的数据排布方向与第一子数据包802相同,都是从右向左,将第一子数据包802的尾端802b连接至第二子数据包804的头部804a形成新的第一子数据包(802+804),在后续的数据抽取中,当子数据包802中的全部数据都被抽出后,从子数据包804中继续抽取数据;

当抽取到第七个数据段时,第一子数据包(801+803)中已经抽出数据的累计位宽为(32+20)bit,大于预设值14+32*y(此时y=1),因此确定第二子数据包805的数据排布方向与801、803相同为从左向右,将第一子数据包(801+803)的尾端803b连接至第二子数据包805的头部805a,形成新的第一子数据包(801+803+805);

当抽取到第八个数据段时,第二子数据包(802+804)中已经抽出数据的累计位宽为(32+16)bit,大于预设值14+32*y(此时y=1),因此确定第二子数据包806的数据排布方向与802、84相同为从右向左,将第一子数据包(802+804)的尾端804b连接至第二子数据包806的头部806a,形成新的第一子数据包(802+804+806);

循环执行上述步骤704中的判断步骤,直到所有子数据包中的第一目标数据全部被抽取出。

步骤705,当第一目标数据全部被抽出时,获取第一目标数据。

示例性的,参考图10为与压缩端提供的压缩数据流(参考图2-6)匹配的解压端参数抽出的第一目标数据,第一目标数据被分为2组抽出,第一组第一目标数据对应压缩端步骤101-105,参考图5中的组51,从子数据包801、803、805中抽出数据段511-518,第二组第一目标数据对应压缩端步骤101-105,参考图5中的组52,从子数据包802、804、806中抽出数据段521-528。

通过本申请实施例提供的压缩数据的排布方法,在压缩与解压过程仅通过一个存储位置、一个数据包,就实现同一时钟周期同时读取多组第一目标数据,极大的节约了存储空间,这种压缩数据排布方法极大的减少了存储空间的浪费实现在同一时钟周期解压多个像素的数据时,满足对存储空间的充分利用,避免了存储空间浪费。

参考图11,本申请实施例提供了一种压缩数据的排布装置110,包括:

第一处理模块1101,用于确定用于存储第一目标数据的目标存储空间,第一目标数据为待压缩数据经过熵编码后得到的数据;

第二处理模块1102,用于将目标存储空间切分为m个大小相等的子空间;

第三处理模块1103,用于从m个大小相等的子空间中确定n个第一子空间和m-n个第二子空间,并确定n个第一子空间的位置和每个第一子空间的数据排布方向,n≥1;

第四处理模块1104,用于将第一目标数据分成n组,获取n组第一目标子数据,并将每一组第一目标子数据分别存入对应的第一子空间,在存入过程中,若目标第一子空间的剩余空间容量小于等于第一预设值,将目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部;

生成模块1105,用于在当第一目标数据全部存入目标存储空间时,生成与第一目标数据对应的压缩数据流。

可选的,第一处理模块1101还用于:

确定目标存储空间的首地址且目标存储空间为一块连续的存储空间。

可选的,第四处理模块1104还包括:

第一处理子模块11041,用于将目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部时,确定第二子空间的数据排布方向与第一子空间的数据排布方向相同。

可选的,参考图12,第四处理模块1104还包括:

第二处理子模块11042,用于将第一目标数据分成n组,获取n组第一目标子数据,并将每一组第一目标子数据分别存入对应的第一子空间时,对每一组第一目标子数据进行分段,并使每一组的数据段数量相同;

第三处理子模块11043,用于当目标数据段无法完全存入目标第一子空间时,对目标数据段进行分割,使目标数据段一部分存入第一子空间,另一部分存入第二子空间。

可选的,参考图12,第四处理模块1104还包括:

第四处理子模块11044,用于在若目标第一子空间的剩余空间容量小于等于第一预设值,将目标第一子空间数据排布方向尾端连接至第二子空间数据排布方向的头部时执行以下步骤:

第一判断步骤:判断目标第一子空间的剩余空间容量是否小于等于第一预设值;

第一增加步骤:若目标第一子空间的剩余空间容量小于等于第一预设值,将目标第一子空间数据排布方向尾端连接至一个第二子空间的头部,形成新的目标第一子空间,并返回第一判断步骤,直至目标第一子空间对应的第一目标子数据全部存入。

上述压缩数据排布装置110能够实现本申请实施例提供的应用于压缩端的压缩方式排布方法。

参考图13,本申请实施例提供了一种压缩数据的排布装置130,包括:

第一处理模块1301,用于从与第一目标数据对应的压缩数据流中获取用于抽取第一目标数据的目标数据包,第一目标数据为待压缩数据经过熵编码后得到的数据;

第二处理模块1302,用于将目标数据包切分为m个大小相等的子数据包;

第三处理模块1303,用于从m个大小相等的子数据包中确定n个第一子数据包和m-n个第二子数据包,并确定n个第一子数据包的位置和每个第一子数据包的数据排布方向,n≥1;

第四处理模块1304,用于从n个第一子数据包中分别抽取出对应的第一目标子数据,若目标第一子据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设规则,将目标第一子数据包的数据排布方向尾端连接至第二子数据包头部;

获取模块1305,用于在当第一目标数据全部被抽出时,获取第一目标数据。

可选的,第四处理模块1204还包括:

第一处理子模块13041,用于将目标第一子数据包的数据排布方向尾端连接至第二子数据包头部时,确定第二子数据包的数据排布方向与第一子数据包的数据排布方向相同。

可选的,第四处理模块1104还包括:

第二处理子模块13042,用于若目标第一子数据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设抽取规则,将目标第一子数据包的数据排布方向尾端连接至第二子数据包头部时执行以下步骤:

第一判断步骤:判断第一子数据包中已经抽出数据的累计位宽是否大于等于第二预设值;

第一增加步骤:若第一子数据包中已经抽出数据的累计位宽大于等于第二预设值,根据预设规则将目标第一子数据包的数据排布方向尾端连接至一个第二子数据包头部,形成新的目标第一子数据包,并返回第一判断步骤,直至目标第一子数据包对应的第一目标子数据全部抽取出。

上述压缩数据排布装置110能够实现本申请实施例提供的应用于解压端的压缩方式排布方法。

请参考图14,本发明实施例还提供一种电子设备1400,包括处理器1401,存储器1402,存储在存储器1402上并可在所述处理器1401上运行的计算机程序,该计算机程序被处理器1401执行时实现上述压缩数据的排布方法的实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。

本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现上述压缩数据的排布方法的实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本申请创造的保护范围之中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1