压缩参考帧的方法、装置及芯片与流程

文档序号:15925293发布日期:2018-11-14 01:04阅读:213来源:国知局
本公开涉及数据压缩领域,具体地,涉及一种压缩参考帧的方法、装置及芯片。
背景技术
压缩参考帧的目的是减少参考帧的读写带宽和存储空间。为便于实时解压缩,要求参考帧的压缩算法满足两个条件:1)压缩单元易于随机存取(randomaccess)且不宜过大;2)压缩算法简单、快速且实时。相关技术中,参考帧的压缩算法包括有损压缩和无损压缩。其中,有损压缩会引起误差和图像质量劣化的问题,故而不可取;而无损压缩的压缩率低且复杂度高,不利于硬件实现,过多地侧重于节省存储空间,而忽略对读写带宽的节省。技术实现要素:本公开的目的是提供一种压缩参考帧数据块的方法、装置及芯片,以提高压缩操作的灵活性。为了实现上述目的,本公开提供一种压缩参考帧的方法,包括:将一个参考帧数据块划分成多个压缩单元,对每个压缩单元进行压缩。可选地,对每个压缩单元进行压缩,包括:对同一所述压缩单元采用至少两种熵编码方式进行熵编码;根据所述压缩单元经至少两种熵编码方式熵编码后的比特数,确定出所述压缩单元被压缩后得到的数据流。可选地,在对每个压缩单元进行压缩之后,所述方法还包括:按照一个所述参考帧数据块所占存储空间的大小确定一个固定大小的存储单元的规则,将外部存储器的存储空间划分为多个存储单元;按照一个所述参考帧数据块被压缩后得到的总数据流占据一个所述存储单元的规则,将每个所述总数据流存储到所述外部存储器中,一个所述总数据流为一个所述参考帧数据块的各个压缩单元被压缩后得到的数据流的总和。可选地,在对每个压缩单元进行压缩之后,所述方法还包括:按照一个所述参考帧数据块所占存储空间的至少两倍为一个存储单元的规则,将外部存储器的存储空间划分为多个存储单元;按照一个所述参考帧数据块被压缩后得到的总数据流占据一个所述存储单元的规则,将每个所述总数据流存储到所述外部存储器中,一个所述总数据流为一个所述参考帧数据块的各个压缩单元被压缩后得到的数据流的总和。可选地,对同一所述压缩单元采用所述至少两种熵编码方式中的一种熵编码方式进行熵编码,包括:确定每个压缩单元的预测残差数据块中各个预测残差的绝对值的最大值是m;对m=0的压缩单元的预测残差数据块的编码模式进行编码,且将m=0的压缩单元的预测残差数据块中各个预测残差的编码码字设置为空;对m>0的压缩单元的预测残差数据块的编码模式进行编码,且在两个周期内对m>0的压缩单元的所有预测残差进行编码,其中,在所述两个周期内的第一个周期内利用n比特二进制数表示绝对值小于2n-1的预测残差以及绝对值不小于2n-1的预测残差的编码码字的高n位,在所述两个周期内第二个周期内利用n比特二进制数表示绝对值不小于2n-1的预测残差的编码码字的低n位,其中,n为大于0的整数。可选地,对同一所述压缩单元采用所述至少两种熵编码方式中的一种熵编码方式进行熵编码,包括:将每个压缩单元分别作为待处理单元,对每个所述待处理单元执行以下步骤:将所述待处理单元的预测残差数据块分为尺寸相同的多个预测残差数据子块;将每个预测残差数据子块作为待处理子块,对每个所述待处理子块执行以下步骤:确定所述待处理子块中各个预测残差的绝对值的最大值;对所述最大值对应的二进制数的位宽进行编码,且根据所述位宽对所述待处理子块中各个预测残差进行编码。本公开还提供一种压缩参考帧的装置,包括:划分模块,用于将一个参考帧数据块划分成多个压缩单元;压缩模块,用于对每个压缩单元进行压缩。可选地,所述压缩模块包括:熵编码模块,用于对同一所述压缩单元采用至少两种熵编码方式进行熵编码;确定模块,用于根据所述压缩单元经至少两种熵编码方式熵编码后的比特数,确定出所述压缩单元被压缩后得到的数据流。可选地,所述装置还包括:第一存储器划分模块,用于按照一个所述参考帧数据块所占存储空间的大小确定一个固定大小的存储单元的规则,将外部存储器的存储空间划分为多个存储单元;第一存储模块,用于按照一个所述参考帧数据块被压缩后得到的总数据流占据一个所述存储单元的规则,将每个所述总数据流存储到所述外部存储器中,一个所述总数据流为一个所述参考帧数据块的各个压缩单元被压缩后得到的数据流的总和。可选地,所述装置还包括:第二存储器划分模块,用于按照一个所述参考帧数据块所占存储空间的至少两倍为一个存储单元的规则,将外部存储器的存储空间划分为多个存储单元;第二存储模块,用于按照一个所述参考帧数据块被压缩后得到的总数据流占据一个所述存储单元的规则,将每个所述总数据流存储到所述外部存储器中,一个所述总数据流为一个所述参考帧数据块的各个压缩单元被压缩后得到的数据流的总和。可选地,所述熵编码模块包括:最大值确定子模块,用于确定每个压缩单元的预测残差数据块中各个预测残差的绝对值的最大值是m;第一编码子模块,用于对m=0的压缩单元的预测残差数据块的编码模式进行编码,且将m=0的压缩单元的预测残差数据块中各个预测残差的编码码字设置为空;第二编码子模块,用于对m>0的压缩单元的预测残差数据块的编码模式进行编码,且在两个周期内对m>0的压缩单元的所有预测残差进行编码,其中,在所述两个周期内的第一个周期内利用n比特二进制数表示绝对值小于2n-1的预测残差以及绝对值不小于2n-1的预测残差的编码码字的高n位,在所述两个周期内第二个周期内利用n比特二进制数表示绝对值不小于2n-1的预测残差的编码码字的低n位,其中,n为大于0的整数。可选地,所述熵编码模块包括:第一执行子模块,用于将每个压缩单元分别作为待处理单元,对每个所述待处理单元执行以下步骤:将所述待处理单元的预测残差数据块分为尺寸相同的多个预测残差数据子块;第二执行子模块,用于将每个预测残差数据子块作为待处理子块,对每个所述待处理子块执行以下步骤:确定所述待处理子块中各个预测残差的绝对值的最大值;对所述最大值对应的二进制数的位宽进行编码,且根据所述位宽对所述待处理子块中各个预测残差进行编码。本公开还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开提供的压缩参考帧数据块的方法的步骤。本公开还提供一种芯片,包括:本公开提供的计算机可读存储介质;以及一个或者多个处理器,用于执行所述计算机可读存储介质中的程序。通过上述技术方案,将参考帧数据块分为多个压缩单元,然后对每个压缩单元进行压缩,相比于对整个参考帧数据块进行压缩的方案,本公开提供的技术方案对压缩操作所针对的对象进一步细化,因而提高了压缩操作的灵活性,压缩操作所针对的对象不再固定为整个参考帧数据块,而是参考帧数据块中的各个压缩单元,进而为每个压缩单元可以灵活选择预测方法和熵编码方法,使得压缩操作的灵活性大大增强。本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。附图说明附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:图1是根据一示例性实施例示出的压缩参考帧数据块的方法的流程图。图2是尺寸是8x4的参考帧数据块的示意图。图3是尺寸是16x4的参考帧数据块的示意图。图4是对尺寸是8x4的参考帧数据块进行划分的示意图。图5是确定尺寸是8x4的参考帧数据块包括的压缩单元的示意图。图6a是对预测残差进行left预测的示意图。图6b是对预测残差进行up预测的示意图。图6c是对预测残差进行up-left预测的示意图。图6d是对预测残差进行up-right预测的示意图。图7是采用本公开实施例提供的压缩方法所得的压缩后的参考帧数据块在外部存储器中存储的示意图。图8是根据一示例性实施例示出的一种压缩参考帧数据块的装置的示意图。图9是根据一示例性实施例示出的一种芯片的示意图。具体实施方式以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。首先对本公开实施例提供的压缩参考帧的方法进行说明。图1是根据一示例性实施例示出的压缩参考帧数据块的方法的流程图。如图1所示,本公开实施例提供的一种压缩参考帧的方法包括以下步骤:步骤s11:将一个参考帧数据块划分成多个压缩单元;步骤s12:对每个压缩单元进行压缩。本公开实施例提出一种压缩参考帧数据块的方法,该方法将任意尺寸的参考帧数据块分为多个压缩单元,然后对每个压缩单元进行压缩。也就是说,本公开实施例中,压缩单元是进行压缩和解压缩的基本单位。每次压缩操作是针对单个压缩单元进行的,而不是针对整个参考帧数据块进行的。因而,提高了压缩操作的灵活性,压缩操作所针对的对象不再固定为整个参考帧数据块,而是参考帧数据块中的各个压缩单元,进而为每个压缩单元可以灵活选择预测方法和熵编码方法,使得压缩操作的灵活性大大增强。可选地,将一个参考帧数据块划分成多个压缩单元,包括:按照亮度数据块每一行为一行,且色度数据块每两行拼为一行的规则,将参考帧数据块分为多行;将所述多行中的至少一行作为一个压缩单元。其中,参考帧数据块的尺寸可以是任意的,例如:axb(a是参考帧数据块的横向尺寸,b是参考帧数据块的纵向尺寸),且a和b均为大于0的整数。又例如:8mx4n,且m和n为大于0的整数。尺寸是8mx4n的参考帧数据块用于压缩、存取、运动估计和运动补偿都有优势,但本公开实施例提供的压缩参考帧的方法不限于尺寸是8mx4n的参考帧数据块。示例地,在m=2且n=1的情况下,参考帧数据块的尺寸是16x4。参考帧数据块由亮度数据块和色度数据块组成。以尺寸是8mx4n的参考帧数据块为例,如图2所示,在m=1且n=1的情况下,尺寸是8x4的参考帧数据块由尺寸是8x4的亮度(y)数据块、尺寸是4x2的色度(cr)数据块以及尺寸是4x2的色度(cb)数据块组成;如图3所示,在m=2且n=1的情况下,尺寸是16x4的参考帧数据块由尺寸是16x4的亮度(y)数据块、尺寸是8x2的色度(cr)数据块以及尺寸是8x2的色度(cb)数据块组成。本文的附图中,用交叉线填充表示亮度(y)数据块,用左斜线填充表示色度(cr)数据块,用右斜线填充表示色度(cb)数据块。将任意尺寸的参考帧数据块划分为多个压缩单元,包括以下步骤:首先,将任意尺寸的参考帧数据块划分为多行。对于任意参考帧数据块中的亮度数据块来说,亮度数据块的每一行即可作为一行;对于任意参考帧数据块中的色度数据块来说,色度数据块的每两行拼接后可作为一行。然后,将至少一行作为一个压缩单元。也就是说,可以将一行作为一个压缩单元,也可以将多行(例如:两行、三行、四行)作为一个压缩单元。一种可能的实施方式是,对于尺寸是8mx4n的参考帧数据块,可以将该参考帧数据块的每一行(尺寸是8mx1)作为一个压缩单元。对于尺寸是8mx4n的参考帧数据块中尺寸是8mx4n的亮度(y)数据块,每一行即为一个压缩单元;对于尺寸是8mx4n的参考帧数据块中尺寸是4mx2n的色度(cr)数据块以及尺寸是4mx2n的色度(cb)数据块,每两行拼接后即为一个压缩单元。示例地,以尺寸是8mx4n的参考帧数据块为例,如图4所示,在m=1且n=1的情况下,尺寸是8x4的参考帧数据块被划分为6行,其中,尺寸是8x4的亮度(y)数据块的每一行分别为尺寸是8x4的参考帧数据块的第1行、第2行、第3行以及第4行,尺寸是4x2的色度(cr)数据块的两行拼接为尺寸是8x4的参考帧数据块的第5行,尺寸是4x2的色度(cb)数据块的两行拼接为尺寸是8x4的参考帧数据块的第6行。如图5所示,如果将尺寸是8x4的参考帧数据块的每两行作为一个压缩单元,则尺寸是8x4的参考帧数据块被划分为3个压缩单元。同理,如果将尺寸是8x4的参考帧数据块的每一行作为一个压缩单元,则尺寸是8x4的参考帧数据块被划分为6个压缩单元。以上是基于行对参考帧数据块进行划分的过程。在实际应用中,还可以基于列对参考帧数据块进行划分。具体过程与基于行对参考帧数据块进行划分的过程类似,在此不再重复说明。在按照上述方法,将任意尺寸的参考帧数据块划分为多个压缩单元之后,对每个压缩单元进行压缩。对一个压缩单元进行压缩,包括预测步骤和熵编码步骤。关于采用何种预测模式以及如何对压缩单元进行预测,本公开实施例不做具体限定。可选的预测模式包括:left预测模式、up预测模式、up-left预测模式以及up-right预测模式。对压缩单元进行预测的方法有且不限于以下方法:对压缩单元中的各行亮度数据进行预测,包括:对压缩单元中的第一行亮度数据,第一个亮度数据不做预测,其他亮度数据采用left预测;对压缩单元中除第一行亮度数据外剩余的任一行亮度数据,第一个亮度数据采用up预测,其他亮度数据可采用left预测模式、up预测模式、up-left预测模式以及up-right预测模式中任意一种预测模式进行预测;对压缩单元中的各行色度数据采用left预测。示例地,对图4或图5中的第1行亮度数据,第一个亮度数据(即0)不做预测,其他亮度数据(包括1至7)采用left预测。对图4或图5中的第2行至第4行亮度数据,每行亮度数据中的第一个亮度数据,采用up预测,每行亮度数据中除第一个亮度数据外剩余的亮度数据,采用left预测模式、up预测模式、up-left预测模式以及up-right预测模式中任意一种预测模式进行预测。以对第2行亮度数据进行预测为例,对第2行亮度数据中的第一个亮度数据,采用up预测,对第2行亮度数据中的剩余亮度数据,采用left预测,如图6a所示;对第2行亮度数据中的第一个亮度数据,采用up预测,对第2行亮度数据中的剩余亮度数据,采用up预测,如图6b所示;对第2行亮度数据中的第一个亮度数据,采用up预测,对第2行亮度数据中的剩余亮度数据,采用up-left预测,如图6c所示;对第2行亮度数据中的第一个亮度数据,采用up预测,对第2行亮度数据中的剩余亮度数据,采用up-right预测,如图6d所示。对同一压缩单元,采用不同预测模式或者采用不同的预测方法,所得到的预测残差数据块不同,因而,同一压缩单元可能对应多个预测残差数据块。为减少数据传输量,可以从同一压缩单元对应的各个预测残差数据块中选择一个预测残差数据块进行传输。选择的标准是:预测残差数据块中各个预测残差的绝对值之和最小。可选地,为进一步减少数据传输量,可以减少所采用的预测模式的数量。示例地,对于尺寸是8mx4n的参考帧数据块,由于色度数据块固定采用left预测,所以只需表示亮度数据块的预测模式,以便于解码。对于亮度数据块,由于亮度数据块的第一行固定采用left预测,所以仅需表示剩余4n-1行亮度数据的预测模式。假设采用4种预测模式,则需要2个比特表示4种可选的预测模式,因而每行亮度数据的预测模式用2个比特表示(例如:第2行亮度数据采用left预测,则用00表示;第2行亮度数据采用up预测,则用01表示;第2行亮度数据采用up-left预测,则用10表示;第二行数据采用up-right预测,则用11表示),因而需要传输(4n-1)x2个比特,以表征尺寸是8mx4n的参考帧数据块中各行所采用的预测模式。为减少数据传输量,可以减少所采用的预测模式的数量。假设采用2种预测模式,则需要1个比特表示2种可选的预测模式,因而每行亮度数据的预测模式用1个比特表示(例如:第2行亮度数据采用left预测,则用0表示;第2行亮度数据采用up预测,则用1表示),因而需要传输(4n-1)x1个比特,以表征尺寸是8mx4n的参考帧数据块中各行所采用的预测模式。无论采用何种预测模式以及如何对压缩单元进行预测,均可得到压缩单元的预测残差数据块。在得到压缩单元的预测残差数据块后,对压缩单元的预测残差数据块进行熵编码。具体如何对压缩单元的预测残差数据块进行熵编码,本公开实施例不做具体限定。可选地,对每个压缩单元进行压缩,包括:对同一所述压缩单元采用至少两种熵编码方式进行熵编码;根据所述压缩单元经至少两种熵编码方式熵编码后的比特数,确定出所述压缩单元被压缩后得到的数据流。相关技术中,压缩操作针对的对象是整个参考帧数据块,也就是说,对整个参考帧数据块进行预测和熵编码,然后将整个参考帧数据块被压缩后得到的数据流存储到外部存储器中。本公开实施例中,在将参考帧数据块划分为多个压缩单元之后,对各个压缩单元分别进行压缩操作。压缩操作针对的对象是所述压缩单元,也就是说,可对各个压缩单元分别进行预测和熵编码,然后将整个参考帧数据块的各个压缩单元被压缩后得到的数据流的总和作为一个总数据流,存储到外部存储器中。为了减少一个总数据流在外部存储器所占的存储空间的大小,可以减少组成总数据流的各个数据流,也就是减小每个压缩单元被压缩后得到的数据流。为此,本公开实施例提出对一个压缩单元可以采用至少两种熵编码方式进行编码,可以得到的至少两种熵编码结果,然后根据至少两种熵编码结果的比特数,选择比特数较少的熵编码结果作为该压缩单元被压缩后得到的数据流。由于每个压缩单元被压缩后得到的数据流均是经比较后选择比特数较少的,所以一个参考帧数据块的各个压缩单元被压缩后得到的数据流的总和也是各个比特数较少的数据流的总和,达到了减少参考帧数据块被压缩后得到的总数据流在外部存储器所占的存储空间的大小的目的。本公开实施例提供了两种可选的熵编码方法,对每个压缩单元进行熵编码。本公开实施例提供的一种熵编码方法包括以下步骤:确定每个压缩单元的预测残差数据块中各个预测残差的绝对值的最大值是m;对m=0的压缩单元的预测残差数据块的编码模式进行编码,且将m=0的压缩单元的预测残差数据块中各个预测残差的编码码字设置为空;对m>0的压缩单元的预测残差数据块的编码模式进行编码,且在两个周期内对m>0的压缩单元的所有预测残差进行编码,其中,在所述两个周期内的第一个周期内利用n比特二进制数表示绝对值小于2n-1的预测残差以及绝对值不小于2n-1的预测残差的编码码字的高n位,在所述两个周期内第二个周期内利用n比特二进制数表示绝对值不小于2n-1的预测残差的编码码字的低n位,其中,n为大于0的整数。采用本公开实施例提供的熵编码方法,首先需要确定压缩单元的预测残差数据块中各个预测残差的绝对值的最大值(为描述方便,记为m)。考虑到m的取值范围较宽,例如,m可能等于1、3、5、7等,m取不同值,所采用的编码模式不同,为了便于解码,首先需要对所采用的编码模式进行编码。例如:m=0,则将编码模式表示为00;m=1,则将编码模式表示为01;m=3,则将编码模式表示为10;m=7,则将编码模式表示为11。除需要对编码模式进行编码外,还需要对压缩单元的预测残差数据块中各个预测残差进行编码。根据m是否等于0,各个预测残差的编码码字不同。如果m=0,则只需对编码模式进行编码,无需对各个预测残差进行编码,相应地,只需传输编码模式的编码码字。如果m>0,需要对编码模式进行编码,且利用n比特二进制数对各个预测残差进行编码。具体地,对于绝对值小于2n-1的预测残差,利用一个周期对其进行编码,将其编码为n比特;对于绝对值不小于2n-1的预测残差,利用两个周期对其进行编码,将其编码为2n比特,在两个周期中的第一个周期,得到2n比特中的高n位,在两个周期中的第二个周期,得到2n比特中的低n位。示例地,n=1时,m=1,因而预测残差可能是:0、+1、-1,其中,预测残差0的绝对值小于21-1,因而,利用一个周期对预测残差0进行编码,将其编码为:1;预测残差+1和-1的绝对值不小于21-1,利用两个周期对其进行编码,将其编码为2比特,在两个周期中的第一个周期,得到2比特中的高位:0,在两个周期中的第二个周期,得到2比特中的低位:0和1。以此得到预测残差0的编码码字是1,预测残差+1的编码码字是00,预测残差-1的编码码字是01。示例地,n=2时,m=2或3,如果m=2,预测残差可能是:0、+1、-1、-2、+2;如果m=3,预测残差可能是:0、+1、-1、-2、+2、-3、+3。相比于m=2的情况,m=3的情况下,预测残差还可能是-3和+3。由于m=2的情况包含于m=3的情况中,所以下面以m=3为例进行说明。预测残差0、+1、-1的绝对值小于22-1,因而,利用一个周期对预测残差0进行编码,将其编码为:01、10、11;预测残差-2、+2、-3、+3的绝对值不小于22-1,利用两个周期对其进行编码,将其编码为4比特,在两个周期中的第一个周期,得到4比特中的高2位:00,在两个周期中的第二个周期,得到4比特中的低2位:10、11、00、01。以此得到预测残差0的编码码字是01,预测残差+1的编码码字是10,预测残差-1的编码码字是11,预测残差+2的编码码字是0010,预测残差-2的编码码字是0011,预测残差+3的编码码字是0000,预测残差-3的编码码字是0001。按照同样的方法,可以得到表1所示的编码码字表。表1中“—”表示空。表1编码码字表采用本公开实施例提供的上述熵编码方法,在两个周期内即可完成对各个预测残差的编码,方便快捷。本公开实施例提供的另一种熵编码方法包括以下步骤:将每个压缩单元分别作为待处理单元,对每个所述待处理单元执行以下步骤:将所述待处理单元的预测残差数据块分为尺寸相同的多个预测残差数据子块;将每个预测残差数据子块作为待处理子块,对每个所述待处理子块执行以下步骤:确定所述待处理子块中各个预测残差的绝对值的最大值;对所述最大值对应的二进制数的位宽进行编码,且根据所述位宽对所述待处理子块中各个预测残差进行编码。为减少数据传输量,本公开实施例提出,将每个压缩单元的预测残差数据块分为尺寸相同的多个预测残差数据子块。然后对每个预测残差数据子块进行编码。如果一个预测残差数据子块包括的预测残差的绝对值较小,则用较少比特的二进制数表征;如果一个预测残差数据子块包括的预测残差的绝对值较大,则用较多比特的二进制数表征。相比于对压缩单元的预测残差数据块中的各个预测残差均采用相同比特的二进制数表征,采用本公开实施例提供的分组后再编码的方法,某一组或某些组可以采用较少的二进制数表征,因而减少了数据传输量。其中,具体如何对压缩单元进行划分,压缩装置与解压缩装置可以预先协商,本公开实施例不做限定。示例地,对于一个尺寸是8mx1的压缩单元的预测残差数据块,一种可能的分组方法是:每8个预测残差作为一组,进而将尺寸是8mx1的压缩单元的预测残差数据块分为m组,也即分为m个预测残差数据子块。按照以上方法得到多个预测残差数据子块之后,根据每个预测残差数据子块中各个预测残差的绝对值的最大值,对各个预测残差数据子块中的各个预测残差进行编码。首先,确定待处理子块中各个预测残差的绝对值的最大值,进而确定该最大值对应的二进制数的位宽。然后,根据该位宽,对待处理子块中各个预测残差进行编码。具体地,假设待处理子块中各个预测残差的绝对值的最大值为a,则该最大值对应的二进制数的位宽可以表示为其中,表示向下取整,则可以利用比特二进制数表征待处理子块中各个预测残差;或者,可以利用比特二进制数表征待处理子块中各个预测残差,其中,表示向上取整。示例地,一个预测残差数据子块中各个预测残差的绝对值的最大值是7,因而对应的二进制数的位宽为3,所以可以利用4比特二进制数对该预测残差数据子块中各个预测残差进行编码,其中,在具体实施过程中,对压缩单元的预测残差数据块进行熵编码的方法,不限于本公开实施例提供的上述两种熵编码方法,也可以采用其他熵编码方法对压缩单元的预测残差数据块进行熵编码。可选地,为减少整个参考帧数据块的各个压缩单元被压缩后得到的数据流的总和(即总数据流)在外部存储器所占的存储空间的大小,,在采用包括本公开实施例提供的上述两种熵编码方法在内的多种熵编码方法,对压缩单元的预测残差数据块进行熵编码之后,可以从多种熵编码方法对应的编码结果中选择比特数最少的编码结果作为该压缩单元被压缩后得到的数据流。由于每个压缩单元被压缩后得到的数据流均是经比较后选择比特数较少的,所以一个参考帧数据块的各个压缩单元被压缩后得到的数据流的总和也是各个比特数较少的数据流的总和,达到了减少参考帧数据块被压缩后得到的总数据流在外部存储器所占的存储空间的大小的目的。在对一个压缩单元执行完上述预测步骤和熵编码步骤之后,即完成了对该压缩单元的压缩操作。然后,将压缩单元被压缩后的数据流存储到外部存储器中。因而,在对每个压缩单元进行压缩之后,所述方法还包括:按照一个所述参考帧数据块所占存储空间的大小确定一个固定大小的存储单元的规则,将外部存储器的存储空间划分为多个存储单元;按照一个所述参考帧数据块被压缩后得到的总数据流占据一个所述存储单元的规则,将每个所述总数据流存储到所述外部存储器中,一个所述总数据流为一个所述参考帧数据块的各个压缩单元被压缩后得到的数据流总和。本公开实施例提出,根据参考帧数据块所占存储空间的大小确定一个固定大小的存储单元,对外部存储器的存储空间进行划分,将外部存储器的存储空间划分为多个所述固定大小的存储单元。由于存储单元是固定大小的,所以在对参考帧数据块包括的各个压缩单元进行压缩之前,即可预先确定该参考帧数据块被压缩后得到的总数据流在外部存储器中的存储位置。其中,参考帧数据块被压缩后得到的总数据流,是该参考帧数据块的各个压缩单元被压缩后得到的数据流的总和。可选地,在对每个压缩单元进行压缩之后,所述方法还包括:按照一个所述参考帧数据块所占存储空间的至少两倍为一个存储单元的规则,将外部存储器的存储空间划分为多个存储单元;按照一个所述参考帧数据块被压缩后得到的总数据流占据一个所述存储单元的规则,将每个所述总数据流存储到所述外部存储器中,一个所述总数据流是一个所述参考帧数据块的各个压缩单元被压缩后得到的数据流的总和。本公开实施例为兼容8比特数据流和10比特数据流,提出对外部存储器按照参考帧数据块所占存储空间的的至少两倍划分,划分为多个存储单元,例如:一个存储单元的大小是参考帧数据块所占空间的两倍。然后将一个参考帧数据块被压缩后得到的总数据流存储到一个存储单元中。示例地,尺寸是8mx4n的参考帧数据块通常是8比特数据流,所占的存储空间最大是8mx4nx3/2,如果尺寸是8mx4n的参考帧数据块是10比特数据流,则所占的存储空间最大是8mx4nx3/2x10/8。而8mx4nx3/2和8mx4nx3/2x10/8均小于8mx4nx2,因此,可以按照大小是8mx4nx2的存储空间为一个存储单元的规则,将外部存储器划分为多个尺寸是8mx4nx2的存储单元,以便于完成对尺寸是8mx4n的参考帧数据块的压缩操作之后,将压缩后的参考帧数据块存储在的存储单元内。图7是采用本公开实施例提供的压缩方法所得的压缩后的参考帧数据块在外部存储器中存储的示意图。图7中,每两个相邻游标之间为一个大小是8mx4nx2的存储单元。图7以尺寸是8mx4n的参考帧数据块为例,用点填充表示压缩后的参考帧数据块,用黑色填充表示未压缩的参考帧数据块。压缩后的参考帧数据块的尺寸可能是:16mn、32mn或者48mn。因而,可以用2比特二进制数表征四种压缩模式,进而得到表2所示的压缩模式对照表。表2压缩模式对照表压缩模式压缩后的参考帧数据块的尺寸00<=16mn01<=32mn10<=48mn11>48mn基于同一发明构思,本公开实施例还提供一种压缩参考帧数据块的装置。图8是根据一示例性实施例示出的一种压缩参考帧数据块的装置的示意图。如图8所示,该装置100包括:划分模块101,用于将一个参考帧数据块划分成多个压缩单元;压缩模块102,用于对每个压缩单元进行压缩。可选地,所述压缩模块包括:熵编码模块,用于对同一所述压缩单元采用至少两种熵编码方式进行熵编码;确定模块,用于根据所述压缩单元经至少两种熵编码方式熵编码后的比特数,确定出所述压缩单元被压缩后得到的数据流。可选地,所述装置还包括:第一存储器划分模块,用于按照一个所述参考帧数据块所占存储空间的大小确定一个固定大小的存储单元的规则,将外部存储器的存储空间划分为多个存储单元;第一存储模块,用于按照一个所述参考帧数据块被压缩后得到的总数据流占据一个所述存储单元的规则,将每个所述总数据流存储到所述外部存储器中,一个所述总数据流为一个所述参考帧数据块的多个压缩单元被压缩后得到的数据流的总和。可选地,所述装置还包括:第二存储器划分模块,用于按照一个所述参考帧数据块所占存储空间的至少两倍为一个存储单元的规则,将外部存储器的存储空间划分为多个存储单元;第二存储模块,用于按照一个所述参考帧数据块被压缩后得到的总数据流占据一个所述存储单元的规则,将每个所述总数据流存储到所述外部存储器中,一个所述总数据流为一个所述参考帧数据块的多个压缩单元被压缩后得到的数据流的总和。可选地,所述熵编码模块包括:最大值确定子模块,用于确定每个压缩单元的预测残差数据块中各个预测残差的绝对值的最大值是m;第一编码子模块,用于对m=0的压缩单元的预测残差数据块的编码模式进行编码,且将m=0的压缩单元的预测残差数据块中各个预测残差的编码码字设置为空;第二编码子模块,用于对m>0的压缩单元的预测残差数据块的编码模式进行编码,且在两个周期内对m>0的压缩单元的所有预测残差进行编码,其中,在所述两个周期内的第一个周期内利用n比特二进制数表示绝对值小于2n-1的预测残差以及绝对值不小于2n-1的预测残差的编码码字的高n位,在所述两个周期内第二个周期内利用n比特二进制数表示绝对值不小于2n-1的预测残差的编码码字的低n位,其中,n为大于0的整数。可选地,所述熵编码模块包括:第一执行子模块,用于将每个压缩单元分别作为待处理单元,对每个所述待处理单元执行以下步骤:将所述待处理单元的预测残差数据块分为尺寸相同的多个预测残差数据子块;第二执行子模块,用于将每个预测残差数据子块作为待处理子块,对每个所述待处理子块执行以下步骤:确定所述待处理子块中各个预测残差的绝对值的最大值;对所述最大值对应的二进制数的位宽进行编码,且根据所述位宽对所述待处理子块中各个预测残差进行编码。关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。基于同一发明构思,本公开实施例还提供一种芯片。图9是根据一示例性实施例示出的一种芯片700的框图。如图9所示,该芯片700可以包括:处理器701,存储器702,以及总线705。总线705用于实现芯片700与外部存储器之间的数据传输。外部存储器用于存储参考帧数据块被压缩后得到的总数据流。其中,处理器701用于完成上述的压缩参考帧数据块的方法中的全部或部分步骤。存储器702用于存储各种类型的数据以支持在该芯片700的操作,这些数据例如可以包括用于在该芯片700上操作的任何应用程序或方法的指令。该存储器702可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。在一示例性实施例中,芯片700可以做为一个独立的具有压缩功能的芯片,也可以被集成在编解码器中,作为编解码器中的一个具有压缩功能的组件。在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,例如包括程序指令的存储器702,上述程序指令可由芯片700的处理器701执行以完成上述的压缩参考帧数据块的方法。以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1