CN105072447A - 一种用于vp9解码器运动矢量预测的方法和装置 - Google Patents
一种用于vp9解码器运动矢量预测的方法和装置 Download PDFInfo
- Publication number
- CN105072447A CN105072447A CN201510422275.9A CN201510422275A CN105072447A CN 105072447 A CN105072447 A CN 105072447A CN 201510422275 A CN201510422275 A CN 201510422275A CN 105072447 A CN105072447 A CN 105072447A
- Authority
- CN
- China
- Prior art keywords
- block
- sub
- decoded data
- memory location
- size
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Abstract
本发明公开了一种用于VP9解码器运动矢量预测的方法和装置,所述方法首先将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置;当对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则将下一行或下一列的子块的解码数据存储到第二存储位置中。本发明解决了对VP9解码器运动矢量进行预测过程中寄存器消耗大、浪费资源、映射关系复杂、硬件设计逻辑复杂、硬件面积大、功耗高等问题。
Description
技术领域
本发明涉及数据通信技术领域,尤其涉及一种用于VP9解码器运动矢量预测的方法和装置。
背景技术
随着科技的发展和社会的进步,VP9也随之诞生。VP9是一个由Google开发的开放格式、无使用授权费的视频压缩标准。由于VP9在视频解码领域具有解码速度快的特点,因而VP9解码器得到了广泛应用。
VP9解码器采用了以64x64个像素为一个宏块的编解码架构,即一幅图像以64x64个像素为单位划分成多个宏块,并以宏块为单位对视频的码流数据进行解码。对于每一个64x64个像素的宏块而言,其又可继续往下拆分成64x32、32x64、32x32、32x16、16x32、16x16、16x8、8x16、8x8个像素的子块。其中,子块的最小单位为8x8个像素。也就是说,8x8个像素的子块是区分帧内预测、帧间预测的最小单元。
对于每个8x8子块而言,采用68bit用于记录当前块的属性。其中,2bit用于标记当前块的前向参考帧类型;2bit用于标记当前块的后向参考帧类型;16bit用于标记当前块的前向参考运动矢量的x分量;16bit用于标记当前块的前向参考运动矢量的y分量;16bit用于标记当前块的后向参考运动矢量的x分量;16bit用于标记当前块的后向参考运动矢量的y分量。当子块为帧内预测块时,则说明该子块覆盖的所有8x8块都无运动矢量,即上述分量都为0。若子块为帧间预测块,则该块覆盖的所有8x8块都含有相同的运动矢量属性,既上述变量值都一样。
VP9解码器在解码过程中,是基于块进行解码的。在对下一个子块的运算矢量进行侦测时,需要应用到当前子块的运动矢量信息。这就导致需要对每一子块的运动矢量进行存储,这将消耗庞大的寄存器占用。而如果采用下一个子块的运动矢量信息的存储位置与当前子块的运动矢量信息的存储位置直接替换覆盖的方式,则会导致下一子块与当前子块之间映射关系复杂,导致硬件设计逻辑复杂,面积大,功耗高。
综上所述,如何解决VP9解码器在解码过程中,对运动矢量进行预测过程中寄存器消耗大、浪费资源、映射关系复杂等问题,是数据通信技术领域一个亟需解决的问题。
发明内容
为此,需要提供一种基于用于VP9解码器运动矢量预测的技术方案,用以解决对VP9解码器运动矢量进行预测过程中寄存器消耗大、浪费资源、映射关系复杂、硬件设计逻辑复杂、硬件面积大、功耗高等问题。
为实现上述目的,发明人提供了一种用于VP9解码器运动矢量预测的方法,所述方法包括如下步骤:
将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置;
对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则将下一行或下一列的子块的解码数据存储到第二存储位置中。
进一步地,所述宏块的大小为64x64,则所述子块大小包括:64x32、32x64、32x32、32x16、16x32、16x16、16x8、8x16、8x8中的一种或多种。
进一步地,所述预设子块的大小为64x32、32x64、32x32中的一种或多种。
进一步地,所述“对宏块中某一行或某一列的子块进行解码”包括步骤:
按照Z字型的顺序对某一行或某一列的子块进行解码。
进一步地,所述方法还包括步骤:
将某一行或某一列的子块与其下一行或下一列的子块交界处对应的解码数据存储于第二存储位置。
以及发明人还提供了一种用于VP9解码器运动矢量预测的装置,所述装置包括如下步骤解码模块,判断模块和存储模块,所述存储模块包括第一存储模块和第二存储模块;
所述解码模块用于将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码;所述第一存储模块用于将该行或该列的解码数据存储到第一存储位置;
所述解码模块还用于对下一行或下一列的子块进行解码时,所述判断模块用于判断下一行或一下列的子块大小是否大于预设子块的大小,若是则第一存储模块用于将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则第二存储模块用于将下一行或下一列的子块的解码数据存储到第二存储位置中。
进一步地,所述宏块的大小为64x64,则所述子块大小包括:64x32、32x64、32x32、32x16、16x32、16x16、16x8、8x16、8x8中的一种或多种。
进一步地,所述预设子块的大小为64x32、32x64、32x32中的一种或多种。
进一步地,所述解码模块“对宏块中某一行或某一列的子块进行解码”是按照Z字型的顺序对某一行或某一列的子块进行解码。
进一步地,所述第二存储模块还用于将某一行或某一列的子块与其下一行或下一列的子块交界处对应的解码数据存储于第二存储位置。
区别于现有技术,上述技术方案所述的用于VP9解码器运动矢量预测的方法和装置,所述方法首先将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置;当对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则将下一行或下一列的子块的解码数据存储到第二存储位置中。通过将下一行或下一列的子块的解码数据存储到第一存储位置,从而大大提高了寄存器的复用性,节省了对寄存器的占用,避免了资源的浪费。此外,所述方法还可以对不同大小的子块作相应的处理,将小于预设子块的待解码的子块的解码数据存储于第二存储位置,从而减少了子块与第一存储位置之间的映射关系,减少了算法复杂度,减少了硬件设计的逻辑复杂度,减少了硬件的面积,因而在数据通信领域具有广阔的市场前景。
附图说明
图1为本发明一实施例所述的用于VP9解码器运动矢量预测的方法的流程图;
图2为本发明一实施例所述的用于VP9解码器运动矢量预测的装置的示意图;
图3为本发明一实施例所述的宏块的结构示意图;
图4为本发明一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
图5为本发明另一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
图6为本发明另一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
图7为本发明另一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
图8为本发明另一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
图9为本发明另一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
图10为本发明另一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
图11为本发明另一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
图12为本发明另一实施例所述的用于VP9解码器运动矢量预测的方法的示意图;
附图标记说明:
101、解码模块;
102、判断模块;
103、存储模块;113、第一存储位置;114、第二存储位置。
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
请参阅图1,为本发明一实施例所述的用于VP9解码器运动矢量预测的方法的流程图。所述方法可以用于VP9解码器运动矢量预测,可以有效地提高VP9解码器在进行运动矢量预测时所需的寄存器的复用性,提高资源利用率,并减少子块的映射关系,减少算法复杂度,具体包括如下步骤:
首先进入步骤S101将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置。如图3所示,为一待预测的宏块的结构示意图。本实施方式中,所示宏块为一包含64x64个像素点的宏块,即宏块的大小为64x64。一个大小为64x64的宏块包括有多个子块,如图中包含有4个8x8大小的子块,5个16x16大小的子块,2个16x8的子块,2个8x16的子块以及2个32x32的子块。VP9解码器在进行解码过程时,是基于块对视频信息数据进行解析,视频压缩信息数据存储于码流中,视频压缩信息通过解码过程可以还原成1个或者多个64x64的图像块。每个64x64又是由多个子块组成,其中最小的子块为8x8子块,每个8x8子块对应的用68bit用于存储当前块的运动矢量信息。在本实施方式中,每一bit数据用一寄存器加以存储,即8x8子块需要68个寄存器进行存储当前块的属性。
VP9解码的最基础单元为64x64的宏块,既一幅图像是按照64x64的块进行切分的。下面以某一64x64为宏块为例,对步骤S101作进一步说明。如图4所示,图中X轴和Y轴分别表示子块的坐标位置,每一个小块的大小为8x8个像素点,如坐标为(-3,-3),(-2,-3)的8x8块等。VP9解码器在解码过程中,首先会对某一行或某一列的子块进行解码,当解码到下一行或下一列的子块时,由于需要用到该行或该列子块对应的解码数据,因而需要对这些解码数据进行存储。在本实施方式中,某一行或某一列的解码数据存储到第一存储位置,所示第一存储位置为预先配置的用于存储该行或该列的寄存器。图4中阴影部分面积表示已经解码完成的块,即最上边三行与最左边三列。空白区域则为待解码的64x64宏块,其在解码过程中需要用到阴影部分面积块的解码数据。
如图5所示,左上角有一大小为32x32的子块(以下称“块1”),块1为已经解码完成的子块,其包括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大小的子块而言,其第一存储位置可以编号1至16的寄存器。具体地,在本实施方式中,编号1的寄存器用于存储坐标为(-3,-3)的8x8大小的子块的解码数据,即坐标为(-3,-3)的8x8大小的子块对应的第一存储位置为寄存器1;编号为2的寄存器用于存储坐标为(-2,-3)的8x8大小的子块的解码数据,即坐标为(-2,-3)的8x8大小的子块对应的第一存储位置为寄存器2;以此类推,编号为16的寄存器用于存储坐标为(0,0)的8x8大小的子块的解码数据,即坐标为(0,0)的8x8大小的子块对应的第一存储位置为寄存器16。所述编号为寄存器的标识,用于对不同的寄存器加以区分。
而后可以进入步骤S102对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则进入步骤S103将下一行或下一列的子块的解码数据存储到第一存储位置。如图5所示,待解码64x64宏块(相当于图4中的空白区域)的左上角有一大小为32x32的子块(以下称“块2”),其包括16个8x8大小的子块,16个8x8大小的子块分别对应的坐标为:(0,0),(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对应的的解码数据存储到第一存储位置,所述第一存储位置即为块1的解码数据对应的解码数据的存储位置,即寄存器1至16。图5中箭头方向表示块2对应的解码数据的存储位置走向,块1为已经完成解码的子块,而块2是块1下一行或下一列的待解码的子块。由于块1已经完成解码,因而块1的解码数据对应的存储位置(即编号为1-16的寄存器)可以用于存储块2的解码数据,从而提高寄存器的复用性。具体地,块2的解码数据存储于第一存储位置,可以采用如下方式进行存储:块2中坐标为(0,0)的8x8子块的解码数据存储于块1中坐标为(-3,-3)的8x8子块的解码数据对应的存储位置(即寄存器1),并覆盖原有寄存器1中所存储的解码数据;块2中坐标为(1,0)的8x8子块的解码数据存储于寄存器2中,所述寄存器2为块1中坐标为(-2,-3)的8x8子块的解码数据对应的存储位置;块2中坐标为(2,0)的解码数据存储于块1中坐标为(-1,-3)的8x8子块的解码数据对应的存储位置(即寄存器3),并覆盖原有寄存器3中所存储的解码数据;以此类推,直至块2所包含的16个8x8的解码数据全部存储完成。
当所解码的下一行或一下列的子块大小小于预设子块大小时,则进入步骤S104将下一行或下一列的子块的解码数据存储到第二存储位置中。例如本实施方式中,预设子块的大小为32x16大小的子块,则其在解码小于32x16的子块(如8x8,8x16等)时,不会覆盖原有的子块的解码位置的存储位置(即第一存储位置),而是将其另外加以存储,存储于第二存储位置。以图5为例,块1为32x32的子块,其解码数据存储于寄存器1至16,当块1解码完成后,其在解码下一行或下一列的子块时,如子块的大小为8x8,则不会将该8x8子块的存储数据存储于寄存器1至16中,而是另外开辟寄存器对其加以存储,例如可以将8x8子块的存储数据存储于编号为17的寄存器,从而减少子块与第一存储位置之间的映射关系,减少了算法复杂度,提高了解码的准确性。
在本实施方式中,所述宏块的大小为64x64,则所述子块大小包括:64x32、32x64、32x32、32x16、16x32、16x16、16x8、8x16、8x8中的一种或多种。所述预设子块的大小为64x32、32x64、32x32中的一种或多种。预设子块的大小可以自定义决定,例如将预设子块大小设置为32x64,则其在解码32x32、32x16、16x32、16x8、8x16、8x8的子块时,不会存储于第一存储位置(即原有子块的解码数据对应的存储位置),而是将其存储于第二存储位置。编码人员可以根据不同需要,选择不同的视频在解码时预设子块的大小,从而提高解码效率。
在本实施方式中,所述“对宏块中某一行或某一列的子块进行解码”包括步骤:按照Z字型的顺序对某一行或某一列的子块进行解码。VP9在视频解码过程是按照Z字型的顺序对子块进行解码的。如图3所示,为本发明一实施例所述的宏块的结构示意图,宏块的大小为64x64,从图中可以看出,所示宏块包括4个32x32的子块,将左上角的32x32的子块定义为第一32x32子块,将右上角的32x32的子块定义为第二32x32子块,将左下角的32x32的子块定义为第三32x32子块,将右下角的32x32的子块定义为第四32x32子块,按照Z字型的顺序进行解码是指:在解码该64x64的宏块时,首先解码第一32x32子块,而后解码第二32x32子块,而后解码第三32x32子块,最后解码第四32x32子块。
对于第一32x32子块而言,从图3中可以看出,第一32x32子块又包括4个16x16大小的子块,同理,可以将第一32x32子块中左上角、右上角、左下角、右下角的16x16的子块分别定义为第一16x16子块、第二16x16子块、第三16x16子块、第四16x16子块,则在解码第一32x32子块时,同样是按照Z字型的解码顺序进行,即首先解码第一16x16子块,而后解码第二16x16子块,而后解码第三16x16子块,最后解码第四16x16子块。而对于第一16x16子块而言,其又包括4个8x8的子块,在图3中数字标号为1至4,同理,在解码第一16x16子块时,也是按照Z字型的解码顺序进行解码,即先解码图3中标号为1的8x8子块,而后解码图3中标号为2的8x8子块,而后解码标号为3的8x8子块,再解码标号为4的8x8子块。
简而言之,按照Z字型解码就是对于宏块而言,其解码顺序是按照Z字型进行的,对于宏块所包括的子块而言,如果该子块包括多个更小的子块,那么在对这些更小的子块进行解码时,解码顺序也是按照Z字型进行的。如图3中的64x64的宏块,其解码顺序为先解码图中标记为1的子块,再解码图中标记为2的子块,再解码标记为3的,以此类推,最后解码标记为15的子块。对宏块中某一行或某一列的子块按照Z字型的顺序进行解码,使得对宏块的解码有迹可循,不仅可以快速高效地完成解码,同时也不易于在解码过程中出现差错。
在本实施方式中,所述方法还包括步骤:将某一行或某一列的子块与其下一行或下一列的子块交界处对应的解码数据存储于第二存储位置。VP9在解码过程中首先对某一行或者某一列中的子块进行解码,当在解码下一行或下一列的子块时,需要用到该行或该列子块的解码数据。当下一行或下一列的子块大小大于预设子块大小时,就会将下一行或下一列的子块的解码数据存至第一存储位置,即原先解码的某一行或某一列子块的存储位置,并覆盖原有的解码数据。这就容易导致问题,在子块之间交界处的更小的子块的解码数据,由于其需要同时被两个子块用到,因而如果直接采用覆盖的方式,往往会出现失帧现象。例如图5中,块1中的坐标为(3,3)的8x8的子块为交界处的子块,因而需要对坐标为(3,3)8x8的子块对应的解码数据单独进行存储,即将其存储至第二存储位置。再比如图6中,再替换第二个32x32子块(块3)时,其交界处的解码数据为坐标为(4,3),(5,3),(6,3),(7,3)的8x8子块对应的解码数据,因而需要对这4个8x8子块对应的解码数据进行单独存储,直接覆盖后出现失帧。具体地,在替换第二个32x32子块时,所有8x8子块的解码数据存储位置关系如下:
(4,0)->(1,-3),(5,0)->(2,-3),(6,0)->(3,-3),(7,0)->(4,-3)
(4,1)->(1,-2),(5,1)->(2,-2),(6,1)->(3,-2),(7,1)->(4,-2)
(4,2)->(1,-1),(5,2)->(2,-1),(6,2)->(3,-1),(7,2)->(4,-1)
(4,3)->(E1),(5,3)->(E2),(6,3)->(E3),(7,3)->(E4)
其中,E1、E2、E3、E4表示寄存器。箭头坐标左边表示第二个32x32子块所包含的8x8子块对应的左边,箭头右边表示该坐标子块对应的存储位置,例如(4,0)->(1,-3),表示将左边为(4,0)的8x8子块的解码数据存储到坐标为(1,-3)的8x8子块的解码数据对应的存储位置,并覆盖原有的坐标为(1,-3)的8x8子块的解码数据。再比如(4,3)->(E1),表示坐标为(4,3)的8x8子块的解码数据存储到寄存器E1中。
图7与图8为第三个(块4)及第四个32x32(块5)在进行解码过程中的示意图,解码过程与块2和块3的解码过程类似,此处不再赘述。块2、块3、块4、块5完整构成一64x64的宏块,当对块2至5均解码完成后,对64x64的宏块的解码完成,通过将下一行或下一列的子块的解码数据存储到第一存储位置,从而大大提高了寄存器的复用性,节省了对寄存器的占用,避免了资源的浪费。如图9至图12所示,当子块大小为32x64或64x32时,其替换关系如图中箭头所示。
上述技术方案所述的用于VP9解码器运动矢量预测的方法,所述方法首先将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置;当对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则将下一行或下一列的子块的解码数据存储到第二存储位置中。通过将下一行或下一列的子块的解码数据存储到第一存储位置,从而大大提高了寄存器的复用性,节省了对寄存器的占用,避免了资源的浪费。此外,所述方法还可以对不同大小的子块作相应的处理,将小于预设子块的待解码的子块的解码数据存储于第二存储位置,从而减少了子块与第一存储位置之间的映射关系,减少了算法复杂度,硬件设计逻辑复杂、硬件面积大、功耗高,因而在数据通信领域具有广阔的市场前景。
以及发明人还提供了一种用于VP9解码器运动矢量预测的装置,请参阅图2,为本发明一实施例所述的用于VP9解码器运动矢量预测的装置的示意图。所述装置包括如下步骤解码模块101,判断模块102和存储模块103,所述存储模块包括第一存储模块113和第二存储模块123;
所述解码模块101用于将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码;所述第一存储模块113用于将该行或该列的解码数据存储到第一存储位置;
所述解码模块101还用于对下一行或下一列的子块进行解码时,所述判断模块102用于判断下一行或一下列的子块大小是否大于预设子块的大小,若是则第一存储模块113用于将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则第二存储模块123用于将下一行或下一列的子块的解码数据存储到第二存储位置中。
VP9解码器运动矢量预测的装置在对视频数据进行解码时,首先解码模块101将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置。如图3所示,为一待预测的宏块的结构示意图。本实施方式中,所示宏块为一包含64x64个像素点的宏块,即宏块的大小为64x64。一个大小为64x64的宏块包括有多个子块,如图中包含有4个8x8大小的子块,5个16x16大小的子块,2个16x8的子块,2个8x16的子块以及2个32x32的子块。VP9解码器在进行解码过程时,是基于块对视频信息数据进行解析,视频压缩信息数据存储于码流中,视频压缩信息通过解码过程可以还原成1个或者多个64x64的图像块。每个64x64又是由多个子块组成,其中最小的子块为8x8子块,每个8x8子块对应的用68bit用于存储当前块的运动矢量信息。在本实施方式中,每一bit数据用一寄存器加以存储,即8x8子块需要68个寄存器进行存储当前块的属性。
VP9解码的最基础单元为64x64的宏块,既一幅图像是按照64x64的块进行切分的。下面以某一64x64为宏块为例,对步骤S101作进一步说明。如图4所示,图中X轴和Y轴分别表示子块的坐标位置,每一个小块的大小为8x8个像素点,如坐标为(-3,-3),(-2,-3)的8x8块等。VP9解码器在解码过程中,首先会对某一行或某一列的子块进行解码,当解码到下一行或下一列的子块时,由于需要用到该行或该列子块对应的解码数据,因而需要对这些解码数据进行存储。在本实施方式中,某一行或某一列的解码数据存储到第一存储位置,所示第一存储位置为预先配置的用于存储该行或该列的寄存器。图4中阴影部分面积表示已经解码完成的块,即最上边三行与最左边三列。空白区域则为待解码的64x64宏块,其在解码过程中需要用到阴影部分面积块的解码数据。
如图5所示,左上角有一大小为32x32的子块(以下称“块1”),块1为已经解码完成的子块,其包括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大小的子块而言,其第一存储位置可以编号1至16的寄存器。具体地,在本实施方式中,编号1的寄存器用于存储坐标为(-3,-3)的8x8大小的子块的解码数据,即坐标为(-3,-3)的8x8大小的子块对应的第一存储位置为寄存器1;编号为2的寄存器用于存储坐标为(-2,-3)的8x8大小的子块的解码数据,即坐标为(-2,-3)的8x8大小的子块对应的第一存储位置为寄存器2;以此类推,编号为16的寄存器用于存储坐标为(0,0)的8x8大小的子块的解码数据,即坐标为(0,0)的8x8大小的子块对应的第一存储位置为寄存器16。所述编号为寄存器的标识,用于对不同的寄存器加以区分。
而后解码模块101对下一行或下一列的子块进行解码时,判断模块102判断下一行或一下列的子块大小是否大于预设子块的大小,若是则第一存储模块113将下一行或下一列的子块的解码数据存储到第一存储位置。如图5所示,待解码64x64宏块(相当于图4中的空白区域)的左上角有一大小为32x32的子块(以下称“块2”),其包括16个8x8大小的子块,16个8x8大小的子块分别对应的坐标为:(0,0),(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对应的的解码数据存储到第一存储位置,所述第一存储位置即为块1的解码数据对应的解码数据的存储位置,即寄存器1至16。图5中箭头方向表示块2对应的解码数据的存储位置走向,块1为已经完成解码的子块,而块2是块1下一行或下一列的待解码的子块。由于块1已经完成解码,因而块1的解码数据对应的存储位置(即编号为1-16的寄存器)可以用于存储块2的解码数据,从而提高寄存器的复用性。具体地,块2的解码数据存储于第一存储位置,可以采用如下方式进行存储:块2中坐标为(0,0)的8x8子块的解码数据存储于块1中坐标为(-3,-3)的8x8子块的解码数据对应的存储位置(即寄存器1),并覆盖原有寄存器1中所存储的解码数据;块2中坐标为(1,0)的8x8子块的解码数据存储于寄存器2中,所述寄存器2为块1中坐标为(-2,-3)的8x8子块的解码数据对应的存储位置;块2中坐标为(2,0)的解码数据存储于块1中坐标为(-1,-3)的8x8子块的解码数据对应的存储位置(即寄存器3),并覆盖原有寄存器3中所存储的解码数据;以此类推,直至块2所包含的16个8x8的解码数据全部存储完成。
当所解码的下一行或一下列的子块大小小于预设子块大小时,则第二存储模块将下一行或下一列的子块的解码数据存储到第二存储位置中。例如本实施方式中,预设子块的大小为32x16大小的子块,则其在解码小于32x16的子块(如8x8,8x16等)时,不会覆盖原有的子块的解码位置的存储位置(即第一存储位置),而是将其另外加以存储,存储于第二存储位置。以图5为例,块1为32x32的子块,其解码数据存储于寄存器1至16,当块1解码完成后,其在解码下一行或下一列的子块时,如子块的大小为8x8,则不会将该8x8子块的存储数据存储于寄存器1至16中,而是另外开辟寄存器对其加以存储,例如可以将8x8子块的存储数据存储于编号为17的寄存器,从而减少子块与第一存储位置之间的映射关系,减少了算法复杂度,提高了解码的准确性。
在本实施方式中,所述宏块的大小为64x64,则所述子块大小包括:64x32、32x64、32x32、32x16、16x32、16x16、16x8、8x16、8x8中的一种或多种。所述预设子块的大小为64x32、32x64、32x32中的一种或多种。预设子块的大小可以自定义决定,例如将预设子块大小设置为32x64,则其在解码32x32、32x16、16x32、16x8、8x16、8x8的子块时,不会存储于第一存储位置(即原有子块的解码数据对应的存储位置),而是将其存储于第二存储位置。编码人员可以根据不同需要,选择不同的视频在解码时预设子块的大小,从而提高解码效率。
在本实施方式中,所述“对宏块中某一行或某一列的子块进行解码”包括步骤:按照Z字型的顺序对某一行或某一列的子块进行解码。VP9在视频解码过程是按照Z字型的顺序对子块进行解码的。如图3所示,为本发明一实施例所述的宏块的结构示意图,宏块的大小为64x64,从图中可以看出,所示宏块包括4个32x32的子块,将左上角的32x32的子块定义为第一32x32子块,将右上角的32x32的子块定义为第二32x32子块,将左下角的32x32的子块定义为第三32x32子块,将右下角的32x32的子块定义为第四32x32子块,按照Z字型的顺序进行解码是指:在解码该64x64的宏块时,首先解码第一32x32子块,而后解码第二32x32子块,而后解码第三32x32子块,最后解码第四32x32子块。
对于第一32x32子块而言,从图3中可以看出,第一32x32子块又包括4个16x16大小的子块,同理,可以将第一32x32子块中左上角、右上角、左下角、右下角的16x16的子块分别定义为第一16x16子块、第二16x16子块、第三16x16子块、第四16x16子块,则在解码第一32x32子块时,同样是按照Z字型的解码顺序进行,即首先解码第一16x16子块,而后解码第二16x16子块,而后解码第三16x16子块,最后解码第四16x16子块。而对于第一16x16子块而言,其又包括4个8x8的子块,在图3中数字标号为1至4,同理,在解码第一16x16子块时,也是按照Z字型的解码顺序进行解码,即先解码图3中标号为1的8x8子块,而后解码图3中标号为2的8x8子块,而后解码标号为3的8x8子块,再解码标号为4的8x8子块。
简而言之,按照Z字型解码就是对于宏块而言,其解码顺序是按照Z字型进行的,对于宏块所包括的子块而言,如果该子块包括多个更小的子块,那么在对这些更小的子块进行解码时,解码顺序也是按照Z字型进行的。如图3中的64x64的宏块,其解码顺序为先解码图中标记为1的子块,再解码图中标记为2的子块,再解码标记为3的,以此类推,最后解码标记为15的子块。对宏块中某一行或某一列的子块按照Z字型的顺序进行解码,使得对宏块的解码有迹可循,不仅可以快速高效地完成解码,同时也不易于在解码过程中出现差错。
在本实施方式中,所述方法还包括步骤:将某一行或某一列的子块与其下一行或下一列的子块交界处对应的解码数据存储于第二存储位置。VP9在解码过程中首先对某一行或者某一列中的子块进行解码,当在解码下一行或下一列的子块时,需要用到该行或该列子块的解码数据。当下一行或下一列的子块大小大于预设子块大小时,就会将下一行或下一列的子块的解码数据存至第一存储位置,即原先解码的某一行或某一列子块的存储位置,并覆盖原有的解码数据。这就容易导致问题,在子块之间交界处的更小的子块的解码数据,由于其需要同时被两个子块用到,因而如果直接采用覆盖的方式,往往会出现失帧现象。例如图5中,块1中的坐标为(3,3)的8x8的子块为交界处的子块,因而需要对坐标为(3,3)8x8的子块对应的解码数据单独进行存储,即将其存储至第二存储位置。再比如图6中,再替换第二个32x32子块(块3)时,其交界处的解码数据为坐标为(4,3),(5,3),(6,3),(7,3)的8x8子块对应的解码数据,因而需要对这4个8x8子块对应的解码数据进行单独存储,直接覆盖后出现失帧。具体地,在替换第二个32x32子块时,所有8x8子块的解码数据存储位置关系如下:
(4,0)->(1,-3),(5,0)->(2,-3),(6,0)->(3,-3),(7,0)->(4,-3)
(4,1)->(1,-2),(5,1)->(2,-2),(6,1)->(3,-2),(7,1)->(4,-2)
(4,2)->(1,-1),(5,2)->(2,-1),(6,2)->(3,-1),(7,2)->(4,-1)
(4,3)->(E1),(5,3)->(E2),(6,3)->(E3),(7,3)->(E4)
其中,E1、E2、E3、E4表示寄存器。箭头坐标左边表示第二个32x32子块所包含的8x8子块对应的左边,箭头右边表示该坐标子块对应的存储位置,例如(4,0)->(1,-3),表示将左边为(4,0)的8x8子块的解码数据存储到坐标为(1,-3)的8x8子块的解码数据对应的存储位置,并覆盖原有的坐标为(1,-3)的8x8子块的解码数据。再比如(4,3)->(E1),表示坐标为(4,3)的8x8子块的解码数据存储到寄存器E1中。
图7与图8为第三个(块4)及第四个32x32(块5)在进行解码过程中的示意图,解码过程与块2和块3的解码过程类似,此处不再赘述。块2、块3、块4、块5完整构成一64x64的宏块,当对块2至5均解码完成后,对64x64的宏块的解码完成,通过将下一行或下一列的子块的解码数据存储到第一存储位置,从而大大提高了寄存器的复用性,节省了对寄存器的占用,避免了资源的浪费。如图9至图12所示,当子块大小为32x64或64x32时,其替换关系如图中箭头所示。
上述技术方案所述的用于VP9解码器运动矢量预测的方法,所述方法首先将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置;当对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则将下一行或下一列的子块的解码数据存储到第二存储位置中。通过将下一行或下一列的子块的解码数据存储到第一存储位置,从而大大提高了寄存器的复用性,节省了对寄存器的占用,避免了资源的浪费。此外,所述方法还可以对不同大小的子块作相应的处理,将小于预设子块的待解码的子块的解码数据存储于第二存储位置,从而减少了子块与第一存储位置之间的映射关系,减少了算法复杂度,硬件设计逻辑复杂、硬件面积大、功耗高,因而在数据通信领域具有广阔的市场前景。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括……”或“包含……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的要素。此外,在本文中,“大于”、“小于”、“超过”等理解为不包括本数;“以上”、“以下”、“以内”等理解为包括本数。
本领域内的技术人员应明白,上述各实施例可提供为方法、装置、或计算机程序产品。这些实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。上述各实施例涉及的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机设备可读取的存储介质中,用于执行上述各实施例方法所述的全部或部分步骤。所述计算机设备,包括但不限于:个人计算机、服务器、通用计算机、专用计算机、网络设备、嵌入式设备、可编程设备、智能移动终端、智能家居设备、穿戴式智能设备、车载智能设备等;所述的存储介质,包括但不限于:RAM、ROM、磁碟、磁带、光盘、闪存、U盘、移动硬盘、存储卡、记忆棒、网络服务器存储、网络云存储等。
上述各实施例是参照根据实施例所述的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到计算机设备的处理器以产生一个机器,使得通过计算机设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机设备以特定方式工作的计算机设备可读存储器中,使得存储在该计算机设备可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机设备上,使得在计算机设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已经对上述各实施例进行了描述,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改,所以以上所述仅为本发明的实施例,并非因此限制本发明的专利保护范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围之内。
Claims (10)
1.一种用于VP9解码器运动矢量预测的方法,其特征在于,所述方法包括如下步骤:
将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码,并将该行或该列的解码数据存储到第一存储位置;
对下一行或下一列的子块进行解码时,判断下一行或一下列的子块大小是否大于预设子块的大小,若是则将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则将下一行或下一列的子块的解码数据存储到第二存储位置中。
2.根据权利要求1所述的用于VP9解码器运动矢量预测的方法,其特征在于,所述宏块的大小为64x64,则所述子块大小包括:64x32、32x64、32x32、32x16、16x32、16x16、16x8、8x16、8x8中的一种或多种。
3.根据权利要求1或2所述的用于VP9解码器运动矢量预测的方法,其特征在于,所述预设子块的大小为64x32、32x64、32x32中的一种或多种。
4.根据权利要求1所述的用于VP9解码器运动矢量预测的方法,其特征在于,所述“对宏块中某一行或某一列的子块进行解码”包括步骤:
按照Z字型的顺序对某一行或某一列的子块进行解码。
5.根据权利要求1所述的用于VP9解码器运动矢量预测的方法,其特征在于,所述方法还包括步骤:
将某一行或某一列的子块与其下一行或下一列的子块交界处对应的解码数据存储于第二存储位置。
6.一种用于VP9解码器运动矢量预测的装置,其特征在于,所述装置包括如下步骤解码模块,判断模块和存储模块,所述存储模块包括第一存储模块和第二存储模块;
所述解码模块用于将待预测的宏块划分为多个子块,对宏块中某一行或某一列的子块进行解码;所述第一存储模块用于将该行或该列的解码数据存储到第一存储位置;
所述解码模块还用于对下一行或下一列的子块进行解码时,所述判断模块用于判断下一行或一下列的子块大小是否大于预设子块的大小,若是则第一存储模块用于将下一行或下一列的子块的解码数据存储到第一存储位置;若不是则第二存储模块用于将下一行或下一列的子块的解码数据存储到第二存储位置中。
7.根据权利要求6所述的用于VP9解码器运动矢量预测的装置,其特征在于,所述宏块的大小为64x64,则所述子块大小包括:64x32、32x64、32x32、32x16、16x32、16x16、16x8、8x16、8x8中的一种或多种。
8.根据权利要求6或7所述的用于VP9解码器运动矢量预测的装置,其特征在于,所述预设子块的大小为64x32、32x64、32x32中的一种或多种。
9.根据权利要求6所述的用于VP9解码器运动矢量预测的装置,其特征在于,所述解码模块“对宏块中某一行或某一列的子块进行解码”是按照Z字型的顺序对某一行或某一列的子块进行解码。
10.根据权利要求6所述的用于VP9解码器运动矢量预测的装置,其特征在于,所述第二存储模块还用于将某一行或某一列的子块与其下一行或下一列的子块交界处对应的解码数据存储于第二存储位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510422275.9A CN105072447B (zh) | 2015-07-17 | 2015-07-17 | 一种用于vp9解码器运动矢量预测的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510422275.9A CN105072447B (zh) | 2015-07-17 | 2015-07-17 | 一种用于vp9解码器运动矢量预测的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105072447A true CN105072447A (zh) | 2015-11-18 |
CN105072447B CN105072447B (zh) | 2018-03-27 |
Family
ID=54501713
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510422275.9A Active CN105072447B (zh) | 2015-07-17 | 2015-07-17 | 一种用于vp9解码器运动矢量预测的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105072447B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106658012A (zh) * | 2017-01-06 | 2017-05-10 | 华南理工大学 | 一种vp9解码器并行流水线任务划分方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1585473A (zh) * | 2003-08-18 | 2005-02-23 | 联发科技股份有限公司 | 存储已解码宏块运动向量的存储器使用方法 |
CN1585485A (zh) * | 2003-08-18 | 2005-02-23 | 联发科技股份有限公司 | 使用存储器存取的预测式图像译码方法 |
US20080095236A1 (en) * | 2006-10-20 | 2008-04-24 | Samsung Electronics Co., Ltd. | Method for accessing memory in apparatus for processing moving pictures |
CN101895767A (zh) * | 2009-05-22 | 2010-11-24 | 上海爱信诺航芯电子科技有限公司 | Avs帧内预测参考像素储存更新方法 |
CN101924938A (zh) * | 2010-08-11 | 2010-12-22 | 上海交通大学 | 视频解码宏块预测与边界滤波中相邻块信息的处理方法 |
-
2015
- 2015-07-17 CN CN201510422275.9A patent/CN105072447B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1585473A (zh) * | 2003-08-18 | 2005-02-23 | 联发科技股份有限公司 | 存储已解码宏块运动向量的存储器使用方法 |
CN1585485A (zh) * | 2003-08-18 | 2005-02-23 | 联发科技股份有限公司 | 使用存储器存取的预测式图像译码方法 |
US20080095236A1 (en) * | 2006-10-20 | 2008-04-24 | Samsung Electronics Co., Ltd. | Method for accessing memory in apparatus for processing moving pictures |
CN101895767A (zh) * | 2009-05-22 | 2010-11-24 | 上海爱信诺航芯电子科技有限公司 | Avs帧内预测参考像素储存更新方法 |
CN101924938A (zh) * | 2010-08-11 | 2010-12-22 | 上海交通大学 | 视频解码宏块预测与边界滤波中相邻块信息的处理方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106658012A (zh) * | 2017-01-06 | 2017-05-10 | 华南理工大学 | 一种vp9解码器并行流水线任务划分方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105072447B (zh) | 2018-03-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11979559B2 (en) | Image prediction method and device | |
US10819995B2 (en) | Method of storing decoded video data, method of computing motion vector data and computer device | |
US9769497B2 (en) | Method and apparatus for processing intra prediction mode | |
CN101330617B (zh) | 基于模式映射的多标准帧内预测器的硬件实现方法及装置 | |
CN104079944A (zh) | 视频编码的运动矢量列表构建方法和系统 | |
CN105681807A (zh) | 一种基于h264协议的分像素运动矢量计算方法和装置 | |
CN105516726A (zh) | 视频编码的运动补偿匹配方法和系统 | |
CN102215395B (zh) | 一种视频编解码方法和装置 | |
CN105163126A (zh) | 一种基于hevc协议的硬件解码方法和装置 | |
CN110324668B (zh) | 图像块编码中的变换方法、解码中的反变换方法及装置 | |
CN105072447A (zh) | 一种用于vp9解码器运动矢量预测的方法和装置 | |
CN111327901B (zh) | 视频编码方法、装置、存储介质及编码设备 | |
JP6412589B2 (ja) | 装置、コンピュータプログラムおよびコンピュータ実装方法 | |
US20220217399A1 (en) | Prediction method for current block and electronic device | |
CN102801973B (zh) | 视频图像去块滤波方法及装置 | |
CN110800301A (zh) | 编码设备的控制方法、装置及存储介质 | |
CN104021579A (zh) | 图片变色方法及装置 | |
WO2020258039A1 (zh) | 运动补偿的处理方法、编码器、解码器以及存储介质 | |
CN105163123B (zh) | 一种hevc帧间预测子块mv信息的存取方法和装置 | |
CN106254886B (zh) | 一种基于hevc的帧内预测解码方法及装置 | |
CN102868889A (zh) | 帧间图像视频编解码的运动矢量预测方法及视频编解码器 | |
CN105100804A (zh) | 一种视频解码的方法及装置 | |
CN102843561B (zh) | 帧间图像预测编解码的参考帧序号编解码方法及编解码器 | |
Zuo et al. | A Cache Hardware design for H. 264 encoder | |
CN106331720A (zh) | 一种视频解码相关信息存储方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 350003 building, No. 89, software Avenue, Gulou District, Fujian, Fuzhou 18, China Patentee after: Ruixin Microelectronics Co., Ltd Address before: 350003 building, No. 89, software Avenue, Gulou District, Fujian, Fuzhou 18, China Patentee before: Fuzhou Rockchips Electronics Co.,Ltd. |