法律状态公告日
法律状态信息
法律状态
2015-05-20
未缴年费专利权终止 IPC(主分类):H04N7/26 授权公告日:20081126 终止日期:20140331 申请日:20060331
专利权的终止
2008-11-26
授权
授权
2006-10-25
实质审查的生效
实质审查的生效
2006-08-30
公开
公开
技术领域
本发明属于信号处理中的视频和图像编解码技术领域,特别涉及在编码解码过程中多个流水线阶段信息共享的方法。
背景技术
H.264/AVC是最新的视频编码国际标准。新的视频编码国际标准采用了新的编码方法,如基于上下文的变长编码(CAVLC),更高精度的运动矢量预测,可变块大小预测,intra预测,整型变换等,与MPEG-4视频编码国际标准相比,编码效率提高了一倍。
与此同时解码器的复杂度也大大增加。传统的视频编码国际标准(如MPEG-2),其解码器一般采用3级的并行流水结构,即包括以下三个流水线结构:变长解码/反量化/反扫描(VLD/IQ/IZZ),逆离散余弦变换(IDCT/MC),数据回写(WB)。
在H.264/AVC中,由于单个流水线的复杂度增加,解码器需要分为更多的流水线阶段。在一个典型的解码器结构,一般可以分为五个流水线阶段,包括:流水线阶段零:基于上下文的熵解码(CAVLC);流水线阶段一:整型逆变换IIT(Inverse IntegerTransform)/读参考帧数据(Read_Ref);流水线阶段二:插值和运动补偿;流水线阶段三:去块效应滤波(Deblocking),流水线阶段四:数据回写(WB)。在同一个时间段内,各个流水线阶段对不同的宏块进行解码,以提高解码的并行性。如图1所示,在T4时间段内,五个流水线阶段分别对宏块MB0,宏块MB1,宏块MB2,宏块MB3,宏块MB4进行并行解码。
流水线阶段还可以有不同的划分方法,趋势是需要更多的流水阶段来实现解码器,以提高各个流水线阶段的利用率,满足高端的实时应用。
在各个流水线阶段,会同时用到某些信息,需要在实现解码器的芯片上保存上一行宏块的宏块模式(mb_mode),运动矢量(mv),参考索引(ref_idx),象素值(pel)等信息,以及左边宏块的相应信息。
例如,如图2所示,在运动矢量预测时,E的运动矢量由左边宏块A和上一行对应宏块B,上一行超前宏块C的运动矢量预测得到。如图3所示,在去块效应(Deblocking)阶段,也需要用到上一行宏块A的mb_mode,mv,ref_idx等信息,以及左边宏块B的相应信息,来判断滤波的边界强度。0到15为当前解码宏块的16个子块,黑实线为需要滤波的子块边界。
现有的多流水线对宏块信息的使用方法是在要用到这些信息的每个流水线阶段,用存储器保存相应的信息,每个流水线阶段单独使用和维护相应的信息。如图1所示,例如,流水线阶段一和流水线阶段三,都需要用到上一行宏块的信息,就在这两个流水线阶段都保存上一行宏块的相应信息,并对这些信息单独使用和维护。这种直接实现方法,需要在实现解码器的芯片上用多块存储器(如RAM)保存相同的信息,这对硬件资源是一种浪费。
发明内容
本发明的目的是为克服已有技术的不足之处,提出一种基于数据缓存的多流水线阶段信息共享方法,可以实现共享存储和维护。各个流水线阶段可以共享在实现解码器的芯片内的上一行或左边宏块的mb_mode,mv,ref_idx,pel等信息。从而有效的节省芯片存储器(如RAM)的资源。
本发明提出一种基于数据缓存的多流水线阶段信息共享方法,用于分为N个流水线阶段的一个解码器结构中,其特征在于,包括设置所述上一行宏块信息的一个共享存储器及数据缓存区,所述共享存储器用于存储上一行宏块信息,所述数据缓存区用于缓存上一行宏块的信息,供各个流水线阶段使用。
本发明还提出另一种基于数据缓存的多流水线阶段信息共享方法,用于分为N个流水线阶段的一个解码器结构中,其特征在于,包括设置所述左边宏块信息的一个数据缓存区,所述数据缓存区用于缓存左边宏块的信息,供各个流水线阶段使用。
本发明带来的有益效果
本发明可以使多个流水线阶段共享保存在共享存储器的上一行或左边宏块的mb_mode,mv,ref_idx,pel等信息,而不需要在每一个流水线阶段单独保存和维护上一行或左边宏块的mb_mode,mv,ref_idx,pel等信息。从而有效的节省解码器的芯片上存储器的资源。同时,每增加一个流水线阶段,只需要设置一个指针,控制简单。
附图说明
图1为H.264/AVC的解码器5级流水线结构示意图。
图2为H.264/AVC中运动矢量的预测示意图。
图3为去块效应(Deblocking)滤波的边界示意图。
图4本发明对上一行宏块进行缓存的移位寄存器阵列示意图。
图5本发明宏块解码示意图。
图6本发明对左边宏块信息进行缓存的移位寄存器阵列。
图7本发明对上一行宏块进行缓存的长度为5的移位寄存器阵列实施例结构示意图。
图8本发明对左边宏块进行缓存的长度为4的移位寄存器阵列实施例结构示意图。
具体实施方式
本发明提出的基于数据缓存的多流水线阶段信息共享方法及其设备结合附图及实施例详细说明如下:
在多个流水线阶段解码器进行解码操作中,如图2所示,在运动矢量预测时,E的运动矢量由左边宏块A和上一行宏块B,C的运动矢量预测得到。如图3所示,在去块效应(deblocking)阶段,需要用到上一行宏块A的mb_mode,mv,ref_idx等信息,以及左边宏块B的相应信息,来判断滤波的边界强度。
本发明提出一种基于数据缓存的多流水线阶段信息共享方法,用于分为N个流水线阶段的一个解码器结构中,其特征在于,包括设置所述上一行宏块信息的一个共享存储器及数据缓存区,所述共享存储器用于存储上一行宏块信息,所述数据缓存区用于缓存上一行宏块的信息,供各个流水线阶段使用。具体说明如下:
若一个解码器结构中分为N个流水线阶段,其中A,B,C,…Z…,为N个流水线阶段中(A为最小流水线阶段索引值,Z为最大流水线阶段索引值),会同时使用上一行宏块的宏块模式(mb_mode),运动矢量(mv),参考索引(ref_idx),象素值(pel)等信息的几个流水线阶段,并且A<B<C<…<Z…<N;流水线阶段B和流水线阶段A之间相差(B-A)个流水线阶段,流水线C和流水线A之间相差(C-A)个流水线阶段;设每个宏块的可变块大小在水平方向上的子块个数为n(在H.264/AVC中,最小块是4×4,n=4;在AVS中最小块是8×8,n=2);
该方法将保存的上一行宏块中需要使用的信息进行缓存,通过指针来标志每一个流水线阶段使用的数据在缓存中的位置,包括设置上一行宏块信息的一个共享存储器及数据缓存区,在最小流水线阶段A对数据缓存区的信息进行更新,对数据缓存区设置除最小流水线阶段A外的B,C,…Z流水线阶段的指针与更新三部分,各部分的具体实现步骤如下:
1)设置上一行宏块信息的一个共享存储器及数据缓存区:所述共享存储器用于存储上一行宏块信息,所述数据缓存区由移位寄存器阵列构成,该移位寄存器阵列由m个寄存器组构成,每个寄存器组由n个寄存器构成(即构成m×n的寄存器阵列);最小寄存器组的个数m为(Z-A+1)+L+1;其中,L为上一行超前使用的宏块信息的个数,每个寄存器组标记为J(i),i=0,1,…,m-1(如图4所示);
2)在最小流水线阶段A对数据缓存区的信息进行更新,具体包括以下步骤:
a)在对当前一行宏块进行解码操作开始时,从共享存储器中读取L+1个上一行宏块的信息,并依次存入移位寄存器组J(0)到J(L);
b)当流水线阶段A每完成一个当前宏块的解码操作后,从共享存储器存储的上一行宏块信息中,读取上一行宏块信息中的下一个当前宏块要使用的信息数据,存储到寄存器组J(0)中,同时相应的寄存器组中的数据左移,即J(0)的数据移到J(1),J(1)的数据移到J(2),依此类推(如图5所示,当流水线阶段A在解码完当前解码宏块MB1后,把缓存在J(0)寄存器组的B宏块的信息左移到J(1)寄存器,将上行中C宏块的信息读入J(0)寄存器组,在解码宏块MB2时,使用J(0)和J(1)寄存器组的信息);
c)在流水线阶段A对共享存储器的上一行宏块的信息进行更新,将解码出来的当前宏块信息保存到所述共享存储器中,替换原有信息,备下一行宏块解码时使用;
3)在数据缓存区设置除最小流水线阶段A外的B,C,…Z流水线阶段的指针与更新:其中,流水线阶段B寄存器组指针的设置与更新具体包括以下步骤;
a)对流水线阶段B设置一个寄存器组指针,该指针用于保存寄存器组的索引值i;
其起始指针指向J(L)的寄存器组;
b)每当流水线阶段A完成一个当前宏块的解码操作后,该指针向左加一;
c)每当流水线阶段B完成一个当前宏块的解码操作后,该指针向右减一。
流水线阶段C,……寄存器组指针的设置与更新重复相应的步骤a)-c)。
本发明还提出另一种基于数据缓存的多流水线阶段信息共享方法,用于分为N个流水线阶段的一个解码器结构中,其特征在于,包括设置所述左边宏块信息的一个数据缓存区,所述数据缓存区用于缓存左边宏块的信息,供各个流水线阶段使用。具体说明如下:
若一个解码器结构中分为N个流水线阶段,其中A,B,C,…Z…,为N个流水线阶段中(A为最小流水线阶段索引值,Z为最大流水线阶段索引值),会同时使用上一行宏块的宏块模式(mb_mode),运动矢量(mv),参考索引(ref_idx),象素值(pel)等信息的几个流水线阶段,并且A<B<C<…<Z…<N;流水线阶段B和流水线阶段A之间相差(B-A)个流水线阶段,流水线C和流水线A之间相差(C-A)个流水线阶段;设每个宏块的可变块大小在水平方向上的子块个数为n(在H.264/AVC中,最小块是4×4,n=4;在AVS中最小块是8×8,n=2);
该方法将左边宏块信息进行缓存,通过指针来标志每一个流水线阶段使用的数据在缓存中的位置,包括设置左边宏块信息的一个数据缓存区,在最小流水线阶段A对数据缓存区的信息进行更新,对数据缓存区设置除最小流水线阶段A外的B,C,…Z流水线阶段的指针与更新三部分,各部分的具体实现步骤如下:
1)设置左边宏块信息的数据缓存区:所述数据缓存区由移位寄存器阵列构成,该移位寄存器阵列由m个寄存器组构成,每个寄存器组由n个寄存器构成(即构成m×n的寄存器阵列);最小寄存器组的个数m为(Z-A+1)+1;每个寄存器组标记为J(i),i=0,1,…,m-1(如图6所示);宏块信息在流水线阶段A中解码出来。
2)在最小流水线阶段A对数据缓存区的信息进行更新;
在流水线阶段A完成当前宏块信息的解码后,将解码的当前宏块信息,读取到寄存器组J(0)中,同时寄存器组数据左移。即J(0)的数据移到J(1),J(1)的数据移到J(2),依此类推;
3)对所述数据缓存区设置B,C,…Z流水线阶段的指针与更新,具体包括以下步骤;
a)对流水线阶段B设置一个寄存器组指针,该指针用于保存寄存器组的索引值i;其起始指针指向J(0)的寄存器组;
b)每当流水线阶段A完成一个当前宏块的解码操作后,该指针向左加一;
c)每当流水线阶段B完成一个当前宏块的解码操作后,该指针向右减一。
流水线阶段C,……寄存器组指针的设置与更新重复相应的步骤a)-c)。
本发明提出一种基于数据缓存的多流水线阶段信息共享方法的实施例1为具有5个流水线阶段解码器,其中运动矢量预测和去块效应(Deblocking)2个流水线阶段(运动矢量预测在流水线阶段1,去块效应(Deblocking)在流水线阶段3)需要使用上一行宏块的运动矢量信息进行解码操作;对于H.264/AVC,每个宏块的可变块大小在水平方向上的子块个数为4;
该方法将保存的上一行宏块中需要使用的信息进行缓存,通过指针来标志每一个流水线阶段使用的数据在缓存中的位置,对本发明的多流水线阶段信息共享方法实施例1包括设置上一行宏块信息的一个共享存储器及数据缓存区,在流水线阶段1完成寄存器组信息和上一行宏块信息的更新,对流水线阶段3寄存器组指针的设置与更新,其中,各部分的具体实现步骤如下:
1)设置上一行宏块信息的一个共享存储器及数据缓存区:所述共享存储器用于存储上一行宏块信息,所述数据缓存区由移位寄存器阵列构成,该移位寄存器阵列由5个寄存器组构成,每个寄存器组由4个寄存器构成(即构成5×4的寄存器阵列);每个寄存器组标记为J(i),i=0,1,…,4(如图7所示);
2)在流水线阶段1完成寄存器组信息和上一行宏块信息的更新,具体包括以下步骤:
a)在对当前一行宏块进行解码操作开始时,从共享存储器中读取2个上一行宏块的信息,并依次存入移位寄存器组J(0)到J(1);
b)当流水线阶段1每完成一个当前宏块的解码操作后,从共享存储器存储的上一行宏块信息中,读取上一行宏块信息中的下一个当前宏块要使用的信息数据,存储到寄存器组J(0)中,同时相应的寄存器组中的数据左移,即J(0)的数据移到J(1),J(1)的数据移到J(2),依此类推(如图7所示,当流水线阶段1在解码完当前解码宏块MB1后,把缓存在J(0)寄存器组的B宏块的信息左移到J(1)寄存器,将上行中C宏块的信息读入J(0)寄存器组,在解码宏块MB2时,使用J(0)和J(1)寄存器组的信息);
c)在流水线阶段1对共享存储器的上一行宏块的信息进行更新,将解码出来的当前宏块信息保存到所述共享存储器中,替换原有信息,备下一行宏块解码时使用;
3)对流水线阶段3寄存器组指针的设置与更新具体包括以下步骤;
a)对流水线阶段3设置一个寄存器组指针,该指针用于保存寄存器组的索引值i;
其起始指针指向J(1)的寄存器组;
b)每当流水线阶段1完成一个当前宏块的解码操作后,该指针向左加一;
c)每当流水线阶段3完成一个当前宏块的解码操作后,该指针向右减一。
本发明还提出一种基于数据缓存的多流水线阶段信息共享方法实施例2为具有5个流水线阶段解码器,其中运动矢量预测和去块效应(Deblocking)2个流水线阶段(运动矢量预测在流水线阶段1,去块效应(Deblocking)在流水线阶段3)需要使用上一行宏块的运动矢量信息进行解码操作;对于H.264/AVC,每个宏块的可变块大小在水平方向上的子块个数为4。
该方法将左边宏块信息进行缓存,通过指针来标志每一个流水线阶段使用的数据在缓存中的位置,对本发明的多流水线阶段信息共享方法实施例2包括设置左边宏块信息数据缓存区,还包括在最小流水线阶段1对数据缓存区的信息进行更新,对所述数据缓存区设置流水线阶段3的指针与更新。寄存器组信息的更新,寄存器组指针的设置与更新三部分,各部分的具体实现步骤如下:
1)设置左边宏块信息的数据缓存区:所述数据缓存区由移位寄存器阵列构成,该移位寄存器阵列由4个寄存器组构成,每个寄存器组由4个寄存器构成(即构成4×4的寄存器阵列);每个寄存器组标记为J(i),i=0,1,…,3(如图8所示);宏块信息在流水线阶段1中解码出来。
2)在流水线阶段1完成左边宏块寄存器组信息的更新;
在流水线阶段1完成当前宏块信息的解码后,将解码的当前宏块信息,读取到寄存器组J(0)中,同时寄存器组数据左移。即J(0)的数据移到J(1),J(1)的数据移到J(2),依此类推;
3)对流水线阶段3寄存器组指针的设置与更新具体包括以下步骤;
a)对流水线阶段3设置一个寄存器组指针,该指针用于保存寄存器组的索引值i;
其起始指针指向J(0)的寄存器组;
b)每当流水线阶段1完成一个当前宏块的解码操作后,该指针向左加一;
c)每当流水线阶段3完成一个当前宏块的解码操作后,该指针向右减一。
机译: IDWT的两阶段流水线和缓冲区管理方法用于卷积产品的再利用,能够通过两阶段流水线操作来提高性能
机译: 基于与重复数据删除流水线中不同阶段相关的负载信息的重复数据删除方法和系统
机译: 用于基于流水线阶段暂停处理器并提供状态可见性的方法和设备