首页> 中国专利> 视频解码宏块预测与边界滤波中相邻块信息的处理方法

视频解码宏块预测与边界滤波中相邻块信息的处理方法

摘要

一种视频解码技术领域的视频解码宏块预测与边界滤波中相邻块信息的处理方法,使用10个寄存器保存相邻块消息,对左上角的4x4分割块进行下标映射处理,并经偏移计算得到左块、上块、右块和左上块的寄存器编号,采用现有技术处理完后,进行更新下标映射处理,直至完成对整个宏块的处理后,对寄存器进行宏块更新处理,得到新的行缓存内容和相邻寄存器信息,从而进行下一个宏块的处理。本发明适用于H.264和AVS解码中的宏块预测与边界滤波强度计算,能有效的减少相邻块寄存器的存储空间,并复用和简化硬件设计,提高视频解码效率。

著录项

  • 公开/公告号CN101924938A

    专利类型发明专利

  • 公开/公告日2010-12-22

    原文格式PDF

  • 申请/专利权人 上海交通大学;

    申请/专利号CN201010250034.8

  • 申请日2010-08-11

  • 分类号H04N7/26(20060101);H04N7/32(20060101);

  • 代理机构31201 上海交达专利事务所;

  • 代理人王锡麟;王桂忠

  • 地址 200240 上海市闵行区东川路800号

  • 入库时间 2023-12-18 01:22:20

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-11-16

    未缴年费专利权终止 IPC(主分类):H04N7/26 授权公告日:20120905 终止日期:20150811 申请日:20100811

    专利权的终止

  • 2012-09-05

    授权

    授权

  • 2011-02-02

    实质审查的生效 IPC(主分类):H04N7/26 申请日:20100811

    实质审查的生效

  • 2010-12-22

    公开

    公开

说明书

技术领域

本发明涉及的是一种视频解码技术领域的信息处理方法,具体是一种视频解码宏块预测与边界滤波中相邻块信息的处理方法。

背景技术

视频压缩中所采用的帧内预测技术用于去除当前图像中的空间冗余度,H.264和AVS采用了比以往编码标准更为精准和复杂的帧内预测方式。在当前图像编码的过程中,当无法提供足够的图像之间的时间相关信息时,往往对当前图像采用帧内预测。由于当前被解码的宏块与相邻的宏块有很强的相似性,因此在H.264和AVS的帧内预测用于计算解码宏块与其相邻的宏块之间的空间相关性,以提高编码效率。

帧间预测是利用已解码的视频帧/场和基于块的运动补偿的预测技术,在进行运动补偿之前需要首先预测出当前块的运动矢量(Motion Vector),每个分割或子宏块都有一个独立的运动补偿,因此对每个分割或者子宏块都需要预测其运动矢量。H.264每个宏块可以划分成16x16,16x8,8x16,8x8。当宏块划分成8x8时,还可以进一步划分成8x4,4x8,4x4,因此每个宏块最多需要预测16个运动矢量,若宏块为双向预测时,最多需要预测32个运动矢量。H.264和AVS的运动适量预测按照预测方式的不同可以分为空域和时域两大类,其中空域包括一般空域,P_Skip和直接空域预测。空域模式是根据图像相邻宏块的相关性,利用相邻块的运动矢量预测当前块的运动矢量。

在H.264和AVS标准中,由于基于块的帧内和帧间预测残差的DCT变换以及运动补偿预测的原因,造成解码器反变换反量化后图像会出现方块效应,即在图像块边界上的视觉不连续性。H.264虽然采用了比AVS更小的块划分,但是仍然需要去除方块效应以得到更好的图像显示效果。在H.264和AVS标准中都采用环路滤波的方法来消除解码中出现的方块效应。在进行环路滤波前,需要给出不同边界处的滤波参数,以控制去块滤波的程度,因此需要计算边界滤波强度(Boundary strength,Bs)。H.264和AVS标准都规定了不同情况下边界滤波强度的计算方法,两者都是根据左相邻块A和上相邻块B与当前块的宏块类型、运动矢量、参考索引等信息计算当前块的边界滤波强度值。

帧内模式预测、帧间预测运动矢量预测与边界滤波强度计算都需要利用相邻划分块的信息预测当前块的信息,其相邻块的选择机制完全相似,因此可以考虑抽取其中共同点,设计相邻块信息的更新方法,并设计可复用的硬件结构。

经对现有文献检索发现,中国专利公开号为:CN1801941A,名称为:多模标准解码器中运动矢量预测复用设计方法,公开日期为:2006-07-12,该技术提出了一种兼容H.264和AVS标准的运动矢量预测复用设计的方法,可以实现H.264和AVS的帧间运动矢量预测,但是该专利在运动矢量预测中不仅使用了38个78比特的相邻块寄存器保存相邻宏块信息,还使用了32个78比特的寄存器缓存当前宏块的信息,这大大浪费了存储开销。如果考虑帧内模式预测和边界强度计算,还需要浪费更多存储开销。另外,该专利在每个宏块结束和开始前,需要更新和读取24个相邻块信息,使得访存时间增大。在H.264和AVS标准软件代码中,对相邻块信息的处理均采用保存当前整个宏块信息的方法,然后根据当前划分块的下标,选择其左相邻块A和上相邻块B预测当前块,这样如果按照H.264的4x4子块划分方法,每个宏块需要一个16个寄存器组成的缓存。加上宏块左边界和上边界的寄存器,总共需要26这样的寄存器保存信息,这样占用了很大的内部存储空间。

发明内容

本发明的目的在于克服现有技术的上述不足,提供一种视频解码宏块预测与边界滤波中相邻块信息的处理方法。本发明适用于视频解码中的宏块预测与边界滤波强度信息的处理中,可以兼容H.264和AVS解码标准,减少存储空间,操作简单,易于实现。

本发明是通过以下技术方案实现的,本发明包括以下步骤:

第一步,将宏块划分为16个4x4的子块,且分别以Cxy为每个子块进行编号,其中:行下标x从上到下依次为0~3,列下标y从左至右依次为0~3,使用10个寄存器保存相邻块信息,其中:5个寄存器从下到上依次编号为R0-R4,另外5个寄存器从左到右依次编号为R5-R9,R4位于R5的水平左侧。

所述的相邻块信息包括:前向运动矢量,前向参考索引,后向运动矢量,后向参考索引,帧内预测模式和残差非零系数标志。

第二步,当当前宏块为图像右边界时,从行缓存加载R6~R8对应地址的3个数据至R6~R8否则,从行缓存加载R6~R9对应地址的4个数据至R6~R9

所述的行缓存是保存当前图像中上一行已经解码宏块信息的缓存,该缓存包括480个存储单元,其中每个存储单元是行缓存中每个地址保存的运动矢量,参考索引,帧内预测模式,残差非零系数标志以及宏块编码类型信息。

所述的R6~R9对应地址,是行缓存中R6~R9四个4x4子块对应位置的地址,计算公式为:

R6对应地址=mb_x*4+1,R7对应地址=mb_x*4+2,

R8对应地址=mb_x*4+3,R9对应地址=mb_x*4+4,

其中:mb_x为当前宏块地址的x分量。

第三步,将当前需要被预测的分割块划分为M xN大小,且对其左上角的4x4分割块Cx,y的x和y按照A=3+y-x进行下标映射处理处理得到左相邻块A的寄存器编号RA,对左相邻块A的寄存器编号RA按照B=A+2进行偏移计算处理得到上相邻块B的寄存器编号RB,其中:A和B都是0到8之间的一个整数。

第四步,当进行帧间运动矢量预测处理时,按照C=B+M/4和D=A+1,分别得到右相邻块C的寄存器编号RC和左上邻块D的寄存器编号RD;当进行帧内模式预测处理或边界滤波强度计算处理时直接执行第五步。

第五步,采用现有技术进行帧内模式预测处理得到当前被预测分割块的帧内预测模式,或者是采用现有技术进行帧间运动矢量预测处理得到运动矢量与参考索引,或者是采用现有技术进行边界滤波强度计算处理得到垂直与水平边界滤波强度值。

第六步,对当前被预测分割块中包含的每个4x4子块Cx,y行下标x和列下标y进行更新下标映射处理,得到每个4x4子块Cx,y对应的更新寄存器编号Rn,且将4x4子块Cx,y的信息更新至寄存器Rn中。

所述的更新下标映射处理,是:

Rn=R4+y-x

其中:Rn为4x4子块对应的更新寄存器编号,x为4x4子块Cx,y的行下标,y为4x4子块Cx,y的列下标,当当前被预测分割块中包含两个以上同一左上对角线的4x4子块时,取该对角线最右下角的4x4子块Cx,y,0≤n≤8。

第七步,重复上述步骤,直至完成对整个宏块的处理后,对寄存器进行宏块更新处理,得到新的行缓存内容和相邻寄存器信息,从而进行下一个宏块的处理。

所述的宏块更新处理,是:先用R1~R4的寄存器信息更新行缓存对应地址单元的信息,再用R4~R7的寄存器信息去更新R0~R3

所述的行缓存对应地址单元是:当前宏块中C3,0、C3,1、C3,2和C3,3在行缓存中对应的存储单元,计算公式为:

C3,0对应地址=mb_x*4+0,C3,1对应地址=mb_x*4+1,

C3,2对应地址=mb_x*4+2,C3,3对应地址=mb_x*4+3,

其中:mb_x为当前宏块地址的x分量。

与现有技术相比,本发明的有益效果是:该方法可以兼容H.264和AVS标准,在处理需要利用相邻块信息预测当前块信息的方法中,包括帧内模式预测、帧间运动矢量空域模式预测以及边界滤波强度信息的处理,仅需要10个寄存器保存相邻块信息,而不需要保存整个当前宏块的信息,比现有的软硬件方法都大大节约61.5%~64%的存储空间,并且读取和更新相邻块信息具有规律性,能够减少更新次数与时间,易于硬件实现。

附图说明

图1是实施例的块划分方法与编号以及相邻块位置示意图;

图2是实施例3在对4x4子块预测时读取相邻块的示意图;

图3是实施例1在对8x8块预测时读取相邻块的示意图;

图4是实施例2在对16x8块预测时读取相邻块的示意图;

图5是实施例3在更新相邻块的示意图;

图6是实施例1在对8x8块预测完成后更新相邻块的示意图;

图7是实施例2在对4x8块预测完成后更新相邻块的示意图;

图8是实施例在一个宏块预测完成后更新相邻块的示意图。

具体实施方式

下面结合附图对本发明的方法做进一步详细描述,以下实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。

实施例1

本实施例用于H.264和AVS宏块的帧内模式预测,具体包括以下步骤:

第一步,如图1所示,将宏块划分为16个4x4的子块,且分别以Cxy为每个子块进行编号,其中:行下标x从上到下依次为0~3,列下标y从左至右依次为0~3,使用10个寄存器保存10个4x4相邻块信息,其中:5个寄存器从下到上依次编号为R0-R4,另外5个寄存器从左到右依次编号为R5-R9,R4位于R5的水平左侧。

所述的相邻块信息包括:前向运动矢量,前向参考索引,后向运动矢量,后向参考索引,帧内预测模式和残差非零系数标志。

第二步,当当前宏块为图像右边界时,从行缓存加载R6~R8对应地址的3个数据至R6~R8;否则,从行缓存加载R6~R9对应地址的4个数据至R6~R9

所述的行缓存是保存当前图像中上一行已经解码宏块信息的缓存,该缓存包括480个存储单元,其中每个存储单元是行缓存中每个地址保存的运动矢量,参考索引,帧内预测模式,残差非零系数标志以及宏块编码类型信息。

所述的R6~R9对应地址,是行缓存中R6~R9四个4x4子块对应位置的地址,计算公式为:

R6对应地址=mb_x*4+1,其中mb_x为当前宏块地址的x分量;

R7对应地址=mb_x*4+2,其中mb_x为当前宏块地址的x分量;

R8对应地址=mb_x*4+3,其中mb_x为当前宏块地址的x分量;

R9对应地址=mb_x*4+4,其中mb_x为当前宏块地址的x分量。

第三步,将当前需要被预测的分割块划分为MxN大小,且对其左上角的4x4分割块Cx,y的x和y按照A=3+y-x进行下标映射处理处理得到左相邻块A的寄存器编号RA,对左相邻块A的寄存器编号RA按照B=A+2进行偏移计算处理得到上相邻块B的寄存器编号RB,其中:A和B都是0到8之间的一个整数。

如图3所示,当前预测块为8x8块,包含4个4x4块,最左上角4x4块行下标为0,列下标为0,因此进行下标映射处理得到:A=3+0-0=3,进行偏移计算处理后得到:B=3+2=5。因此当前块的左相邻块A为R3,上相邻块B为R5

第四步,采用现有技术进行帧内模式预测处理,具体是:

a)提取左相邻块A和上相邻块B的帧内预测模式predModeA和predModeB。当左相邻块A和上相邻块B其中一个为帧间编码宏块或不可用,则predModeA和predModeB均置为直流模式(DC mode);

b)对predModeA和predModeB以及码流解析得到的帧内预测模式(intra_pred_mode)语法元素进行预测处理得到当前块的帧内预测模式。

所述的预测处理是:当先前预测模式标志(prev_pred_mode_flag)为1,则取predModeA和predModeB的最小值;当先前预测模式标志(prev_pred_mode_flag)不为1且predModeA和predModeB的最小值比语法元素intra_pred_mode小,则取语法元素intra_pred_mode的值加1,否则直接取语法元素intra_pred_mode的值。

第五步,对当前被预测分割块中包含的每个4x4子块Cx,y行下标x和列下标y进行更新下标映射处理,得到每个4x4子块Cx,y对应的更新寄存器编号Rn,且将4x4子块Cx,y的信息更新至寄存器Rn中。

所述的更新下标映射处理,是:

Rn=R4+y-x

其中:Rn为4x4子块对应的更新寄存器编号,x为4x4子块Cx,y的行下标,y为4x4子块Cx,y的列下标,当当前被预测分割块中包含两个以上同一左上对角线的4x4子块时,取该对角线最右下角的4x4子块Cx,y,0≤n≤8。

如图6所示,当前预测前块为8x8大小,包含4个4x4块,其中C0,0和C1,1属于同一左上对角线的4x4块,因此分别对C0,1、C1,0和C1,1三个4x4块进行更新下标映射处理得到:

C0,1的更新寄存器编号为:Rn=R4+1-0=R5

C1,0的更新寄存器编号为:Rn=R4+0-1=R3

C1,1的更新寄存器编号为:Rn=R4+1-1=R4

所以需要将C0,1块的帧内预测模式更新至R5中,将C1,0块的帧内预测模式更新至R3中,将C1,1块的帧内预测模式更新至R4中。

第七步,重复上述步骤,直至完成对整个宏块的帧内模式预测处理后,对寄存器进行宏块更新处理,得到新的行缓存内容和相邻寄存器信息,从而进行下一个宏块的处理。

所述的宏块更新处理,是:先用R1~R4的寄存器信息更新行缓存对应地址单元的信息,再用R4~R7的寄存器信息去更新R0~R3

所述的行缓存对应地址单元是:当前宏块中C3,0、C3,1、C3,2和C3,3在行缓存中对应的存储单元,计算公式为:

C3,0对应地址=mb_x*4+0,C3,1对应地址=mb_x*4+1,

C3,2对应地址=mb_x*4+2,C3,3对应地址=mb_x*4+3,

其中:mb_x为当前宏块地址的x分量。

如图8所示,整个宏块预测完成后,R1~R4保存了当前宏块中C3,0、C3,1、C3,2和C3,3的帧内预测模式值,R4~R7保存了当前宏块中C0,3、C1,3、C2,3和C3,3的帧内预测模式值,为了下一宏块和下一行宏块的预测需要,所以首先用R1~R4更新行缓存(Line Buffer)的对应位置,再用R4~R7去更新R0~R3

使用本实施例方法进行H.264和AVS的帧内模式预测,只需要9个寄存器保存9个相邻块的信息,而不需要保存整个当前宏块的帧内预测模式信息(需要16个相同位宽的寄存器),因此可以使存储减少:16/(16+9)x100%=64%。另外,每次宏块预测结束与开始时,都只需要更新或加载4个行缓存数据,比现有技术减少了更新和加载缓存的时间。

实施例2

本实施例用于H.264和AVS宏块的帧间运动矢量预测,包括以下步骤:

第一步,如图1所示,将宏块划分为16个4x4的子块,且分别以Cxy为每个子块进行编号,其中:行下标x从上到下依次为0~3,列下标y从左至右依次为0~3,使用10个寄存器保存10个4x4相邻块信息,其中:5个寄存器从下到上依次编号为R0-R4,另外5个寄存器从左到右依次编号为R5-R9,R4位于R5的水平左侧。

所述的相邻块信息包括:前向运动矢量,前向参考索引,后向运动矢量,后向参考索引,帧内预测模式和残差非零系数标志。

第二步,当当前宏块为图像右边界时,从行缓存加载R6~R8对应地址的3个数据至R6~R8;否则,从行缓存加载R6~R9对应地址的4个数据至R6~R9

所述的行缓存是保存当前图像中上一行已经解码宏块信息的缓存,该缓存包括480个存储单元,其中每个存储单元是行缓存中每个地址保存的运动矢量,参考索引,帧内预测模式,残差非零系数标志以及宏块编码类型信息。

所述的R6~R9对应地址,是行缓存中R6~R9四个4x4子块对应位置的地址,计算公式为:

R6对应地址=mb_x*4+1,其中mb_x为当前宏块地址的x分量;

R7对应地址=mb_x*4+2,其中mb_x为当前宏块地址的x分量;

R8对应地址=mb_x*4+3,其中mb_x为当前宏块地址的x分量;

R9对应地址=mb_x*4+4,其中mb_x为当前宏块地址的x分量。

第三步,将当前需要被预测的分割块划分为M xN大小,且对其左上角的4x4分割块Cx,y的x和y按照A=3+y-x进行下标映射处理处理得到左相邻块A的寄存器编号RA,对左相邻块A的寄存器编号RA按照B=A+2进行偏移计算处理得到上相邻块B的寄存器编号RB,其中:A和B都是0到8之间的一个整数。

第四步,按照C=B+M/4和D=A+1,分别得到右相邻块C的寄存器编号RC和左上邻块D的寄存器编号RD

如图4所示,当前被预测块为16x8,像素宽度M为16,包含8个4x4块,最左上角4x4块行下标为0,列下标为0,因此进行下标映射处理得到:A=3+0-0=3,进行偏移计算处理后得到:B=3+2=5,C=5+16/4=9,D=3+1=4。因此当前块的左相邻块A为R3,上相邻块B为R5,右上相邻块C为R9,左上相邻块D为R4

第五步,采用现有技术进行帧间运动矢量空域预测,具体是:

a)提取相邻块A的运动矢量mvA和参考索引信息refIdxA、相邻块B的运动矢量mvB和参考索引信息refIdxB、相邻块C的运动矢量mvC和参考索引信息refIdxC、相邻块D的运动矢量mvD和参考索引信息refIdxD;其中:当相邻块C不可用时,将相邻块D的运动矢量和参考索引分别赋值给C,即:mvC=mvD、refIdxC=refIdxD。

所述的不可用是指块未被预测,或者不存在,或者为帧内编码。

b)当相邻块A、B、C只有一个块X可用,则当前被预测分割块的运动矢量和参考索引分别等于mvX和refIdxX(X为A或B或C),预测结束;否则进行c步骤。

c)当当前宏块为16x8或者8x16分割的宏块:

1、当前宏块为8×16模式且当前被预测分割块为左块,当A和当前被预测分割块的参考索引值相同,则当前被预测分割块的运动矢量等于mvA;否则进行d步骤。

2、当前宏块为8×16模式且当前被预测分割块为右块,当C和和当前被预测分割块的参考索引值相同,则当前被预测分割块的运动矢量等于mvC;否则进行d步骤;

3、当前宏块为16×8模式且当前被预测分割块为上块,当B和当前被预测分割块的参考索引值相同,则当前被预测分割块的运动矢量等于mvB;否则进行d步骤。

4、当前宏块为16×8模式且当前被预测分割块为下块,当A和当前被预测分割块的参考索引值相同,则当前被预测分割块的运动矢量等于mvA;否则进行d步骤。

d)对mvA,refIdxA,mvB,refIdxB,mvC,refIdxC进行计算处理,得到当前被预测分割块的运动矢量预测值。

所述的计算处理是:

当是H.264,则当前被预测块的运动矢量预测值mvpX为:

mvpX=Medium(mvA,mvB,mvC),其中Medium为取中值函数,作用是取mvA,mvB,mvC三者的中间值。

当是AVS,则得到当前被预测块的运动矢量预测值mvpX包括以下计算过程:

首先对mvA,mvB,mvC进行缩放:

MVA=Sign(mvA)×((Abs(mvA)×BlockDistanceE×(512/BlockDistanceA)+256)>>9),

MVB=Sign(mvB)×((Abs(mvB)×BlockDistanceE×(512/BlockDistanceB)+256)>>9),

MVC=Sign(mvC)×((Abs(mvC)×BlockDistanceE×(512/BlockDistanceC)+256)>>9),

其中:Abs为绝对值函数,BlockDistanceE为当前被预测块的块距离,BlockDistanceA为相邻块A的块距离,BlockDistanceB为相邻块B的块距离,BlockDistanceC为相邻块C的块距离。

然后进行条件判断:

VAB=Dist(MVA,MVB)=Abs(MVA_x-MVB_x)+Abs(MVA_y-MVB_y),

VBC=Dist(MVB,MVC)=Abs(MVB_x-MVC_x)+Abs(MVB_y-MVC_y),

VCA=Dist(MVC,MVA)=Abs(MVC_x-MVA_x)+Abs(MVC_y-MVA_y),

其中:运动矢量MVC=[MVC_x,MVC_y],MVA=[MVA_x,MVA_y],MVB=[MVB_x,MVB_y]

取FMV等于VAB,VBC,VCA的中值,当FMV和VAB相等,mvpX等于MVC;否则,当FMV和VBC相等,mvpX等于MVA;否则,mvpX等于MVB。

e)将步骤d中得到的运动矢量预测值加上从码流中解出的运动矢量残差值,得到当前被预测分割块最终的运动矢量值。

第六步,对当前被预测分割块中包含的每个4x4子块Cx,y行下标x和列下标y进行更新下标映射处理,得到每个4x4子块Cx,y对应的更新寄存器编号Rn,且将4x4子块Cx,y的信息更新至寄存器Rn中。

所述的更新下标映射处理,是:

Rn=R4+y-x

其中:Rn为4x4子块对应的更新寄存器编号(R0~R8),x为4x4子块Cx,y的行下标,y为4x4子块Cx,y的列下标,当当前被预测分割块中包含两个以上同一左上对角线的4x4子块,则取该对角线最右下角的4x4子块Cx,y

如图7所示,当前预测块为4x8,包含两个4x4子块,没有属于同一左上对角线的4x4子块,因此分别对C2,1和C3,1两个4x4子块进行更新下标映射处理得到:

C2,1的更新寄存器编号为:Rn=R4+1-2=R3

C3,1的更新寄存器编号为:Rn=R4+1-3=R2

所以需要将C2,1块的帧内预测模式更新至R3中,将C3,1块的帧内预测模式更新至R2中。

第七步,重复上述步骤,直至完成对整个宏块的帧间运动矢量预测后,对寄存器进行宏块更新处理,得到新的行缓存内容和相邻寄存器信息,从而进行下一个宏块的处理。

所述的宏块更新处理,是:先用R1~R4的寄存器信息更新行缓存对应地址单元的信息,再用R4~R7的寄存器信息去更新R0~R3

所述的行缓存对应地址单元是:当前宏块中C3,0、C3,1、C3,2和C3,3在行缓存中对应的存储单元,计算公式为:

C3,0对应地址=mb_x*4+0,其中mb_x为当前宏块地址的x分量;

C3,1对应地址=mb_x*4+1,其中mb_x为当前宏块地址的x分量;

C3,2对应地址=mb_x*4+2,其中mb_x为当前宏块地址的x分量;

C3,3对应地址=mb_x*4+3,其中mb_x为当前宏块地址的x分量。

如图8所示,整个宏块预测完成后,R1~R4保存了当前宏块中C3,0、C3,1、C3,2和C3,3的运动矢量和参考索引信息,R4~R7保存了当前宏块中C0,3、C1,3、C2,3和C3,3的运动矢量和参考索引信息,为了下一宏块和下一行宏块的预测需要,所以首先用R1~R4更新行缓存的对应位置,再用R4~R7去更新R0~R3

使用本实施例方法进行H.264和AVS的帧间运动矢量预测,只需要10个寄存器保存10个相邻块的信息,而不需要保存整个当前宏块的帧内预测模式信息(需要16个相同位宽的寄存器),因此可以使存储减少:16/(16+10)x100%=61.5%。另外,每次宏块预测结束与开始时,都只需要更新或加载4个行缓存数据,比现有技术减少了更新和加载缓存的时间。

实施例3

本实施例用于H.264和AVS宏块的边界滤波强度的计算,包括以下步骤:

第一步,如图1所示,将宏块划分为16个4x4的子块,且分别以Cxy为每个子块进行编号,其中:行下标x从上到下依次为0~3,列下标y从左至右依次为0~3,使用10个寄存器保存10个4x4相邻块信息,其中:5个寄存器从下到上依次编号为R0-R4,另外5个寄存器从左到右依次编号为R5-R9,R4位于R5的水平左侧。

所述的相邻块信息包括:前向运动矢量,前向参考索引,后向运动矢量,后向参考索引,帧内预测模式和残差非零系数标志。

第二步,当当前宏块为图像右边界时,从行缓存加载R6~R8对应地址的3个数据至R6~R8;否则,从行缓存加载R6~R9对应地址的4个数据至R6~R9

所述的行缓存是保存当前图像中上一行已经解码宏块信息的缓存,该缓存包括480个存储单元,其中每个存储单元是行缓存中每个地址保存的运动矢量,参考索引,帧内预测模式,残差非零系数标志以及宏块编码类型信息。

所述的R6~R9对应地址,是行缓存中R6~R9四个4x4子块对应位置的地址,计算公式为:

R6对应地址=mb_x*4+1,其中mb_x为当前宏块地址的x分量;

R7对应地址=mb_x*4+2,其中mb_x为当前宏块地址的x分量;

R8对应地址=mb_x*4+3,其中mb_x为当前宏块地址的x分量;

R9对应地址=mb_x*4+4,其中mb_x为当前宏块地址的x分量。

第三步,将当前需要被预测的分割块划分为MxN大小,且对其左上角的4x4分割块Cx,y的x和y按照A=3+y-x进行下标映射处理处理得到左相邻块A的寄存器编号RA,对左相邻块A的寄存器编号RA按照B=A+2进行偏移计算处理得到上相邻块B的寄存器编号RB,其中:A和B都是0到8之间的一个整数。

如图2所示,边界滤波强度统一按照4x4子块处理,当前被预测块为C0,0,行下标为0,列下标为0,因此进行下标映射处理得到:A=3+0-0=3,进行偏移计算处理后得到:B=3+2=5。因此当前块的左相邻块A为R3,上相邻块B为R5

第四步,采用现有技术进行边界滤波强度的预测,具体为:

a)提取相邻块A、B的运动矢量、参考索引和残差非零系数标志;

b)当当前宏块左边为图像边界,则当前4x4子块的垂直边界滤波强度值取0;当当前宏块上边为图像边界,则当前4x4子块的水平边界滤波强度值取0;

否则进行c)。

c)当当前宏块为帧内编码宏块或者左相邻块A或者上相邻块B为帧内编码宏块时:

当是AVS,则当前4x4子块的垂直和水平边界滤波强度值都取2;当为H.264且边界为宏块边界,则边界滤波强度为4,否则为3。

否则进行d)。

d)当为AVS,直接跳到步骤e,否则:当左相邻块A和当前4x4子块其中一个残差非零系数为1,则垂直边界滤波强度为2,否则进行下一步;当上相邻块B和当前4x4子块其中一个残差非零系数为1,则水平边界滤波强度为2,否则进行下一步;

e)当当前图像为P帧:

当左相邻块A和当前4x4子块的参考索引不相同,或者参考图像相同,但是左相邻块A和当前4x4子块的运动矢量分量中任一个分量(x或者y)的差值大于或等于4,则当前4x4子块的垂直边界滤波强度为1;否则垂直边界滤波强度为0。当上相邻块B和当前4x4子块的参考索引不相同,或者参考图像相同,但是上相邻块B和当前4x4子块的运动矢量分量中任一个分量(x或者y)的差值大于或等于4,则当前4x4子块的水平边界滤波强度为1;否则水平边界滤波强度为0。

否则进行下一步。

f)否则当前图像为B帧,当左相邻块A和当前4x4子块的前向索引参考值和后向索引参考值分别相等:

以下两个条件中任一个成立,则垂直边界滤波强度等于1:I)左相邻块A和当前4x4子块的前向运动矢量分量中任一个分量的差值大于或等于4;II)左相邻块A和当前4x4子块的后向运动矢量分量中任一个分量的差值大于或等于4。否则,垂直边界滤波强度等于0;

否则左相邻块A和当前4x4子块的前向索引参考值和后向索引参考值分别不相等,垂直边界滤波强度等于1。

当上相邻块B和当前4x4子块的前向索引参考值和后向索引参考值分别相等:

以下两个条件中任一个成立,则水平边界滤波强度等于1:I)上相邻块B和当前4x4子块的前向运动矢量分量中任一个分量的差值大于或等于4;II)上相邻块B和当前4x4子块的后向运动矢量分量中任一个分量的差值大于或等于4。否则,水平边界滤波强度等于0;

否则上相邻块B和当前4x4子块的前向索引参考值和后向索引参考值分别不相等,水平边界滤波强度等于1。

第五步,对当前被预测分割块中包含的每个4x4子块Cx,y行下标x和列下标y进行更新下标映射处理,得到每个4x4子块Cx,y对应的更新寄存器编号Rn,且将4x4子块Cx,y的信息更新至寄存器Rn中。

所述的更新下标映射处理,是:

Rn=R4+y-x

其中:Rn为4x4子块对应的更新寄存器编号(R0~R8),x为4x4子块Cx,y的行下标,y为4x4子块Cx,y的列下标,当当前被预测分割块中包含两个以上同一左上对角线的4x4子块,则取该对角线最右下角的4x4子块Cx,y

如图5所示,对C0,0块进行更新下标映射处理得到:

C0,0的更新寄存器编号为:Rn=R4+0-0=R4

所以需要将C0,0块的运动矢量、参考索引、宏块编码类型和残差非零系数标志更新至R4中。

第六步,重复上述步骤,直至完成对整个宏块的边界滤波强度计算后,对寄存器进行宏块更新处理,得到新的行缓存内容和相邻寄存器信息,从而进行下一个宏块的处理。

所述的宏块更新处理,是:先用R1~R4的寄存器信息更新行缓存对应地址单元的信息,再用R4~R7的寄存器信息去更新R0~R3。首先用R1~R4的运动矢量、参考索引、宏块编码类型和残差非零系数标志信息更新行缓存的对应位置的运动矢量、参考索引、宏块编码类型和残差非零系数标志信息,再用R4~R7的运动矢量、参考索引、宏块编码类型和残差非零系数标志信息去更新R0~R3

所述的行缓存对应地址单元是:当前宏块中C3,0、C3,1、C3,2和C3,3在行缓存中对应的存储单元,计算公式为:

C3,0对应地址=mb_x*4+0,其中mb_x为当前宏块地址的x分量;

C3,1对应地址=mb_x*4+1,其中mb_x为当前宏块地址的x分量;

C3,2对应地址=mb_x*4+2,其中mb_x为当前宏块地址的x分量;

C3,3对应地址=mb_x*4+3,其中mb_x为当前宏块地址的x分量。

如图8所示,整个宏块预测完成后,R1~R4保存了当前宏块中C3,0、C3,1、C3,2和C3,3的信息,R4~R7保存了当前宏块中C0,3、C1,3、C2,3和C3,3的运动矢量、参考索引、宏块编码类型和残差非零系数标志信息,为了下一宏块和下一行宏块的预测需要,所以首先用R1~R4更新行缓存的对应位置,再用R4~R7去更新R0~R3

使用本实施例方法进行H.264和AVS的边界强度计算,只需要9个寄存器保存9个相邻块的信息,而不需要保存整个当前宏块的帧内预测模式信息(需要16个相同位宽的寄存器),因此可以使存储减少:16/(16+9)x 100%=64%。另外,每次宏块预测结束与开始时,都只需要更新或加载4个行缓存数据,比现技术减少了更新和加载缓存的时间。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号