附图说明
图1是依据本发明一实施例说明一种图像数据处理装置的方块示意图。
图2是依据本发明一实施例说明一种图像数据处理装置的方块示意图。
图3是依据本发明一实施例说明一种图像数据处理方法的流程图。
图4是依据本发明一实施例说明对图像区块进行区块预测编码的流程图。
图5是依据本发明一实施例说明图4的图像数据处理方法的细部流程图。
图6是依据本发明一实施例说明在区块预测编码下,对图像区块中的像素进行预测的示意图。
图7A~7D是依据本发明一实施例说明扫描模式的示意图。
图8是依据本发明一实施例说明图4的图像数据处理方法的细部流程图。
图9是依据本发明一实施例说明对图像区块进行线性预测编码的流程图。
图10是依据本发明一实施例说明在线性预测编码下,对图像区块中的像素进行预测的示意图。
图11A~11B是依据本发明一实施例说明将已编码区块记录于第二图形缓冲器的示意图。
【符号说明】
100、200:图像数据处理装置
110、210:第一图形缓冲器
120、220:编码单元
122、222:线编码模块
124、224:区块编码模块
126、226:比较模块
130、230:图形处理器
132、232:运动补偿模块
140、240:第二图形缓冲器
150:第一解码单元
250:第一解码单元
260:显示引擎
602~610、1002~1010:预测方向
1110~1130:已编码区块
1140~1150:保留比特
R1:横行
C1:直列
L1~L4:线区块
S310~S340、S410~S440、S510~S550:步骤
S810~S890、S910~S930:步骤
具体实施方式
为了方便视频引擎及显示引擎对存储器中图像数据的存取,本发明实施例将会同时考量视频引擎的块状存取特性及显示引擎的线状存取特性,选择适当的图像区块尺寸为压缩单元来进行图像数据的处理。本实施例的显示引擎可从内部存储器总线(internalmemory bus)中以爆发模式(burst mode)一次读出最多32个像素,且可在一个请求中执行连续4次的爆发模式。视频引擎则以4乘4(4*4)像素的尺寸进行图像压缩。在上述情况下,本发明实施例选用尺寸为32乘4(32*4)像素的图像区块进行本发明实施例的图像数据处理方法。也就是说,下述实施例均以尺寸为32*4像素的图像区块为例进行说明。应用本实施例也可依照其需求而调整图像区块的尺寸,例如当内部存储器总线以爆发模式一次读出最多64个像素,且视频引擎则以8*8像素的尺寸进行图像压缩,则可选用尺寸为64*8像素的图像区块来实现下述的图像数据处理技术。
图1是依据本发明一实施例说明一种图像数据处理装置的方块示意图。图像数据处理装置100包括第一图形缓冲器110、编码单元120、图形处理器(Graphics ProcessingUnit,GPU)130、第二图形缓冲器140及第一解码单元150。第一图形缓冲器110例如是静态随机存取存储器(SRAM)或相似的元件,以储存图像区块,而第二图形缓冲器140例如是动态随机存取存储器(DRAM)或相似的元件,以储存将原始图像区块进行编码后的已编码区块。
在进行图像数据处理时,经图像处理器130处理后的图像区块会暂时储存在第一图形缓冲器110。编码单元120从第一图形缓冲器110接收此图像区块并对其进行编码,且将编码后的已编码区块存于第二图形缓冲器140中。特别说明的是,本实施例中的编码单元120包括线编码模块122、区块编码模块124及比较模块126。线编码模块122是用来对图像区块进行线性预测编码,而区块编码模块124则是用来对图像区块进行区块预测编码。比较模块126用以比较经由此两种编码预测产生的第一区块数据及第二区块数据,以选出具备较小数据量的区块数据,且将此区块数据作为已编码区块的数据。编码单元120将已编码区块的数据储存在第二图形缓冲器140中。
图形处理器130主要作用是对输入的图像信号进行处理。详细来说,图形处理器130会将对图像信号中的帧画面分割为多个图像区块,并将这些图像区块储存到第一图形缓冲器110。图形处理器130包括运动补偿模块132。运动补偿模块132在进行运动补偿(motion compensation,MC)时会控制第二图形缓冲器140将储存于其中的已编码区块送至第一解码单元150进行解码,以还原出图像区块来构建帧画面,进行运动补偿的后续操作。
图2是依据本发明一实施例说明一种图像数据处理装置的方块示意图。请参照图2,图像数据处理装置200包括第一图形缓冲器210、编码单元220、图形处理器230、第二图形缓冲器240、第二解码单元250及显示引擎260。在此说明的是,第一图形缓冲器210、编码单元220、第二图形缓冲器240、图形处理器230及其中的运动补偿模块232的功能与前述实施例中相同名称的元件相似,故其细节请参考前述。
与前述实施例的差异在于,本实施例的图像数据处理装置在进行显示处理时,显示引擎260通过第二解码单元250来对储存于第二图形缓冲器240中的已编码区块进行解码,并将解码后的图像区块提供给外部屏幕或显示设备以显示画面。
图3是依据本发明一实施例说明一种图像数据处理方法的流程图。请参照图3,本实施例的方法可适用于图1的图像数据处理装置100或图2的图像数据处理装置200。以下配合图1与图3来说明本实施例方法的详细流程。
于步骤S310中,第一图形缓冲器110会从图像处理器130获得对帧画面进行分割处理后的至少一个图像区块,其中此图像区块包括多个像素。举例来说,图形处理器130将帧画面切割为多个尺寸为32*4的图像区块,而第一图形缓冲器110可以取得至少一个包括32*4的图像区块。
于步骤S320中,编码单元120中的区块编码模块124会对取得的图像区块进行区块预测编码以获得第一区块数据。区块编码模块124对图像区块进行区块预测编码的详细步骤绘示于图4~图8中,以下将依序进行说明。
请参照图4,区块编码模块124对图像区块进行区块预测编码的流程,包括预测(prediction)、差值计算(differentiation)及自定义编码(tailor-made coding)三个主要步骤。在预测及差值计算时,于步骤S410中,区块编码模块124会通过图像区块的初始参考像素来预测图像区块中每个像素的数值,以产生像素的预测值,并依据像素的实际值与预测值的差异,产生对应到图像区块的差值矩阵。初始参考像素是将图像进行原样压缩的数据,以作为参考数据。像素数值的预测可以通过中值滤波器(median filter)、边缘滤波器(edge filter)、权重滤波器(weighted filter)或具有相似功能的组件来达成。
步骤S410的详细流程请参照图5。值得注意的是,本实施例所述的「当前像素」表示区块编码模块124目前要预测的像素,其会以邻近且已得到预测值的像素作为参考像素来产生当前像素的预测值。于步骤S510中,区块编码模块124会依据当前像素的参考像素来预测当前像素的数值,以产生当前像素的预测值。在得到当前像素的预测值后,便从步骤S510进入步骤S520,区块编码模块124会将当前像素的实际值减去预测值,以产生当前像素对应的差值。于步骤S540中,区块编码模块124依序将下一个像素作为当前像素,以对下一个像素进行步骤S510及S520操作,直到图像区块中的最后一个像素也预测且计算完差值(步骤S530)。于步骤S550中,依据图像区块中所有像素对应的差值来产生差值矩阵。
在一实施例中,区块编码模块124会将图像区块的首像素设定为初始参考像素,并以此首像素为基准,依序对邻近的像素进行预测,得到图像区块中所有像素的预测值,且依据所有像素的实际值与预测值的差异,产生对应到图像区块的差值矩阵。以图6所示的图像区块为例,在本实施例中仅绘示尺寸为32*4的图像区块中的前8*4像素,首先区块编码模块124将图像区块的首像素A设定为初始参考像素,接着位于同一横行R1的下一个像素B,会将前一个邻近的像素A作为参考像素来预测其数值(例如,箭头602)。同理,依序可完成位于R1中所有像素(例如像素C、D等)的预测。而与像素A位于同一直列C1的下一个像素E,也会将上方邻近的像素A作为参考像素来预测其数值(例如,箭头604),同理,依序可完成位于C1中所有像素(例如像素I、M等)的预测。对于不位于R1或C1的像素F,其会将前一个邻近的像素E、斜上方邻近的像素A及上方邻近的像素B作为参考像素来预测其数值(例如,箭头606、608、610),同理,依序可完成其余像素(例如像素G、H、J、K、L等)的预测值。
回到图4的流程图,产生出差值矩阵后,于步骤S420中,区块编码模块124会依照预设子区块尺寸将差值矩阵分成多个差值子区块。举例来说,若预设子区块尺寸为4*4,则区块编码模块124会将对应到尺寸为32*4的图像区块的差值矩阵,分为8个尺寸为4*4的差值子区块。
于步骤S430中,区块编码模块124依据扫描条件从多个像素扫描模式中选择各个差值子区块对应的设定扫描模式。具体来说,区块编码模块124会对每个尺寸为4*4的差值子区块进行扫描检视,其中扫描模式如图7A~7D所示,依序为Z型扫描(zigzag)、右上扫描(upright)、水平扫描(horizontal)及垂直扫描(vertical)。图7A~7D中0~15的数字分别表示在上述不同的扫描模式中对差值子区块的各个像素进行扫描的顺序。区块编码模块124会以计算所述差值子区块在每一扫描模式中由后到前的像素值为零的像素数量作为扫描条件。换句话说,区块编码模块124通过由15到0的逆顺序在每一扫描模式中计算像素值连续为零的数量,并以具有最多连续个零像素所对应的扫描模式作为此差值子区块的设定扫描模式。值得注意的是,在此种扫描条件下,选择差值子区块后端连续零像素较多的扫描模式,在后续自定义编码的步骤中,可以减少编码的数量。
当在步骤S430中选择各个差值子区块对应的设定扫描模式之后,便进入到区块预测编码流程中的自定义编码及其中的各个步骤。于步骤S440中,区块编码模块124会依据步骤S430中选择的设定扫描模式,对每一个差值子区块设定多种旗标,并依照这些旗标分别对每一个差值子区块进行编码以产生第一区块数据。
步骤S440的详细流程请参照图8。值得注意的是,本说明书中的当前差值子区块用以表示区块编码模块124目前要设定旗标的差值子区块。于本实施例中,区块编码模块124会对每一个差值子区块进行这些旗标的设定,直到所有的差值子区块的旗标都设定完成。在选择好当前差值子区块对应的设定扫描模式后,于步骤S810中,区块编码模块124会判断当前差值子区块的每一个数值是否皆为零。于步骤S820中,在当前差值子区块的每一个数值皆为零时,区块编码模块124会将当前差值子区块的子区块零旗标(cbf)设定为0,而不需对此当前差值子区块进行其它的编码。相反地,于步骤S830中,在当前差值子区块具有非零的数值时,区块编码模块124会将当前差值子区块的cbf设定为1,以进行接下来的编码步骤。
于步骤S840中,区块编码模块124依据当前差值子区块对应的设定扫描模式设定扫描模式旗标(scan_mode)以及非零扫描旗标(last_nonzero_x及last_nonzero_y),而在设定扫描模式中位于非零扫描旗标以后的像素数值皆为零。于步骤S850中,区块编码模块124在设定扫描模式中对位于非零扫描旗标以前的每个像素设定对应的数值旗标(nonzeroflag),其中数值旗标用以表示对应的像素的像素值是否为零。
举例来说,若当前差值子区块对应的设定扫描模式为图7A所示的Z型扫描,而在Z型扫描中,位于数字8的数值是从数字15倒数至0遇到的第一个非零的值,也就是说位于数字9~15的数值皆为零,则区块编码模块124会将非零扫描旗标设定成数字8在当前差值子区块的位置。具体来说,数字8在图7A绘示的二维空间是位于x轴为2且y轴为1的坐标上,因此,可以利用2比特(bits)的二进位码(binary code)分别设定非零扫描旗标,以代表数字8在x轴及y轴上的坐标,例如last_nonzero_x=10及last_nonzero_y=01。设定完对应到数字8所在位置的非零扫描旗标后,依据位于数字8以前的数字0~8的像素数值对数字0~8中的非零数值设定nonzero flag。
于步骤S860中,对于具备nonzero flag的像素设定符号旗标(sign flag),signflag是用来表示像素数值的正负号。于步骤S870中,判断具备符号旗标的像素的数值绝对值是否大于第一值,当像素的数值绝对值大于第一值时,设定第一绝对值旗标(larger_than1flag)。于步骤S880中,判断具备第一绝对值旗标的像素的数值绝对值是否大于第二值,当像素的数值绝对值大于第二值时,设定第二绝对值旗标(larger_than2flag)。于步骤S890中,将具备第二绝对值旗标的像素的数值减去第三值,并依据特定编码对此减去第三值后的数值(minus3)进行编码,以产生第一区块数据,其中上述第三值大于第二值,且第二值大于第一值。
在一实施例中,上述第一值、第二值及第三值可以分别为1、2及3。以前述的实施例来说,区块编码模块124对位于数字0~8的像素中具有nonzero flag的像素,设定符号旗标sign flag。且区块编码模块124对此8个像素中,数值绝对值大于1的像素设定larger_than1flag,并从具有larger_than1flag的像素中,选出数值绝对值大于2的像素设定larger_than2flag。再将具有larger_than2flag的像素的数值减去3,并依据此经减去3后的数值选择合适的编码以产生第一区块数据。上述合适的编码可以用经减去3后的最大数值为依据,以从常用的编码中,选择此最大数值可以使用的最小编码长度所对应的编码,其中,常用的编码包括莱斯码(Rice coding)、格伦布编码(Golomb coding)等。
回到图3的流程图,于步骤S330中,编码单元120中的线编码模块122会对图像区块进行线性预测编码以获得第二区块数据。线编码模块122对图像区块进行线性预测编码的详细步骤绘示于图9~图10中,以下将依序进行说明。
请参照图9,线编码模块122对图像区块进行线性预测编码的流程与区块预测编码的流程相似,也是包括预测、差值计算及自定义编码三个主要步骤。在预测及差值计算时,于步骤S910中,线编码模块122将图像区块分为多个线区块,通过图像区块的初始参考像素来预测线区块中各个像素的数值,以产生像素的预测值。于步骤S920中,线编码模块122依据像素的实际值与预测值的差异,产生对应到线区块的线性差值矩阵。上述步骤S910~S920与步骤S410~S420相同或相似,故其细节请参照前述。
在本实施例中,线编码模块122会将图像区块分为多个线区块,接着以线区块为单位进行预测及差值计算。以图10所示的图像区块为例,在本实施例中仅绘示32*4图像区块的前8*4像素,线编码模块122会将32*4图像区块分为4个尺寸为32*1的线区块,例如图10中位于第一行~第四行的4个线区块L1~L4。线编码模块122会将L1的首像素A设定为初始参考像素,而同样位于L1的下一个像素B,会将前一个邻近的像素A作为参考像素来预测其数值(例如,箭头1002),同理,依序可完成位于L1中所有像素(例如像素C、D等)的预测。
线区块L2~L4可以选择两种方法并以整个线区块为单位进行预测。第一种方法是用前一行线区块的对应像素作为参考像素;第二种方法则是用同一行线区块中已预测的前一个像素作为参考像素。关于选择用哪一种方法进行线区块预测的资讯可以标示在线区块标头中。在此实施例中,L2的线区块标头是选择上述第一种方法,用L1中的对应像素作为参考像素。例如,像素E以像素A为参考像素(例如,箭头1004),像素F以像素B为参考像素(例如,箭头1006),藉以预测L2的每一个像素。而L3的线区块标头则是选择第二种方法,用同样位于L3的前一个像素作为参考像素。例如,像素J以像素I为参考像素(例如,箭头1008)、像素K以像素J为参考像素(例如,箭头1010),藉以预测L3的每一个像素。需注意的是,选用此第二种方法时,首像素I也需设定为初始参考像素,以作为L3的参考像素。
在此说明如何依据像素的实际值与预测值的差异,从而产生对应到线区块的线性差值矩阵并进入到线性预测编码流程中的自定义编码及其中的各个步骤。于步骤S930中,线编码模块122对线性差值矩阵设定旗标,并依照这些旗标分别对每一个线性差值矩阵进行编码以产生第二区块数据。上述步骤S930与步骤S440相同或相似,故其细节请参照前述。
与前述区块编码模块122所执行的步骤不同的是,在本实施例中,线编码模块122在子区块零旗标(cbf)设定完成之后,不会进行扫描模式旗标(scan_mode)以及非零扫描旗标(last_nonzero_x及last_nonzero_y)的设定动作,而是直接进入设定数值旗标(nonzeroflag)、符号旗标(sign flag)的步骤,并依据第一值、第二值和第三值来设定第一绝对值旗标(larger_than1flag)和第二绝对值旗标(larger_than2flag),最后,对减去第三值后的数值(minus3)进行编码,以产生第二区块数据。
回到图3的流程图,在编码单元120中获得第一区块数据及第二数据区块数据,而比较模块126会比较得到的第一区块数据及第二数据区块数据,从其中选出具备较小数据量的数据,作为编码区块对应的已编码区块的数据。编码单元120将此已编码区块数据记录于第二图形缓冲器140中,以便于后续进行运动补偿或显示图像的操作。值得注意的是,在第一区块数据与第二区块数据的数据量皆大于图像区块的原始数据量时,本发明的图像数据处理装置可以不对个图像区块进行处理,而将图像区块的原有数据直接记录于第二图形缓冲器140。
图11A及11B绘示将已编码区块记录于图1及图2中第二图形缓冲器140及240的实施例。先参照图11A,以YCbCr色彩空间举例来说,左边为尺寸32*4的已编码区块1110,将此已编码区块1110对于Y空间、Cb空间和Cr空间的编码依序记录于右图16*16比特组(bytes)的第二图形缓冲器中。在已编码区块中可能具有未编码的保留比特(例如已编码区块1110中的reserved比特)。参照图11B,在多个已编码区块1120、1130记录于第二图形缓冲器时,每一已编码区块中没有使用到的保留比特(例如已编码区块1120中的保留比特1140及已编码区块1130中的保留比特1150),会对第二图形缓冲器的记忆空间造成浪费,因此本发明提出的第二图形缓冲器会将每一已编码区块中的保留比特删除,以提升存储器的储存效能。
综上所述,本发明实施例的图像数据处理装置及其图像数据处理的方法,同时考量到视频引擎的块状存取特性及显示引擎的线状存取特性,可有效地提升视频引擎及显示引擎对存储器中的图像数据进行存取的效率。此外,本发明的图像数据处理的方法同时考量区块预测编码及线性预测编码两种编码方式,并从中选出数据量较小的编码方式,而能有效降低编码的数据量,进而减少对图像进行运动补偿及显示时所需消耗的频宽。
虽然本发明已以实施例揭露如上,然其并非用以限定本发明,任何所属技术领域技术人员,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,故本发明的保护范围当视后附的权利要求所界定者为准。