一种用于vp9解码器运动矢量预测的方法和装置的制造方法_2

文档序号:9353179阅读:来源:国知局
中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置。如图3所示,为一待预测的宏块的结构示意图。本实施方式中,所示宏块为一包含64x64个像素点的宏块,即宏块的大小为64x64。一个大小为64x64的宏块包括有多个子块,如图中包含有4个8x8大小的子块,5个16x16大小的子块,2个16x8的子块,2个8x16的子块以及2个32x32的子块。VP9解码器在进行解码过程时,是基于块对视频信息数据进行解析,视频压缩信息数据存储于码流中,视频压缩信息通过解码过程可以还原成I个或者多个64x64的图像块。每个64x64又是由多个子块组成,其中最小的子块为8x8子块,每个8x8子块对应的用68bit用于存储当前块的运动矢量信息。在本实施方式中,每一 bit数据用一寄存器加以存储,SP8x8子块需要68个寄存器进行存储当前块的属性。
[0044]VP9解码的最基础单元为64x64的宏块,既一幅图像是按照64x64的块进行切分的。下面以某一 64x64为宏块为例,对步骤SlOl作进一步说明。如图4所示,图中X轴和Y轴分别表不子块的坐标位置,每一个小块的大小为8x8个像素点,如坐标为(_3,-3),(-2,-3)的8x8块等。VP9解码器在解码过程中,首先会对某一行或某一列的子块进行解码,当解码到下一行或下一列的子块时,由于需要用到该行或该列子块对应的解码数据,因而需要对这些解码数据进行存储。在本实施方式中,某一行或某一列的解码数据存储到第一存储位置,所示第一存储位置为预先配置的用于存储该行或该列的寄存器。图4中阴影部分面积表示已经解码完成的块,即最上边三行与最左边三列。空白区域则为待解码的64x64宏块,其在解码过程中需要用到阴影部分面积块的解码数据。
[0045]如图5所示,左上角有一大小为32x32的子块(以下称“块I”),块I为已经解码完成的子块,其包括16个8x8大小的子块,16个8x8大小的子块分别对应的坐标为:(_3,-3),(_2,_3),(_1,_3),(0,_3),(_3,_2),(-2,-2),(-1,-2),(0,-2),(-3,-1),(-2,-1),(-1,-1),(0,-1),(-3,0), (-2,0), (-1,0), (0,0) ο 例如对图 5 中左上角的 32x32 大小的子块而言,其第一存储位置可以编号I至16的寄存器。具体地,在本实施方式中,编号I的寄存器用于存储坐标为(_3,-3)的8x8大小的子块的解码数据,即坐标为(-3,-3)的8x8大小的子块对应的第一存储位置为寄存器I ;编号为2的寄存器用于存储坐标为(_2,-3)的8x8大小的子块的解码数据,即坐标为(_2,-3)的8x8大小的子块对应的第一存储位置为寄存器2;以此类推,编号为16的寄存器用于存储坐标为(0,0)的8x8大小的子块的解码数据,即坐标为(0,0)的8x8大小的子块对应的第一存储位置为寄存器16。所述编号为寄存器的标识,用于对不同的寄存器加以区分。
[0046]而后可以进入步骤S102对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则进入步骤S103将下一行或下一列的子块的解码数据存储到第一存储位置。如图5所示,待解码64x64宏块(相当于图4中的空白区域)的左上角有一大小为32x32的子块(以下称“块2”),其包括16个8x8大小的子士夬,16个8x8大小的子块分别对应的坐标为:(0,O),(1,0), (2,0), (3,0), (0,1), (1,1),
(2,1), (3,1), (0,2), (1,2), (2,2), (3,2), (0,3), (1,3), (2,3), (3,3)。当解码到块 2 时,首先会对块2的大小进行判断,例如在本实施方式中,预设子块的大小为32x16个像素点,当判断到块2大小(为32x32)大于预设子块的大小(32x16),则会将块2对应的的解码数据存储到第一存储位置,所述第一存储位置即为块I的解码数据对应的解码数据的存储位置,即寄存器I至16。图5中箭头方向表示块2对应的解码数据的存储位置走向,块I为已经完成解码的子块,而块2是块I下一行或下一列的待解码的子块。由于块I已经完成解码,因而块I的解码数据对应的存储位置(即编号为1-16的寄存器)可以用于存储块2的解码数据,从而提高寄存器的复用性。具体地,块2的解码数据存储于第一存储位置,可以采用如下方式进行存储:块2中坐标为(0,0)的8x8子块的解码数据存储于块I中坐标为(-3,-3)的8x8子块的解码数据对应的存储位置(即寄存器I),并覆盖原有寄存器I中所存储的解码数据;块2中坐标为(1,0)的8x8子块的解码数据存储于寄存器2中,所述寄存器2为块I中坐标为(-2,-3)的8x8子块的解码数据对应的存储位置;块2中坐标为(2,O)的解码数据存储于块I中坐标为(-1,-3)的8x8子块的解码数据对应的存储位置(即寄存器3),并覆盖原有寄存器3中所存储的解码数据;以此类推,直至块2所包含的16个8x8的解码数据全部存储完成。
[0047]当所解码的下一行或一下列的子块大小小于预设子块大小时,则进入步骤S104将下一行或下一列的子块的解码数据存储到第二存储位置中。例如本实施方式中,预设子块的大小为32x16大小的子块,则其在解码小于32x16的子块(如8x8,8x16等)时,不会覆盖原有的子块的解码位置的存储位置(即第一存储位置),而是将其另外加以存储,存储于第二存储位置。以图5为例,块I为32x32的子块,其解码数据存储于寄存器I至16,当块I解码完成后,其在解码下一行或下一列的子块时,如子块的大小为8x8,则不会将该8x8子块的存储数据存储于寄存器I至16中,而是另外开辟寄存器对其加以存储,例如可以将8x8子块的存储数据存储于编号为17的寄存器,从而减少子块与第一存储位置之间的映射关系,减少了算法复杂度,提高了解码的准确性。
[0048]在本实施方式中,所述宏块的大小为64x64,则所述子块大小包括:64x32、32x64、32x32、32xl6、16x32、16xl6、16x8、8xl6、8x8中的一种或多种。所述预设子块的大小为64x32、32x64、32x32中的一种或多种。预设子块的大小可以自定义决定,例如将预设子块大小设置为32x64,则其在解码32x32、32xl6、16x32、16x8、8xl6、8x8的子块时,不会存储于第一存储位置(即原有子块的解码数据对应的存储位置),而是将其存储于第二存储位置。编码人员可以根据不同需要,选择不同的视频在解码时预设子块的大小,从而提高解码效率。
[0049]在本实施方式中,所述“对宏块中某一行或某一列的子块进行解码”包括步骤:按照Z字型的顺序对某一行或某一列的子块进行解码。VP9在视频解码过程是按照Z字型的顺序对子块进行解码的。如图3所示,为本发明一实施例所述的宏块的结构示意图,宏块的大小为64x64,从图中可以看出,所示宏块包括4个32x32的子块,将左上角的32x32的子块定义为第一 32x32子块,将右上角的32x32的子块定义为第二 32x32子块,将左下角的32x32的子块定义为第三32x32子块,将右下角的32x32的子块定义为第四32x32子块,按照Z字型的顺序进行解码是指:在解码该64x64的宏块时,首先解码第一 32x32子块,而后解码第二 32x32子块,而后解码第三32x32子块,最后解码第四32x32子块。
[0050]对于第一 32x32子块而言,从图3中可以看出,第一 32x32子块又包括4个16x16大小的子块,同理,可以将第一 32x32子块中左上角、右上角、左下角、右下角的16x16的子块分别定义为第一 16x16子块、第二 16x16子块、第三16x16子块、第四16x16子块,则在解码第一 32x32子块时,同样是按照Z字型的解码顺序进行,即首先解码第一 16x16子块,而后解码第二 16x16子块,而后解码第三16x16子块,最后解码第四16x16子块。而对于第一16x16子块而言,其又包括4个8x8的子块,在图3中数字标号为I至4,同理,在解码第一16x16子块时,也是按照Z字型的解码顺序进行解码,即先解码图3中标号为I的8x8子块,而后解码图3中标号为2的8x8子块,而后解码标号为3的8x8子块,再解码标号为4的8x8子块。
[0051]简而言之,按照Z字型解码就是对于宏块而言,其解码顺序是按照Z字型进行的,对于宏块所包括的子块而言,如果该子块包括多个更
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1