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

文档序号:9353179阅读:来源:国知局
小的子块,那么在对这些更小的子块进行解码时,解码顺序也是按照Z字型进行的。如图3中的64x64的宏块,其解码顺序为先解码图中标记为I的子块,再解码图中标记为2的子块,再解码标记为3的,以此类推,最后解码标记为15的子块。对宏块中某一行或某一列的子块按照Z字型的顺序进行解码,使得对宏块的解码有迹可循,不仅可以快速高效地完成解码,同时也不易于在解码过程中出现差错。
[0052]在本实施方式中,所述方法还包括步骤:将某一行或某一列的子块与其下一行或下一列的子块交界处对应的解码数据存储于第二存储位置。VP9在解码过程中首先对某一行或者某一列中的子块进行解码,当在解码下一行或下一列的子块时,需要用到该行或该列子块的解码数据。当下一行或下一列的子块大小大于预设子块大小时,就会将下一行或下一列的子块的解码数据存至第一存储位置,即原先解码的某一行或某一列子块的存储位置,并覆盖原有的解码数据。这就容易导致问题,在子块之间交界处的更小的子块的解码数据,由于其需要同时被两个子块用到,因而如果直接采用覆盖的方式,往往会出现失帧现象。例如图5中,块I中的坐标为(3,3)的8x8的子块为交界处的子块,因而需要对坐标为(3, 3) 8x8的子块对应的解码数据单独进行存储,即将其存储至第二存储位置。再比如图6中,再替换第二个32x32子块(块3)时,其交界处的解码数据为坐标为(4,3),(5,3), (6,3),(7, 3)的8x8子块对应的解码数据,因而需要对这4个8x8子块对应的解码数据进行单独存储,直接覆盖后出现失帧。具体地,在替换第二个32x32子块时,所有8x8子块的解码数据存储位置关系如下:
[0053](4,0)->(1,-3),(5,O)->(2,-3),(6,O)-> (3,_3),(7,O)-> (4,-3)
[0054](4,1)->(1,-2),(5,I)->(2,-2),(6,I)-> (3,_2),(7,I)-> (4,-2)
[0055](4,2)->(1,-1),(5,2)->(2,-1),(6,2)-> (3,—I),(7,2)-> (4,-1)
[0056](4,3) -> (El),(5,3) -> (E2),(6,3) -> (E3),(7,3) -> (E4)
[0057]其中,E1、E2、E3、E4表示寄存器。箭头坐标左边表示第二个32x32子块所包含的8x8子块对应的左边,箭头右边表示该坐标子块对应的存储位置,例如(4,0)->(1,-3),表示将左边为(4,0)的8x8子块的解码数据存储到坐标为(1,-3)的8x8子块的解码数据对应的存储位置,并覆盖原有的坐标为(1,_3)的8x8子块的解码数据。再比如(4,3)->(Ε1),表示坐标为(4,3)的8x8子块的解码数据存储到寄存器El中。
[0058]图7与图8为第三个(块4)及第四个32x32(块5)在进行解码过程中的示意图,解码过程与块2和块3的解码过程类似,此处不再赘述。块2、块3、块4、块5完整构成一64x64的宏块,当对块2至5均解码完成后,对64x64的宏块的解码完成,通过将下一行或下一列的子块的解码数据存储到第一存储位置,从而大大提高了寄存器的复用性,节省了对寄存器的占用,避免了资源的浪费。如图9至图12所示,当子块大小为32x64或64x32时,其替换关系如图中箭头所示。
[0059]上述技术方案所述的用于VP9解码器运动矢量预测的方法,所述方法首先将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置;当对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则将下一行或下一列的子块的解码数据存储到第二存储位置中。通过将下一行或下一列的子块的解码数据存储到第一存储位置,从而大大提高了寄存器的复用性,节省了对寄存器的占用,避免了资源的浪费。此外,所述方法还可以对不同大小的子块作相应的处理,将小于预设子块的待解码的子块的解码数据存储于第二存储位置,从而减少了子块与第一存储位置之间的映射关系,减少了算法复杂度,硬件设计逻辑复杂、硬件面积大、功耗高,因而在数据通信领域具有广阔的市场前景。
[0060]以及发明人还提供了一种用于VP9解码器运动矢量预测的装置,请参阅图2,为本发明一实施例所述的用于VP9解码器运动矢量预测的装置的示意图。所述装置包括如下步骤解码模块101,判断模块102和存储模块103,所述存储模块包括第一存储模块113和第二存储模块123 ;
[0061]所述解码模块101用于将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码;所述第一存储模块113用于将该行或该列的解码数据存储到第一存储位置;
[0062]所述解码模块101还用于对下一行或下一列的子块进行解码时,所述判断模块102用于判断下一行或一下列的子块大小是否大于预设子块的大小,若是则第一存储模块113用于将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则第二存储模块123用于将下一行或下一列的子块的解码数据存储到第二存储位置中。
[0063]VP9解码器运动矢量预测的装置在对视频数据进行解码时,首先解码模块101将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置。如图3所示,为一待预测的宏块的结构示意图。本实施方式中,所不宏块为一包含64x64个像素点的宏块,即宏块的大小为64x64。一个大小为64x64的宏块包括有多个子块,如图中包含有4个8x8大小的子块,5个16x16大小的子块,2个16x8的子块,2个8x16的子块以及2个32x32的子块。VP9解码器在进行解码过程时,是基于块对视频信息数据进行解析,视频压缩信息数据存储于码流中,视频压缩信息通过解码过程可以还原成I个或者多个64x64的图像块。每个64x64又是由多个子块组成,其中最小的子块为8x8子块,每个8x8子块对应的用68bit用于存储当前块的运动矢量信息。在本实施方式中,每一 bit数据用一寄存器加以存储,即8x8子块需要68个寄存器进行存储当前块的属性。
[0064]VP9解码的最基础单元为64x64的宏块,既一幅图像是按照64x64的块进行切分的。下面以某一 64x64为宏块为例,对步骤SlOl作进一步说明。如图4所示,图中X轴和Y轴分别表不子块的坐标位置,每一个小块的大小为8x8个像素点,如坐标为(_3,-3),(-2,-3)的8x8块等。VP9解码器在解码过程中,首先会对某一行或某一列的子块进行解码,当解码到下一行或下一列的子块时,由于需要用到该行或该列子块对应的解码数据,因而需要对这些解码数据进行存储。在本实施方式中,某一行或某一列的解码数据存储到第一存储位置,所示第一存储位置为预先配置的用于存储该行或该列的寄存器。图4中阴影部分面积表示已经解码完成的块,即最上边三行与最左边三列。空白区域则为待解码的64x64宏块,其在解码过程中需要用到阴影部分面积块的解码数据。
[0065]如图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。所述编号为寄存器的标识,用于对不同的寄存器加以区分。
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1