H.264/AVC支撑3种图画编码形式:帧形式、场形式和宏块自适应帧场(MBAFF)形式。在帧形式下,1幅图画被划分红由16×16宏块组成的帧;H.264是一种高性能的视频编解码技能。现在世界上拟定视频编解码技能的安排有两个,一个是“世界电联(ITU-T)”,它拟定的规范有H.261、H.263、H.263+等,另一个是“世界规范化安排(ISO)”它拟定的规范有MPEG-1、MPEG-2、MPEG-4等。H.264最大的优势是具有很高的数据紧缩比率,在平等图画质量的条件下,H.264的紧缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。本文将讨论在解码的过程中MBAFF形式在P帧和B帧的帧间猜测算法和硬件规划。
1 帧间猜测技能
帧间猜测是运用视频图画帧间的相关性,即时刻相关性,来到达图画紧缩的意图,广泛用于一般电视、会议电视、视频电话、高清晰度电视的紧缩编码。在图画传输技能中,活动图画特别是电视图画是重视的首要目标。活动图画是由时刻上以帧周期为距离的接连图画帧组成的时刻图画序列,它在时刻上比在空间上具有更大的相关性。大多数电视图画相邻帧间细节改变是很小的,即视频图画帧间具有很强的相关性,运用帧所具有的相关性的特色进行帧间编码,可获得比帧内编码高得多的紧缩比。在解码时,解码器只需求选用相同的算法先猜测出运动矢量的猜测值MVp,然后将其与残差MVd相加便能够康复出运动矢量的实践值MV[1]供运动补偿运用。MVp[1]取决于运动补偿的尺度和附近MV的有无。
在帧间猜测形式下,宏块有16×16、16×8、8×16、8×8、8×4、4×8、4×4这7种运动矢量的切割办法。为便利描绘,把参阅宏块相应切割的运动矢量命名为MVLXN[2],参阅索引命名为refIdxLXN,当时宏块切割的运动矢量MVpLX[2]便是经过MVLXN和refIdxLXN猜测得到的。图1所示为非MBAFF形式时当时宏块切割为16×16的状况,E为当时宏块或宏块切割,A、B、C别离为E的左、上、右上方的3个相对应切割块。因为人眼对图画中停止或活动慢的部分,要求有较高的空间分辨率,而对时刻分辨率的要求可低些。这种办法叫帧重复办法,广泛应用于视频电话、视频会议系统中,其图画帧速率一般为1~15帧/秒。
1.1 猜测运动矢量MVp的核算
在宏块切割为16×16、8×8、8×4、4×8和4×4时,运动矢量的猜测值是由参阅宏块切割A、B、C的运动矢量核算得到的:
(1)假如切割B和C不行用,而切割A可用,则会对MVLXB、MVLXC、refIdxLXB、refIdxLXC从头赋值:MVLXB=‘MVLXA、MVLXC=MVLXA、refIdxLXB=refIdxLXA、refIdx-LXC=refIdxLXA。
(2)依据refIdxLXA、refIdxLXB和refIdxLXC的取值核算mvpLX:
①假如切割A、B、C的参阅索引refIdxLXA、 refIdxLXB或refIdxLXC中的一个等于当时切割的索引号refIdxLX,则当时切割的矢量猜测值由相应切割的运动矢量得到:MVpLX=mvLXN。
②假如切割A、B、C的参阅索引refIdxLXA、 refIdxLXB或refIdxLXC都不等于当时切割的索引号refIdxLX,则经过取A、B、C的运动矢量中值得到:
MVpLX[0]=Median(MVLXA[0],MVLXB[0],MVLXC[0])
MVpLX[1]=Median(MVLXA[1],MVLXB[1],MVLXC[1])
运动矢量的猜测在当时宏块切割为16×8和8×16的时分会先做如下的判别,假如不满足则经过上述取中值的办法得到猜测值:
(1)关于1个宏块被切割成2个16×8子宏块的状况
①核算mbPartIdx等于0的子宏块如图2(a)所示。假如refIdxLXB等于当时切割的refIdxLX,则当时块的矢量猜测值由B宏块的相应切割的矢量得到:MVpLX= MVLXB。
②核算mbPartIdx等于1的子宏块如图2所示,假如refIdxLXA等于当时切割的refIdxLX,则当时块的矢量猜测值由A宏块的相应切割的矢量得到:MVpLX=MVLXA。
(2)关于1个宏块被切割成2个8×16子宏块的状况:
①核算mbPartIdx等于0的子宏块如图2(b)所示。假如refIdxLXA等于当时切割的refIdxLX,则当时块的矢量猜测值由B宏块的相应切割的矢量得到:MVpLX=MVLXA。
②核算mbPartIdx等于1的子宏块如图2(b)所示,假如refIdxLXC等于当时切割的refIdxLX,则当时块的矢量猜测值由C宏块的相应切割的矢量得到:MVpLX=MVLXC。
1.2 参阅宏块切割的运动矢量MVLXN和参阅索引refIdxLXN的核算
在核算参阅宏块切割A、B、C的运动矢量MVLXN和参阅索引refIdxLXN之前,应先检测切割C是否可用,假如C不行用,则用切割D的信息替代。A、B、C的运动矢量MVLXN和参阅索引refIdxLXN的核算:
(1)假如宏块mbAddrN不行用或许宏块mbAddrN为帧内编码,或许mbAddrN相应切割或许子宏块切割的predFlagLX等于0,则对MVLXN置0,对refIdxLXN置-1。
(2)MVLXN为mbAddrN相应宏块切割或许子宏块切割的运动矢量,refIdxLXN为mbAddrN相应宏块切割的参阅索引值:
MVLXN=MvLX[mbPartIdxN][subMbPartIdxN]
refIdxLXN=RefIdxLX[mbPartIdxN]
(3)在MBAFF形式时,需求对MVLXN和refIdxLXN再做1次核算:
①假如当时宏块为场宏块,而mbAddrN为帧宏块,则:
MVLXN[1]=MVLXN[1]/2
refIdxLXN=refIdxLXN×2
②假如当时宏块为帧宏块,而mbAddrN为场宏块,则:
MVLXN[1]=MVLXN[1]×2
refIdxLXN=refIdxLXN/2
1.3 空间相邻参阅宏块切割的挑选
在非MBAFF形式时,当时宏块的空间相邻宏块地址A、B、C、D的方位如图3所示。空间参阅宏块mbAddrN能够是MbAddrA、MbAddrB、MbAddrC、MbAddrD或许CurrMbAddr。
在MBAFF形式时,当时宏块的空间相邻宏块地址A、B、C、D的方位如图4所示。此刻会依据当时宏块是帧宏块或许场宏块currMbFrameFlag以及当时宏块是顶宏块或许底宏块mbIsTopMbFlag来核算1个中心值mbAddrX,并依据mbAddrX的帧场信息mbAddrXFrameFlag来得到终究的参阅宏块MbAddrN。参阅宏块mbAddrN能够是MbAddrA、MbAddrA+1、MbAddrB、MbAddrB+1、MbAddrC、MbAddrC+1、MbAddrD、MbAddrD+1、CurrMbAddr或许CurrMbAddr-1。
1.4 运动矢量猜测所需数据的安排
运动矢量的猜测需求当时切割的左面、上边、左上和右上相应切割的MVLXN和refIdxLXN信息来核算得到当时切割的MVLX。1个宏块需求存储16个block的运动矢量MVLX和参阅索引refIdxLX,当选用其他切割类型时,每个切割内一切block的运动矢量和参阅索引为相同值。
帧间猜测依照block存储和运用数据。当时宏块切割的运动矢量和参阅索引需求依照block来存储以用于后边宏块的猜测。每个切割内一切block的运动矢量和参阅索引为相同值,所以参阅切割的MVLXN和refIdxLXN的引证也能够依照block来进行。
因为同一切割内一切block的运动矢量和参阅索引为相同值,因而,参阅切割的MVLXN和refIdx-LXN也便是参阅宏块相应的block的MVLX和refIdx-LX。图5(a)~(d)别离标明了当时宏块选用不同划分时A、B、C、D 4个参阅块的取值状况。在猜测时一般选取A、B、C块对当时的运动矢量进行猜测,当C不行用时则选用A、B、D进行猜测。在MBAFF形式时,因为参阅宏块的方位不同会作相应改变。H.264为了进步码率操控的才能,量化步长的改变的起伏操控在12.5%左右,而不是以不变的增幅改变。改换系数起伏的归一化被放在反量化过程中处理以削减核算的复杂性。为了着重五颜六色的逼真性,对色度系数选用了较小量化步长。2 直接猜测形式和硬件规划
H.264/AVC对运动矢量的重建引入了直接猜测形式,在该形式下运动矢量残差没有被传送,只要宏块的猜测形式会被传送。解码器依据猜测形式以及其他宏块的信息对当时的运动矢量进行康复。运动矢量的重建流程如图6所示。在直接猜测形式下,H.264别离选用3种不同的方法对运动矢量进行重建。
在从前的H.26x系列和MPEG-x系列规范中,都是选用的帧间猜测的方法。在H.264中,当编码Intra图画时可用帧内猜测。关于每个4×4块(除了边际块特别处置以外),每个像素都可用17个最接近的从前已编码的像素的不同加权和(有的权值可为0)来猜测,即此像素地点块的左上角的17个像素。明显,这种帧内猜测不是在时刻上,而是在空间域上进行的猜测编码算法,能够除掉相邻块之间的空间冗余度,获得更为有用的紧缩。
(1)仿制形式。在P类型的宏块中,运用空间上相邻切割的运动矢量对当时的运动矢量进行猜测。
(2)空间形式。在B类型的宏块中,运用空间上相邻切割的运动矢量对当时的运动矢量进行猜测。
(3)时刻形式。在B类型的宏块中,经过将时刻上相邻并且在空间上方位相同的8×8切割的运动矢量进行重量化来猜测出当时的运动矢量。
其间仿制形式和空间形式在算法上具有必定的相似性,不同在于仿制形式只需求重建1个方向的运动矢量,而空间形式需求重建双向的运动矢量。
2.1 空间形式及仿制形式重建算法和硬件规划
在这2种形式下:(1)宏块只能划分红1个16×16切割或许4个8×8切割。在划分红4个8×8时,每1个8×8切割能够独登时被设置成直接形式或许ReadMV形式;(2)核算当时的运动矢量需求凭借在空间上相邻切割的运动矢量来对当时切割的运动矢量进行重建。此刻运动矢量的猜测算法与前面介绍的猜测运动矢量的算法根本相同,所不同的是此刻宏块中的恣意1个切割猜测时所运用的相邻块信息均由图7所示的A、B、C、D 4个块猜测。
Direct 8×8用A、B、C、D 4个块进行猜测。猜测的根本算法流程如图8所示。由图可见,在猜测时首要检测参阅块C是否可用,如不行用,则C块的参数用D块的参数替代;然后运用A、B