发明内容
本公开的目的是提供一种数据处理系统、电子组件、电子设备及数据处理方法,旨在降低解码后的数据对系统带宽的压力。
根据本公开的一个方面,提供一种数据处理系统,数据处理系统包括缓存模块:
缓存模块用于判断解码器输出的当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度;当前数据对应的目标数据是指:已经被解码器输出的、且与当前数据属于同一个处理单位的数据;
缓存模块还用于在总长度等于单位处理长度的情况下,将当前数据和当前数据对应的目标数据作为一个处理单位输入至压缩模块进行压缩;
缓存模块还用于在总长度不等于单位处理长度的情况下,存储当前数据。
本公开一种可行的实现方式中,缓存模块还用于根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据。
本公开一种可行的实现方式中,缓存模块在根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据时,具体用于:
将当前数据的地址与每个处理单位各自的地址区间进行比较;每个处理单位的地址区间是根据该处理单位的最小首地址和单位处理长度确定的,处理单位的最小首地址是指该处理单位内每个数据的首地址中最小的首地址;
在当前数据的地址位于一个处理单位的地址区间的情况下,将属于该处理单位的每个数据确定为当前数据对应的目标数据。
本公开一种可行的实现方式中,缓存模块包括多个第一缓存单元,每个第一缓存单元用于存储已经被解码器输出的、且属于同一个处理单位的数据;
缓存模块还用于在当前数据不存在对应的目标数据的情况下,为当前数据分配一个空的第一缓存单元,并记录当前数据对应的处理单位状态信息;
处理单位状态信息包括以下多种信息中的至少之一:当前数据的地址,当前数据的长度,为当前数据分配的第一缓存单元的标识。
本公开一种可行的实现方式中,缓存模块还用于在当前数据不存在对应的目标数据,且多个第一缓存单元中不存在空的第一缓存单元的情况下,将当前数据存储至缓存模块外的存储器,并记录当前数据对应的处理单位状态信息;
处理单位状态信息包括以下多种信息中的至少之一:当前数据的地址,当前数据的长度,当前数据在所述存储器中的地址。
本公开一种可行的实现方式中,缓存模块在总长度不等于单位处理长度的情况下,存储当前数据时,具体用于:
在总长度不等于单位处理长度的情况下,根据当前数据对应的处理单位状态信息,将当前数据存储至相应的第一缓存单元,或者存储至存储器;
更新当前数据对应的处理单位状态信息。
本公开一种可行的实现方式中,缓存模块还包括状态缓存单元,状态缓存单元用于存储处理单位状态信息。
本公开一种可行的实现方式中,缓存模块还包括第二缓存单元;
缓存模块还用于在总长度等于单位处理长度,且当前数据对应的目标数据存储在存储器中的情况下,将当前数据存储至第二缓存单元,并从存储器读取当前数据对应的目标数据至第二缓存单元。
本公开一种可行的实现方式中,缓存模块在判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度之前,还用于:判断当前数据是否是一行图像数据中的最后一部分;
缓存模块还用于在当前数据是一行图像数据中的最后一部分的情况下,计算当前数据和当前数据对应的目标数据的总长度,在该总长度小于单位处理长度的情况下,对当前数据进行补充,使得补充后的当前数据和目标数据的总长度等于单位处理长度,再将补充后的当前数据和目标数据作为一个处理单位输入至压缩模块进行压缩。
本公开一种可行的实现方式中,缓存模块在判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度时,具体用于:
在当前数据不是一行图像数据中的最后一部分的情况下,判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度。
本公开一种可行的实现方式中,缓存模块在判断当前数据是否是一行图像数据中的最后一部分之前,还用于:判断当前数据的长度是否等于单位处理长度;
缓存模块在判断当前数据是否是一行图像数据中的最后一部分时,具体用于:在当前数据的长度小于单位处理长度的情况下,判断当前数据是否是一行图像数据中的最后一部分;
缓存模块还用于在当前数据的长度等于单位处理长度的情况下,将当前数据作为一个处理单位输入至压缩模块进行压缩。
本公开一种可行的实现方式中,数据处理系统还包括解码器和压缩模块;
解码器用于解码图像数据,并输出解码后的数据;
压缩模块用于对缓存模块输入的数据进行压缩。
本公开一种可行的实现方式中,解码器在解码图像数据时,具体用于:
在图像数据是按图块分割的图像数据的情况下,按照图块顺序对图像数据进行解码。
根据本公开的另一方面,还提供一种电子组件,该电子组件包括上述任一实施例中所述的数据处理系统。在一些使用场景下,该电子装置的产品形式体现为SoC芯片、显卡或者CPU主板。
根据本公开的另一方面,还提供一种电子设备,该电子设备包括上述的电子组件。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机等。
根据本公开的另一方面,还提供一种数据处理方法,该方法包括:
判断解码器输出的当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度;当前数据对应的目标数据是指:已经被解码器输出的、且与当前数据属于同一个处理单位的数据;
在总长度等于单位处理长度的情况下,将当前数据和当前数据对应的目标数据作为一个处理单位输入至压缩模块进行压缩;
在总长度不等于单位处理长度的情况下,存储当前数据。
本公开一种可行的实现方式中,该方法还包括:
根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据。
本公开一种可行的实现方式中,根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据,包括:
将当前数据的地址与每个处理单位各自的地址区间进行比较;每个处理单位的地址区间是根据该处理单位的最小首地址和单位处理长度确定的,处理单位的最小首地址是指该处理单位内每个数据的首地址中最小的首地址;
在当前数据的地址位于一个处理单位的地址区间的情况下,将属于该处理单位的每个数据确定为当前数据对应的目标数据。
本公开一种可行的实现方式中,该方法还包括:
在当前数据不存在对应的目标数据的情况下,从多个第一缓存单元中为当前数据分配一个空的第一缓存单元,并将当前数据存储至空的第一缓存单元;每个第一缓存单元用于存储已经被解码器输出的、且属于同一个处理单位的数据;
记录当前数据对应的处理单位状态信息;处理单位状态信息包括以下多种信息中的至少之一:当前数据的地址,当前数据的长度,为当前数据分配的第一缓存单元的标识。
本公开一种可行的实现方式中,该方法还包括:
在当前数据不存在对应的目标数据,且多个第一缓存单元中不存在空的第一缓存单元的情况下,将当前数据存储至外部的存储器,并记录当前数据对应的处理单位状态信息;
处理单位状态信息包括以下多种信息中的至少之一:当前数据的地址,当前数据的长度,当前数据在存储器中的地址。
本公开一种可行的实现方式中,在总长度不等于单位处理长度的情况下,存储当前数据,包括:
在总长度不等于单位处理长度的情况下,根据当前数据对应的处理单位状态信息,将当前数据存储至相应的第一缓存单元,或者存储至存储器;
更新当前数据对应的处理单位状态信息。
本公开一种可行的实现方式中,该方法还包括:
在总长度等于单位处理长度,且当前数据对应的目标数据存储在存储器中的情况下,将当前数据存储至第二缓存单元,并从存储器读取当前数据对应的目标数据至第二缓存单元。
本公开一种可行的实现方式中,在判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度之前,该方法还包括:判断当前数据是否是一行图像数据中的最后一部分;
该方法还包括:在当前数据是一行图像数据中的最后一部分的情况下,计算当前数据和当前数据对应的目标数据的总长度,在该总长度小于单位处理长度的情况下,对当前数据进行补充,使得补充后的当前数据和目标数据的总长度等于单位处理长度,再将补充后的当前数据和目标数据作为一个处理单位输入至压缩模块进行压缩。
本公开一种可行的实现方式中,判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度,包括:
在当前数据不是一行图像数据中的最后一部分的情况下,判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度。
本公开一种可行的实现方式中,在判断当前数据是否是一行图像数据中的最后一部分之前,该方法还包括:判断当前数据的长度是否等于单位处理长度;
判断当前数据是否是一行图像数据中的最后一部分,包括:在当前数据的长度小于单位处理长度的情况下,判断当前数据是否是一行图像数据中的最后一部分;
该方法还包括:在当前数据的长度等于单位处理长度的情况下,将当前数据作为一个处理单位输入至压缩模块进行压缩。
具体实施方式
在介绍本公开实施例之前,应当说明的是:
本公开部分实施例被描述为处理流程,虽然流程的各个操作步骤可能被冠以顺序的步骤编号,但是其中的操作步骤可以被并行地、并发地或者同时实施。
本公开实施例中可能使用了术语“第一”、“第二”等等来描述各个特征,但是这些特征不应当受这些术语限制。使用这些术语仅仅是为了将一个特征与另一个特征进行区分。
本公开实施例中可能使用了术语“和/或”,“和/或”包括其中一个或更多所列出的相关联特征的任意和所有组合。
应当理解的是,当描述两个部件的连接关系或通信关系时,除非明确指明两个部件之间直接连接或直接通信,否则,两个部件的连接或通信可以理解为直接连接或通信,也可以理解为通过中间部件间接连接或通信。
为了使本公开实施例中的技术方案及优点更加清楚明白,以下结合附图对本公开的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本公开的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
随着显示格式从1080P到4K再到8K,解码后的图像数据对系统带宽造成了很大的压力。为了降低解码后的数据对系统带宽的压力,本公开的发明人想到在解码器的输出端连接压缩模块,利用压缩模块对解码器输出的数据进行压缩,从而有效压缩解码后的数据的大小,降低解码后的数据对系统带宽的压力。但是在具体实现时,发明人发现解码器与压缩模块之间存在不适配的情况,发明人通过分析后进一步发现这种不适配的原因主要是:
一方面,压缩模块是按照固定的单位处理长度对数据进行压缩处理的。比如固定的单位处理长度为256bytes,则每次输入给压缩模块的数据长度必须等于256bytes,否则压缩模块不能正确实施压缩。另一方面,解码器在解码图像数据时,通常也是按照固定长度(比如256bytes)向外输出数据,在此情况下,由于解码器输出的数据长度与压缩模块的单位处理长度相等,因此解码器和压缩模块之间是匹配的。但是当图像数据的编码格式是H.265编码格式或VP9编码格式时,H.265编码格式和VP9编码格式具有按任意图块(tile)分割图像的功能,在此情况下,解码器会按照图块顺序对图像数据进行解码,每当解码至图块边界时,输出的数据通常小于256bytes,这就导致解码器和压缩模块之间不再适配。
基于上述情况,本公开发明人通过以下实施例提供一种数据处理系统、电子组件、电子设备及数据处理方法,旨在降低解码后的数据对系统带宽的压力,并进一步克服解码器和压缩模块之间不适配的问题。
参考图1,图1是本公开一实施例提供的数据处理系统的结构示意图。如图1所示,该数据处理系统包括缓存模块,缓存模块用于判断解码器输出的当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度。其中,当前数据对应的目标数据是指:已经被解码器输出的、且与当前数据属于同一个处理单位的数据。
缓存模块还用于在总长度等于单位处理长度的情况下,将当前数据和当前数据对应的目标数据作为一个处理单位输入至压缩模块进行压缩。
缓存模块还用于在总长度不等于单位处理长度的情况下,存储当前数据。
本公开中,在解码器和压缩模块之间设置缓存模块,当缓存模块获得解码器输出的当前数据后,计算当前数据和当前数据对应的目标数据的总长度,并判断该总长度是否等于压缩模块的单位处理长度。如果相等,则说明当前数据及其对应的目标数据能被压缩模块处理,因此可以将当前数据及其对应的目标数据作为一个处理单位输入至压缩模块进行压缩处理。如果不相等,则说明当前数据及其对应的目标数据还不能被压缩模块处理,因此可以暂时存储当前数据,等待凑够单位处理长度后,再输入至压缩模块进行压缩处理。
为便于理解,示例性地,假设压缩模块的单位处理长度等于256bytes。又假设解码器输出的当前数据的长度为64bytes,而当前数据对应的目标数据包括两份,两份目标数据的长度均为96bytes,因此当前数据与其对应的目标数据的总长度等于64+96+96=256bytes,与压缩模块的单位处理长度相等,进而将当前数据及其对应的目标数据作为一个处理单位输入至压缩模块进行压缩处理。
或者假设解码器输出的当前数据的长度为96bytes,而当前数据对应的目标数据仅一份,该份目标数据的长度为96bytes,因此当前数据与其对应的目标数据的总长度等于192bytes,小于压缩模块的单位处理长度,因此暂时存储当前数据。等到解码器输出与当前数据属于同一个处理单位且能凑够256bytes的数据后,再将该处理单位输入至压缩模块进行压缩处理。
本公开中,通过在解码器和压缩模块之间设置缓存模块,缓存模块在当前数据和当前数据对应的目标数据的总长度不等于压缩模块的单位处理长度的情况下,存储当前数据,在当前数据和当前数据对应的目标数据的总长度等于压缩模块的单位处理长度的情况下,将当前数据和当前数据对应的目标数据作为一个处理单位输入至压缩模块进行压缩,压缩模块输出压缩后的数据,从而能有效降低解码后的数据对系统带宽的压力,也能克服解码器和压缩模块之间不适配的问题。
在本公开的一些具体实施方式中,缓存模块还用于根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据。
本公开中,缓存模块根据当前数据的地址和已经被解码器输出的数据的地址,确定出当前数据对应的目标数据后,才判断当前数据及其对应的目标数据的总长度是否等于压缩模块的单位处理长度。
缓存模块在确定当前数据对应的目标数据时,一种比较简单高效的确定方式是:将当前数据的地址与每个处理单位各自的地址区间进行比较;每个处理单位的地址区间是根据该处理单位的最小首地址和单位处理长度确定的,处理单位的最小首地址是指该处理单位内每个数据的首地址中最小的首地址;在当前数据的地址位于一个处理单位的地址区间的情况下,将属于该处理单位的每个数据确定为当前数据对应的目标数据。
其中,缓存模块可以预先计算每个处理单位的地址区间,比如在解码器输出一个处理单位的第一份数据时,缓存模块就可以根据该第一份数据的首地址和单位处理长度确定出该处理单位的地址区间。具体确定方式可以是:将第一份数据的首地址作为地址区间的下限,将第一份数据的首地址加上单位处理长度后对应的地址,作为地址区间的上限。其中,处理单位的第一份数据就是该处理单位中首地址最小的一段数据,换言之,也就是连续256bytes数据(假设单位处理长度等于256bytes)中地址最小的一段数据。
缓存模块在确定当前数据对应的目标数据时,将当前数据的地址(可以是首地址或结束地址)与各个处理单位的地址区间进行比较,如果当前数据的地址位于某个处理单位的地址区间内,则该处理单位中的每个数据就是当前数据对应的目标数据,换言之,当前数据也属于该处理单位。比如当前数据的地址恰好位于处理单位b的地址区间[b1,b1+256]内,则当前数据属于处理单位b,处理单位b中的数据是当前数据对应的目标数据。
此外,如果当前数据的地址没有位于任何一个处理单位的地址区间内,则说明当前数据不存在对应的目标数据。换言之,说明当前数据是一个处理单位中的第一份数据,进而可以根据当前数据的首地址和单位处理长度确定出该处理单位的地址区间。
本公开中,在确定当前数据对应的目标数据时,通过将当前数据与每个处理单位的地址区间进行比较,就可以确定当前数据对应的目标数据,确定方式简单且高效,有利于降低SoC芯片的复杂度。
此外,缓存模块在确定当前数据对应的目标数据时,另一种确定方式是:根据处理单位内首地址最大的一份数据的首地址和长度,计算该份数据的结束地址,并判断该结束地址与当前数据的首地址是否相等,如果两者相等,则将属于该处理单位的每个数据确定为当前数据对应的目标数据。
为便于理解,示例性地,假设处理单位a中包括数据x和数据y,其中数据x的首地址最大,则根据数据x的首地址和数据x的长度,计算出数据x的结束地址,并将数据x的结束地址与当前数据的首地址进行比较,如果两者相等,则将处理单位a中包括的数据x和数据y确定为当前数据对应的目标数据,同时也说明当前数据属于处理单位a。
在本公开的一些具体实施方式中,如图2所示,图2是本公开一实施例提出的缓存模块的结构示意图,缓存模块包括多个第一缓存单元,每个第一缓存单元用于存储已经被解码器输出的、且属于同一个处理单位的数据。
缓存模块还用于在当前数据不存在对应的目标数据的情况下,为当前数据分配一个空的第一缓存单元,并记录当前数据对应的处理单位状态信息。其中,处理单位状态信息包括以下多种信息中的至少之一:当前数据的地址,当前数据的长度,为当前数据分配的第一缓存单元的标识。
本公开中,如果当前数据不存在对应的目标数据,也就是在已经被解码器输出的数据中,没有与当前数据属于同一个处理单位的数据,从而说明当前数据是一个处理单位中的第一份数据。
如果当前数据是一个处理单位中的第一份数据,则缓存模块会为当前数据分配一个空的第一缓存单元,该第一缓存单元用于缓存当前数据,以及用于缓存解码器后续输出的与当前数据属于同一个处理单位的数据。此外,缓存单元还会记录当前数据对应的处理单位状态信息,该处理单位状态信息可以包括当前数据的首地址、当前数据的长度、为当前数据分配的第一缓存单元的标识,其中,第一缓存单元的标识具体可以是第一缓存单元的索引信息index。
在一些具体实施方式中,处理单位状态信息还可以包括该处理单位对应的地址区间,地址区间的计算方式可参考上述实施例,为简化说明,此处不再赘述。缓存模块后续在接收到解码器输出的新的数据时,可以根据每个处理单位状态信息中的地址区间,确定新数据所属的处理单位和对应的目标数据。
在一些具体实施方式中,处理单位状态信息还可以包括存储指示信息,存储指示信息用于表征该处理单位的数据是否存储在缓存模块内。
需要说明的是,本公开中第一缓存单元为空,可以有以下几种情况:1)第一缓存单元中没有存储任何数据;2)第一缓存单元中存储的数据已经全部输入至压缩模块。换言之,如果一个第一缓存单元中没有存储任何数据,则该第一缓存单元是空的。如果一个第一缓存单元中存储的数据已经全部输入至压缩模块,则也认为该第一缓存单元是空的。
图2中示例性地示出了6个第一缓存单元,每个第一缓存单元至少包括:数据段和有效性指示段。其中,每个第一缓存单元的数据段用于存储解码器输出的数据,这些数据属于同一个处理单位,且还未被输入给压缩模块。每个第一缓存单元的数据段的长度(即存储容量)大于等于单位处理长度。为了降低成本和/或减少对芯片面积的占用,每个第一缓存单元的数据段的长度可以配置为等于单位处理长度,比如256bytes。每个第一缓存单元的有效性指示段用于存储有效性标识,有效性标识用于表示该第一缓存单元是否为空,也就是表示该第一缓存单元是否可被分配。如图2所示,当第一缓存单元的有效性标识为1时,表示该第一缓存单元非空,该第一缓存单元已经被占用,从而不能被分配;当第一缓存单元的有效性标识为0时,表示该第一缓存单元为空,该第一缓存单元未被占用,从而可以被分配。
图2中,其中第一缓存单元A、第一缓存单元B及第一缓存单元C均非空,第一缓存单元A、第一缓存单元B及第一缓存单元C已经分别存储了处理单位a、处理单位b及处理单位c的部分数据。而第一缓存单元D、第一缓存单元E及第一缓存单元F均为空。如果解码器输出的当前数据是一个处理单位中的第一份数据,则解码器可以从第一缓存单元D、第一缓存单元E及第一缓存单元F中为当前数据分配一个第一缓存单元,并将当前数据存储至分配的第一缓存单元的数据段,并将第一缓存单元的有效性标识更新为1。
在本公开的一些具体实施方式中,如图2所示,缓存模块还可以包括状态缓存单元,状态缓存单元用于存储处理单位状态信息。在一些实现方式中,状态缓存单元的数量为多个,每个状态缓存单元用于存储一个处理单位的处理单位状态信息。在一些实现方式中,状态缓存单元的数量为一个,该状态缓存单元用于存储每个处理单位的处理单位状态信息。在一些实现方式中,状态缓存单元的数量为几个,每个状态缓存单元用于存储一部分处理单位的处理单位状态信息。
在本公开的一些具体实施方式中,考虑到H.265编码格式和VP9编码格式可以按任意图块(tile)分割图像,分割图像时采用的tile高度决定了需要的第一缓存单元的数量,比如在采用高度较高的tile对图像进行分割时,需要的第一缓存单元越多。为便于理解,如图3所示,图像a和图像b均被tile分割,图像a中的tile高度为4个像素,图像b中的tile高度为8个像素。
解码器在对图像a进行解码时,按照tile1至tile12的顺序依次解码每个tile中的数据,当一个tile中的数据被全部解码后,再继续解码下一个tile中的数据。解码器在解码每个tile时,按照从上至下的顺序依次解码该tile中的每行像素的数据,并且在解码每一行像素的数据时,按照从左向右的顺序读取数据进行解码。
如图3所示,解码器在对图像a进行解码时,按照以下顺序进行解码:
1)对第一行的区域1的数据进行解码;区域1的数据量等于预设的单位数据量,解码器对单位数据量进行解码后得到的数据长度等于前述单位处理长度(以下以单位处理长度等于256bytes为例),因此区域1被解码后的数据的长度等于256bytes,该数据可以直接被输入至压缩模块进行压缩,而不需要被缓存;
2)对第一行的区域2的数据进行解码;区域2的最右侧是tile1的边界,区域2的数据量小于单位数据量,区域2被解码后的数据的长度小于256bytes,区域2被解码后的数据会被分配一个空的第一缓存单元(例如第一缓存单元a);
3)对第二行的区域3的数据进行解码;区域3被解码后的数据的长度等于256bytes,该数据不需要被缓存;
4)对第二行的区域4的数据进行解码,区域4被解码后的数据的长度小于256bytes,区域4被解码后的数据会被分配一个空的第一缓存单元(例如第一缓存单元b);
5)对第三行的区域5的数据进行解码;区域5被解码后的数据的长度等于256bytes,该数据不需要被缓存;
6)对第三行的区域6的数据进行解码,区域6被解码后的数据的长度小于单位处理长度,区域6被解码后的数据会被分配一个空的第一缓存单元(例如第一缓存单元c);
7)对第四行的区域7的数据进行解码;区域7被解码后的数据的长度等于256bytes,该数据不需要被缓存;
8)对第四行的区域8的数据进行解码,区域8被解码后的数据的长度小于单位处理长度,区域8被解码后的数据会被分配一个空的第一缓存单元(例如第一缓存单元d);
9)对第一行的区域9的数据进行解码;区域9的数据量与区域2的数据量的总和等于预设的单位数据量,区域9被解码后的数据与第一缓存单元a中存储的数据属于同一个处理单位,并且两者的总长度等于256bytes,因此两者作为一个处理单位被输入至压缩模块进行压缩,然后将第一缓存单元a的有效性标识更新为0,表示第一缓存单元a此时为空;
10)对第一行的区域10的数据进行解码;区域10被解码后的数据的长度等于256bytes,该数据不需要被缓存;
11)对第一行的区域11的数据进行解码;区域11被解码后的数据的长度小于256bytes,区域11被解码后的数据被存储至新的第一缓存单元a;
12)对第二行的区域12的数据进行解码;区域12的数据量与区域4的数据量的总和等于预设的单位数据量,区域12被解码后的数据与第一缓存单元b中存储的数据属于同一个处理单位,并且两者的总长度等于256bytes,因此两者作为一个处理单位被输入至压缩模块进行压缩,然后将第一缓存单元b的有效性标识更新为0,表示第一缓存单元b此时为空。
依次类推,解码器完成对图像a的解码。可见,解码器在对图像a进行解码时,为了实现解码器与压缩模块的适配,至少需要第一缓存单元a、第一缓存单元b、第一缓存单元c、第一缓存单元d等4个第一缓存单元。按照相同的方式,解码器在对图像b进行解码时,为了实现解码器与压缩模块的适配,至少需要8个第一缓存单元。可见,分割图像时采用的tile高度决定了需要的第一缓存单元的数量。
此外,还需要补充说明的是,每个处理单元由多少份数据构成,主要取决于tile的宽度,tile的宽度越小,每个处理单位包括的数据份数越多。比如图3的图像a中,区域2解码后的数据和区域9解码后的数据构成了一个处理单位,换言之,该处理单位仅由两份数据构成。而如果将图像a中的tile的宽度缩小,使得一个预设的单位数据量被截断2次或更多次,则处理单位就会由3份或者更多份数据构成。
如前所述,由于分割图像时采用的tile高度决定了需要的第一缓存单元的数量,而在H.265编码格式和VP9编码格式下,tile的尺寸是任意的,因此在tile的高度很高的情况下,所需的第一缓存单元的数量较大。而为了控制芯片成本和/或降低第一缓存单元对芯片面积的占用,通常只会设置有限数量个第一缓存单元。所以当tile的高度很高时,会出现第一缓存单元不够用的情况。
为了应对第一缓存单元不够用的情况,本公开中,缓存模块还用于在当前数据不存在对应的目标数据,且多个第一缓存单元中不存在空的第一缓存单元的情况下,将当前数据存储至缓存模块外的存储器,并记录当前数据对应的处理单位状态信息。其中,处理单位状态信息包括以下多种信息中的至少之一:当前数据的地址,当前数据的长度,当前数据在所述存储器中的地址。
本公开中,如果当前数据是一个处理单位中的第一份数据,则缓存模块会从多个第一缓存单元中寻找空的第一缓存单元,如果寻找到空的第一缓存单元,则缓存模块将寻找到的空的第一缓存单元分配给当前数据。如果全部第一缓存单元均已被占用(也就是不存在空的第一缓存单元),则缓存模块将当前数据存储至缓存模块外的存储器(比如GDDR)。此外,缓存单元还会记录当前数据对应的处理单位状态信息,该处理单位状态信息可以包括当前数据的首地址、当前数据的长度、当前数据在GDDR中的地址,该处理单位状态信息可以存储在图2所示的状态缓存单元中。
在一些具体实施方式中,处理单位状态信息还可以包括该处理单位对应的地址区间,地址区间的计算方式可参考上述实施例,为简化说明,此处不再赘述。缓存模块后续在接收到解码器输出的新的数据时,可以根据每个处理单位状态信息中的地址区间,确定新数据所属的处理单位和对应的目标数据。
在一些具体实施方式中,处理单位状态信息还可以包括存储指示信息,存储指示信息用于表征该处理单位的数据是否存储在缓存模块内。
如前所述,缓存模块还用于在当前数据和当前数据对应的目标数据的总长度不等于单位处理长度的情况下,存储当前数据。在本公开的一些具体实施方式中,缓存模块在总长度不等于单位处理长度的情况下,存储当前数据时,具体用于:在总长度不等于单位处理长度的情况下,根据当前数据对应的处理单位状态信息,将当前数据存储至相应的第一缓存单元,或者存储至存储器;更新当前数据对应的处理单位状态信息。
具体实现时,在当前数据和当前数据对应的目标数据的总长度不等于单位处理长度的情况下,缓存模块通过查询当前数据对应的处理单位状态信息,根据该处理单位状态信息中的存储指示信息,确定该处理单位的数据具体是存储在缓存模块内,还是存储在缓存模块外的GDDR。如果该处理单位的数据存储在缓存模块内,则进一步根据该处理单位状态信息中的第一缓存单元标识,将当前数据存储至相应的第一缓存单元。如果该处理单位的数据存储在缓存模块外的GDDR,则进一步根据该处理单位状态信息中的存储器地址信息,将当前数据存储至GDDR的相应位置。
在本公开的一些具体实施方式中,如图2所示,缓存模块还可以包括第二缓存单元。缓存模块还用于在总长度等于单位处理长度,且当前数据对应的目标数据存储在存储器中的情况下,将当前数据存储至第二缓存单元,并从存储器读取当前数据对应的目标数据至第二缓存单元。
本公开中,如果解码器输出的当前数据与其对应的目标数据的总长度等于单位处理长度,则可以将当前数据及其对应的目标数据作为一个处理单位输出给压缩模块。如果此时当前数据对应的目标数据存储在缓存模块内的一个第一缓存单元中,则缓存模块可以先将当前数据存储至该第一缓存单元,然后将该第一缓存单元的数据段中的全部数据作为一个处理单位输入至压缩模块进行压缩。而如果此时当前数据对应的目标数据存储在缓存模块外的GDDR中,则缓存模块可以先将当前数据存储至第二缓存单元,并从存储器中将当前数据对应的目标数据读取至第二缓存单元,对当前数据及其目标数据进行拼接后,将拼接后的数据作为一个处理单位输入至压缩模块进行压缩。
本公开中,对于存储在存储器(例如GDDR)中的各个处理单位的数据,通过共用第二缓存单元,可以有效降低芯片成本,并减少缓存模块对芯片面积的占用。
在本公开的一些具体实施方式中,缓存模块在判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度之前,还用于:判断当前数据是否是一行图像数据中的最后一部分。
其中,一行图像数据是指:图像中一行像素对应的数据。而一行图像数据中的最后一部分是指:一行像素中的最后一段像素对应的数据。本公开中,如果一段像素是连续的,且包含一行像素的最末端像素,则该段像素就是一行像素中的最后一段像素。比如一行像素包括像素1至像素2560,其中像素2560是最末端像素。如果某段像素包括像素N(1≤N≤2560)至像素2560,其中像素N至像素2560是连续的,则该段像素就是这一行像素中的最后一段像素。
本公开中,可以根据一行图像数据的地址信息和当前数据的地址,判断当前数据是否是该行图像数据的最后一部分。
在一些具体实施方式中,可以通过读取分辨率寄存器中存储的当前图像的分辨率信息,确定一行图像包括的像素个数,通过读取图像格式寄存器中存储的当前图像的图像格式信息,确定每个像素的数据量,再根据一行图像的像素个数和每个像素的数据量,确定一行图像的结束地址。如果当前数据的结束地址与某一行图像的结束地址相等,则确定当前数据是一行数据的最后一部分。需要说明的是,该具体实施方式仅是本公开多种可能的实施方式中的一种,本公开对于如何判断当前数据是否是该行图像数据的最后一部分,不做限定。
缓存模块还用于在当前数据是一行图像数据中的最后一部分的情况下,计算当前数据和当前数据对应的目标数据的总长度,在该总长度小于单位处理长度的情况下,对当前数据进行补充,使得补充后的当前数据和目标数据的总长度等于单位处理长度,再将补充后的当前数据和目标数据作为一个处理单位输入至压缩模块进行压缩。
本公开中,缓存单元在获得解码器输出的当前数据后,可以判断当前数据是否是一行图像数据中的最后一部分,若是,则进一步确定当前数据对应的目标数据,并计算当前数据及其目标数据的总长度,如果总长度小于单位处理长度,则计算单位长度与总长度的长度差,根据该长度差对当前数据进行补零,比如长度差为5bytes,则在当前数据的尾部补充长度为5bytes的0,从而使得补0后的当前数据及其目标数据的总长度等于单位处理长度,再将补0后的当前数据及其目标数据作为一个处理单位输入至压缩模块进行压缩。
此外,如果当前数据不是一行图像数据中的最后一部分,缓存模块才如前所述,判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度,如果等于,则将当前数据和当前数据对应的目标数据作为一个处理单位输入至压缩模块进行压缩,如果不等于,则缓存模块存储当前数据。
在本公开的一些具体实施方式中,缓存模块在判断当前数据是否是一行图像数据中的最后一部分之前,还用于:判断当前数据的长度是否等于单位处理长度。如果当前数据的长度小于单位处理长度,缓存模块才如前所述,判断当前数据是否是一行图像数据中的最后一部分。如果当前数据的长度等于单位处理长度,则缓存模块将当前数据作为一个处理单位输入至压缩模块进行压缩。
此外,如图1所示,数据处理系统还可以包括解码器和压缩模块。其中,解码器用于解码图像数据,并输出解码后的数据。压缩模块用于对缓存模块输入的数据进行压缩。在一些具体实施方式中,解码器在解码图像数据时,如果图像数据是按图块分割的图像数据,则解码器按照图块顺序对图像数据进行解码。
参考图4至图6,图4至图6是本公开一实施例提出的数据处理流程示意图。如图4至图6所示,该数据处理流程包括以下步骤:
S1:图形处理器GPU内的处理器通过读取视频文件(或者图像文件)的头文件header,确定当前帧图像是一个被tile分割的图像,然后处理器通过AHB总线对寄存器进行配置。
其中,处理器配置的寄存器包括基地址寄存器、分辨率寄存器及图像格式寄存器。基地址寄存器用于存储压缩数据的地址,分辨率寄存器用于存储当前帧图像的分辨率,图像格式寄存器用于存储当前帧图像的图像格式(例如YUV格式)。
S2:处理器置位使能寄存器,从而启动视频解码器。
S3:视频解码器按照tile顺序,依次对图像数据的各部分进行解码,从而依次输出各部分的解码后的数据。
其中,视频解码器可以基于AXI协议,以突发burst的形式向缓存模块输出解码后的数据。
S4:缓存模块获得视频解码器输出的当前数据,判断当前数据的长度是否等于256bytes(本示例中将压缩模块的单位处理长度设定为256bytes);若是,则执行S5;若否,则执行S6。
S5:将当前数据输入至压缩模块进行压缩。
S6:判断当前数据是否是一行图像数据中的最后一部分;若是,则执行S7;若否则执行S10。
S7:根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据。
其中,当前数据对应的目标数据是指:已经被解码器输出的、且与所述当前数据属于同一个处理单位的数据。
在确定当前数据对应的目标数据时,可以将当前数据的地址与每个处理单位对应的地址区间进行比较;如果当前数据的地址位于某个处理单位对应的地址区间内,则该处理单位中的数据为当前数据对应的目标数据;如果当前数据的地址没有位于任何一个处理单位对应的地址区间内,则当前数据不存在对应的目标数据,从而说明当前数据是一个处理单位的第一份数据,进而还可以根据当前数据的首地址确定该处理单位对应的地址区间。
S8:如果没有确定出目标数据(也就是当前数据不存在对应的目标数据),则在当前数据的末尾补0,直至当前数据的长度等于256bytes,然后将补0后的当前数据输入至压缩模块进行压缩。
S9:如果确定出目标数据,则计算当前数据与目标数据的总长度,在总长度等于256bytes的情况下,将当前数据和目标数据作为一个处理单位输入至压缩模块进行压缩;在总长度小于256bytes的情况下,在当前数据的末尾补0,直至补0后的当前数据与目标数据的总长度等于256bytes,然后将补0后的当前数据和目标数据作为一个处理单位输入至压缩模块进行压缩。
S10:根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据。
其中,当前数据对应的目标数据是指:已经被解码器输出的、且与所述当前数据属于同一个处理单位的数据。
在确定当前数据对应的目标数据时,可以将当前数据的地址与每个处理单位对应的地址区间进行比较;如果当前数据的地址位于某个处理单位对应的地址区间内,则该处理单位中的数据为当前数据对应的目标数据,同时说明当前数据属于该处理单位;如果当前数据的地址没有位于任何一个处理单位对应的地址区间内,则当前数据不存在对应的目标数据,从而说明当前数据是一个处理单位的第一份数据,进而还可以根据当前数据的首地址确定该处理单位对应的地址区间。
S11:如果没有确定出目标数据(也就是当前数据不存在对应的目标数据),则判断多个第一缓存单元中是否存在空的第一缓存单元;若是,执行步骤S12;若否,执行步骤S13。
其中,每个第一缓存单元位于缓存模块内。
S12:为当前数据分配一个空的第一缓存单元,并将当前数据存储至第一缓存单元的最小地址处。
此外,还可以记录当前数据对应的处理单位状态信,并将相应第一缓存单元的有效性标识更新为1,表示该第一缓存单元当前为非空。其中,当前数据对应的处理单位状态信息可以包括以下信息:当前数据的首地址,当前数据的长度,存储指示信息(存储指示信息用于表征该处理单位的数据是否存储在缓存模块内),为当前数据分配的第一缓存单元的标识,处理单位对应的地址区间。
S13:将当前数据存储至缓存模块外的GDDR存储器,并记录当前数据对应的处理单位状态信息。
其中,当前数据对应的处理单位状态信息可以包括以下信息:当前数据的首地址,当前数据的长度,存储指示信息(存储指示信息用于表征该处理单位的数据是否存储在缓存模块内),当前数据在GDDR存储器中的地址,处理单位对应的地址区间。
S14:如果确定出目标数据,则判断当前数据和目标数据的总长度是否等于256bytes;若是,执行步骤S15;若否,执行步骤S18。
S15:根据当前数据所属的处理单位的处理单位状态信息,判断该处理单位的数据是否存储在缓存模块内;若是,执行步骤S16;若否,执行步骤S17。
本实施例中,通过执行上述步骤S10,已经确定出当前数据所属的处理单位,在S15中,可以查询该处理单位对应的处理单位状态信息中的存储指示信息,从而确定该处理单位的数据是否存储在缓存模块内。
S16:根据处理单位状态信息中的第一缓存单元标识,从相应的第一缓存单元中读出当前数据对应的目标数据,并将当前数据和目标数据作为一个处理单位输入至压缩模块进行压缩。
然后,将相应第一缓存单元的有效性标识更新为0,表示该第一缓存单元已经为空。
S17:将当前数据存储至第二缓存单元,并根据处理单位状态信息中的GDDR存储器地址信息,从GDDR存储器的相应地址处,将当前数据对应的目标数据读回至第二缓存单元,然后将第二缓存单元中的当前数据和目标数据作为一个处理单位输入至压缩模块进行压缩。
其中,第二缓存单元位于缓存模块内。在从GDDR存储器读回当前数据对应的目标数据时,首先获取当前数据在第二缓存单元中的存储位置信息,并获取用于传输当前数据的burst所对应的ID,然后对该ID进行移位,并将存储位置信息放在ID的低位,从而生成一个具有唯一性的RID;然后缓存模块在基于AXI协议从GDDR存储器读取目标数据时,会向GDDR存储器发送RID,GDDR存储器返回目标数据时会携带该RID;缓存模块根据目标数据携带的RID的低位,确定出需要拼接的数据(即当前数据)在第二缓存单元中的位置,从而将当前数据与读回的目标数据进行拼接,最后将拼接后的数据作为一个处理单位输入至压缩模块进行压缩。
S18:根据当前数据所属的处理单位的处理单位状态信息,判断该处理单位的数据是否存储在缓存模块内;若是,执行步骤S19;若否,执行步骤S20。
本实施例中,通过执行上述步骤S10,已经确定出当前数据所属的处理单位,在S18中,可以查询该处理单位对应的处理单位状态信息中的存储指示信息,从而确定该处理单位的数据是否存储在缓存模块内。
S19:根据处理单位状态信息中的第一缓存单元标识,将当前数据存储至相应的第一缓存单元,并更新相应的处理单位状态信息。
其中,在更新相应的处理单位状态信息时,可以将当前数据的首地址和长度等信息补充至处理单位状态信息中。
此外,在将当前数据存储至第一缓存单元后,如果当前数据和第一缓存单元中已经存储的数据是连续的,还可以对两者进行拼接,然后更新处理单位状态信息中的数据长度。
S20:根据处理单位状态信息中的GDDR存储器地址信息,将当前数据存储至GDDR存储器的相应位置,并更新相应的处理单位状态信息。
其中,在更新相应的处理单位状态信息时,可以将当前数据的首地址和长度等信息补充至处理单位状态信息中。
此外,在将当前数据存储至GDDR存储器后,如果当前数据和GDDR存储器中已经存储的数据是连续的,还可以对两者进行拼接,然后更新处理单位状态信息中的数据长度。
本公开实施例还提供一种电子组件,该电子组件包括上述任一实施例中所述的数据处理系统。在一些使用场景下,该电子组件的产品形式体现为SoC芯片、显卡或者CPU主板。
本公开实施例还提供一种电子设备,该电子设备包括上述的电子组件。在一些使用场景下,该电子设备的产品形式是便携式电子设备,例如智能手机、平板电脑、VR设备等;在一些使用场景下,该电子设备的产品形式是个人电脑、游戏主机、工作站、服务器等。
参考图7,本公开实施例还提供一种数据处理方法,该数据处理方法和前述数据处理系统属于同一发明构思,因此为了避免重复,以下仅对该数据处理方法做简要说明,相关具体实施方式,可参考前述对数据处理系统的介绍。如图7所示,该数据处理方法包括以下步骤:
S710:判断解码器输出的当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度;当前数据对应的目标数据是指:已经被解码器输出的、且与当前数据属于同一个处理单位的数据。
S720:在总长度等于单位处理长度的情况下,将当前数据和当前数据对应的目标数据作为一个处理单位输入至压缩模块进行压缩。
S730:在总长度不等于单位处理长度的情况下,存储当前数据。
在本公开的一些具体实施方式中,该方法还包括:根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据。
在本公开的一些具体实施方式中,根据当前数据的地址和已经被解码器输出的数据的地址,确定当前数据对应的目标数据,包括:将当前数据的地址与每个处理单位各自的地址区间进行比较;每个处理单位的地址区间是根据该处理单位的最小首地址和单位处理长度确定的,处理单位的最小首地址是指该处理单位内每个数据的首地址中最小的首地址;在当前数据的地址位于一个处理单位的地址区间的情况下,将属于该处理单位的每个数据确定为当前数据对应的目标数据。
在本公开的一些具体实施方式中,该方法还包括:在当前数据不存在对应的目标数据的情况下,从多个第一缓存单元中为当前数据分配一个空的第一缓存单元,并将当前数据存储至空的第一缓存单元;每个第一缓存单元用于存储已经被解码器输出的、且属于同一个处理单位的数据;记录当前数据对应的处理单位状态信息;处理单位状态信息包括以下多种信息中的至少之一:当前数据的地址,当前数据的长度,为当前数据分配的第一缓存单元的标识。
在本公开的一些具体实施方式中,该方法还包括:在当前数据不存在对应的目标数据,且多个第一缓存单元中不存在空的第一缓存单元的情况下,将当前数据存储至外部的存储器,并记录当前数据对应的处理单位状态信息;处理单位状态信息包括以下多种信息中的至少之一:当前数据的地址,当前数据的长度,当前数据在存储器中的地址。
在本公开的一些具体实施方式中,在总长度不等于单位处理长度的情况下,存储当前数据,包括:在总长度不等于单位处理长度的情况下,根据当前数据对应的处理单位状态信息,将当前数据存储至相应的第一缓存单元,或者存储至存储器;更新当前数据对应的处理单位状态信息。
在本公开的一些具体实施方式中,该方法还包括:在总长度等于单位处理长度,且当前数据对应的目标数据存储在存储器中的情况下,将当前数据存储至第二缓存单元,并从存储器读取当前数据对应的目标数据至第二缓存单元。
在本公开的一些具体实施方式中,在判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度之前,该方法还包括:判断当前数据是否是一行图像数据中的最后一部分。
该方法还包括:在当前数据是一行图像数据中的最后一部分的情况下,计算当前数据和当前数据对应的目标数据的总长度,在该总长度小于单位处理长度的情况下,对当前数据进行补充,使得补充后的当前数据和目标数据的总长度等于单位处理长度,再将补充后的当前数据和目标数据作为一个处理单位输入至压缩模块进行压缩。
在本公开的一些具体实施方式中,判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度,包括:在当前数据不是一行图像数据中的最后一部分的情况下,判断当前数据和当前数据对应的目标数据的总长度是否等于压缩模块的单位处理长度。
在本公开的一些具体实施方式中,在判断当前数据是否是一行图像数据中的最后一部分之前,该方法还包括:判断当前数据的长度是否等于单位处理长度;判断当前数据是否是一行图像数据中的最后一部分,包括:在当前数据的长度小于单位处理长度的情况下,判断当前数据是否是一行图像数据中的最后一部分。
该方法还包括:在当前数据的长度等于单位处理长度的情况下,将当前数据作为一个处理单位输入至压缩模块进行压缩。
尽管已描述了本公开的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本公开范围的所有变更和修改。
显然,本领域的技术人员可以对本公开进行各种改动和变型而不脱离本公开的精神和范围。这样,倘若本公开的这些修改和变型属于本公开权利要求及其等同技术的范围之内,则本公开也意图包含这些改动和变型在内。