背景技术
H.264/AVC是最新的视频编码国际标准。新的视频编码国际标准采用了许多新的编码技术,如基于上下文的变长编码(CAVLC),更高精度的运动矢量预测,可变块大小运动预测与补偿,intra预测,整型变换等,与MPEG-4视频编码国际标准相比,编码效率提高了一倍。
运动补偿的方法是,对于当前帧图像一个宏块(16X16的象素块)解码时,根据运动矢量,从片外参考帧图像存储器中调入相应的预测块象素值并对预测块象素值进行数据缓存;根据运动矢量分象素的位置,对数据缓存中的预测块象素值,进行分象素精度插值(包括1/4象素精度插值和1/2象素精度插值),共有16个象素插值点,其中有1个整象素点G和15个分象素点(a,b,c,d,e,f,g,h,i,j,k,n,p,q,r),如图1所示。采用运动矢量分象素指向位置的插值点的值作为当前解码象素块的运动预测值。
在H.264/AVC中,分象素精度为1/4。其中半象素的插值滤波器为6-tap的Wiener滤波器,1/4象素为双线性滤波器。1/4象素精度相对于1/2象素精度,使编码效率提高10-12%。
在H.264/AVC中,支持象素块大小为16x16到4x4的7种块大小的预测模式,如图1所示。最小的块大小单元是4x4,以更好的匹配图像的纹理细节。采用7种块大小的预测模式,相对于只采用16x16块大小的预测模式,使编码效率提高了15-18%。
目前运动补偿引入分象素精度插值和可变块大小的预测模式,提高了编码效率,也进一步的增加了运动补偿的计算量和硬件实现的复杂度。
上述运动补偿方法的硬件实现的复杂度主要体现在以下的两个方面:
1、从参考帧图像中,调入预测块象素值时,6-tap的插值滤波器和可变的块大小的引入,增加了调入参考块所需的带宽。在可变块大小的运动补偿中,最小块单元是4x4,对于预测块象素值的调入,最直接的方法将宏块分解为16个4x4块,根据每个4x4块来调入参考数据。每个4x4块需要调入大小为9x9的参考块数据。这种数据缓存方法在处理上最直接,但是所需的存储器带宽大,使存储器带宽成为设计的瓶颈。
2、数据缓存中的数据不能有效复用,使用不灵活。
发明内容
本发明的目的是为克服现有技术的不足,解决上面的两个问题,提出一种新的可变块大小运动补偿的数据缓存方法及其实现装置,采用该数据缓存方法,可根据每个宏块的宏块类型和运动矢量,确定需要调入的数据的最小集,可有效的复用宏块内和相邻宏块之间在水平方向和垂直方向的重叠数据,并能灵活地使用缓存中的数据。该装置可减小片外存储器的带宽。
本发明提出的一种可变块大小运动补偿的数据缓存方法,其特征在于,包括以下步骤:
1)根据宏块分割类型和插值点类型,以及各子块的运动矢量,对每个宏块,确定一个最小参考块象素集;
2)对最小参考块象素集采用标志位、行起始地址和行终止地址进行标定;
3)根据最小参考块象素集的标定,生成地址序列,读取最小参考块象素集的数据;
4)将读取的最小参考块象素集的数据按照映射规则存储在片上数据缓存区。
本发明的效果
本发明提出的可变块大小运动补偿的数据缓存方法,其特点是根据每个宏块的宏块分割类型和插值点类型,以及各个子块的运动矢量,确定需要调入的数据的最小参考块象素集,通过复用宏块内和相邻宏块之间在水平方向和垂直方向上的重叠数据,可有效的避免重复数据的调入,减小了片外存储器的带宽。在参考块数据缓存器中,采用多个存储器模块并行,通过直接映射和逻辑地址到物理地址的映射,能够实现循环寻址,灵活的数据读写,且具有字节寻址能力。
具体实施方式
本发明提出可变块大小运动补偿的数据缓存方法结合附图及实施例详细说明如下:
本发明的可变块大小运动补偿的数据缓存方法,如图3所示,包括以下步骤:
1)根据宏块分割类型和插值点类型,以及各子块的运动矢量,对每个宏块,确定一个最小参考块象素集;
2)对最小参考块象素集采用标志位、行起始地址和行终止地址进行标定(例如标志位为1bit);
3)根据最小参考块象素集的标定,生成地址序列,读取(调入)最小参考块象素集的数据;
4)将读取的最小参考块象素集的数据按照映射规则存储在片上数据缓存区。
下面以H.264/AVC为例,来给出具体实施方式。
本实施例的数据缓存方法包括以下步骤:
1)根据宏块分割类型和插值点类型,以及各子块的运动矢量,对每个宏块,确定一个最小参考块象素集;具体实施步骤包括:
11)根据H.264/AVC给出的运动矢量,将16个象素插值点分为四种插值点类型,分别为类型0,类型1,类型2,类型3,如表2所示;
表2
|
Positions |
Type0 |
G |
Type1 |
a,b,c |
Type2 |
d,h,n |
Type3 |
e,g,p,r,f,j,q,i,k |
12、根据宏块分割类型和插值点类型,来确定需要调入的参考象素块的大小,对于类型0,参考象素块大小为MxN;对于类型1,参考象素块大小为Mx(N+5);对于类型2,参考象素块大小为(M+5)xN;对于类型3,参考块大小为(M+5)x(N+5),其中M、N均为16,其参考象素块大小为如表3所示。
表3按照宏块分割类型和插值点分类需要调入的参考块大小
13、得到最小参考块象素集,在最小参考块象素集中相邻子块的参考象素块数据块在水平方向和垂直方向上复用重叠的数据;
如图4所示,最小参考块象素集41由宏块分割类型和插值点类型,以及各子块的运动矢量确定。在同一个宏块中的相邻子块1、2、3、4(如浅灰色阴影部分40所示)的参考象素数据块I,II,III,IV(如粗实线框所示)在水平方向和垂直方向上复用重叠的数据(如深灰色阴影部分所示)。这样,最小参考块象素集41中象素块数据可以实现水平和垂直复用(如深灰色阴影部分所示)。
2)对最小参考块象素集进行标定;
设定一个大小为HxV(H>=32,V>=32,例如32x32或者64x32)的逻辑缓存区,其中H为列象素数据列数,V为行象素数据行数。H列象素数据分为H/N列字长数据,其中,N为片外存储器的字长。本实施例中,片外存储器的字长为4bytes。宏块的最小参考块象素集在逻辑缓存区的范围之内。
如图5所示,黑实线框部分为最小参考块象素集。在水平方向,每个字长数据列由1bit标志位确定(如为0,表示该列没有最小参考块象素集数据;如为1,表示该列有最小参考块象素集数据(如Coli,Coli+1,Coli+2,Coli+3));在垂直方向,由行起始地址和行终止地址确定最小参考块象素集数据。当该列有最小参考块象素集数据时,将该列最小参考块象素集行起始地址和最小参考块象素集行终止地址存储在寄存器中。
3)根据最小参考块象素集的标定(1bit标志位,行起始地址和行终止地址),生成地址序列,调入最小参考块象素集的数据;
即:根据每一列字长数据的1bit标志位,以及该列字长数据的行起始地址和行终止地址,生成该列字长数据的地址序列,根据该地址序列,从片外参考帧存储器中读取最小参考块象素集的象素值。
4)将读取的最小参考块象素集按照映射规则存储在片上数据缓存区;
41、设定片上数据缓存区的存储器个数为B(B由需要的并行度来决定,在本实施例种,B为16),BxB大小的象素块为基本块;首先将步骤3生成的地址直接映射为逻辑数据缓存区地址;
设步骤3)生成的地址为(x,y),在HxV逻辑数据缓存区中的逻辑地址为(Lx,Ly),0≤Lx<H,0≤Ly<V,他们之间的映射规则可用下面的公式来表示:
Lx=x%H
Ly=y%V
42)然后再将逻辑缓存区逻辑地址(Lx,Ly)映射为片上数据缓存区的物理地址(b,A),其中b是存储器模块的索引,A是所在的存储器模块的物理地址。其映射规则为:
b=Lx%B
A=Lx//B*V+Ly
43)根据最后生成的片上数据缓存区物理地址,将读取的最小参考块象素集数据存储到片上数据缓存区。
本发明提出的实现上述方法的可变块大小运动补偿的数据缓存装置的结构,如图6所示。包括以下的模块:
最小参考块象素集标定模块;用于根据宏块分割类型和插值点类型,以及各子块的运动矢量,来生成最小参考块象素集;
地址生成模块:用于根据最小参考块象素集的标定(1bit标志位,行起始地址和行终止地址),生成片外参考帧存储器地址。并通过外部存储器控制接口给片外参考帧存储器;
参考帧存储器:用于存储参考帧数据。
参考帧象素块数据缓存器:用于通过外部存储器控制接口存储从片外参考帧存储器中读取的最小参考块象素集的象素值。
本实施例的参考帧象素块数据缓存器结构如图7所示,包括以下模块:B个存储器模块(在该实施例中,设定B为16),输入地址调整单元,输入数据调整单元。
B个存储器模块用于存储参考帧象素块数据。
输入地址调整单元,将对应于参考帧的地址转换成片上数据缓存存储器的物理地址,将转换后的物理地址输入到B个存储器模块中;该转换包括两个映射:
映射1、将对应于参考帧的地址直接映射为逻辑数据缓存区地址;
设对应于参考帧的地址为(x,y),在HxV逻辑数据缓存区中的逻辑地址为(Lx,Ly),0≤Lx<H,0≤Ly<V,他们之间的映射规则可用下面的公式来表示:
Lx=x%H
Ly=y%V
映射2、将逻辑缓存区逻辑地址(Lx,Ly)映射为片上数据缓存存储器的物理地址(b,A);
其映射规则为:
b=Lx%B
A=Lx//B*V+Ly
其中b是存储器模块的索引,A是所在的存储器模块的物理地址;
输入数据调整单元,用于将从片外参考帧存储器中读取的最小参考块象素集的象素值,移位到对应的存储器模块的位置。