王 佳,殷海兵,周冰倩
(中國計量學院信息工程學院,浙江 杭州 310018)
碼率控制算法是在碼率受限的條件下,通過動態調整編碼參數來優化視頻質量。假如沒有進行碼率控制,當通過有限的信道帶寬傳送壓縮的比特流時,緩沖區就會上溢或者下溢。在視頻編碼標準中,有幾種碼率控制算法已經被推薦作為參考算法,比如MPEG-2的TM5、H.263的TMN8、MPGE-4的VM8、H.264AVC 的G012 以及一些改進算法[1-2]。
目前,大多數碼率控制算法是基于軟件實現的,且太過復雜而不能很好地適合硬件實現。對于一些MPEG-2或H.263的碼率控制算法已經有人提出了硬件實現方案[3]。針對H.264/AVC提出的碼率控制算法參考提案G012更為復雜,其直接硬件實現需要大量的門電路。而對于那些已經提出的,并且需要388.53—1 140 k門電路的H.264/AVC視頻編碼器來說,G012的硬件消耗非常大。Wu等人[4]提出了一種適合硬件實現的碼率控制算法。本文在H.264/AVC編碼器Zigzag宏塊編碼順序和宏塊級流水結構的基礎上,利用時域和頻域的相關性,提出了新的低復雜度MAD預測算法,解決了硬件實現時的數據依賴問題。
通常硬件編碼器的實現面臨兩個問題,數據吞吐和存儲帶寬。為了提高數據處理效率,硬件編碼器通常采用Zigzag宏塊順序和宏塊級流水結構,二者結合導致碼率控制算法實現時產生復雜的數據依賴關系。并且G012算法MAD預測模塊的高復雜度會消耗大量的硬件資源。
硬件編碼器為了實現數據的水平和垂直復用,通常采用Zigzag[5]宏塊編碼順序代替軟件實現時的光柵掃描順序。編碼順序的改變導致數據的水平和垂直的依賴關系有所改變,如圖1所示,每3個宏塊行采用Zigzag宏塊編碼順序。
H.264/AVC硬件編碼器宏塊級通常采用3級或者4級的流水結構。如圖2所示,在宏塊流水開始前,通過碼率控制(RC)模塊獲取Qp,依次經過整像素運動估計(IME),亞像素運動估計/幀內預測(FME/INTRAL),熵編碼/去塊效應濾波(EC/DB)3級流水[6]。故編碼MBn宏塊時,MAD值只能依賴于MBn-2及之前已編碼的宏塊預測得到。


在H.264/AVC的碼率控制算法G012中,采用線性預測的方法計算MAD,公式為

式中:參數a1和a2采用線性回歸的方法進行更新。
參數a1和a2的計算如公式[4]為

其計算復雜度很高,如果直接采用硬件實現,會消耗大量的硬件資源。
根據上文提及的硬件編碼器實現的特點和挑戰,該改進碼率控制算法結構如圖3所示。幀級采用G012算法,然后通過宏塊自適應調整模塊和Qp決策模塊對得到每個宏塊的量化參數。Zigzag編碼條件下幀級和宏塊級碼率控制如圖3所示。從圖中可知,在Zigzag條件下,G012算法幀級碼率控制率失真性能好于宏塊級碼率控制,同時也說明了G012幀級碼率控制獲取的Qp是相對準確的。并且考慮到硬件實現的數據吞吐和存儲帶寬問題,基于CPU的幀級碼率控制的實現每幀只需通過總線與編碼器交互1次數據,對如高清編碼器可以大大降低數據吞吐。圖4中陰影部分模塊是本文重點改進的部分,幀級和宏塊級MAD預測,宏塊量化參數自適應調整模塊,如后文中的式(4),(5),(6),(7)所示。


由于幀內宏塊的復雜度不同,根據觀察部分宏塊MAD值相差很大,故通過宏塊自適應模塊更加精細地調整量化參數,而不產生視頻質量的波動,同時降低緩沖區的波動。公式(4)中QPM[i]為當前幀的幀級量化參數,QPU[i]和 QPL[i]分別表示自適應調整值,二者相差不超過2。公式(5)計算幀級MAD預測值(MADP,F)和宏塊級MAD預測值(MADP,M)的MADratio值。最后通過公式(6)計算宏塊量化參數,其中a,b通過Matlab計算分別得到1.217 3和0.816 0。為了適合硬件的移位計算,近似規整為a等于155/128,b等于105/128。

2.2.1 幀級MAD預測
為了降低G012碼率控制算法中MAD線性預測部分參數更新的復雜度,本文幀級MAD直接采用前3幀MAD(n-1),MAD(n-2),MAD(n-3)來預測當前幀MAD(n)的值。根據 Matlab計算得到 a,b,c分別為1.054 4,0.053 0,0.109 5,規整后分別為 135/128,7/128,15/128。Foreman,Carphone,Miss,News測試序列 MAD 預測值和實際值如圖5所示,預測誤差如表1所示。


圖5 Foreman,Carphone,Miss,News 的 MAD 值預測

表1 MAD預測誤差
2.2.2 宏塊級MAD預測
由于Zigzag宏塊編碼順序和宏塊流水結構產生數據依賴關系,并考慮到周圍宏塊和當前編碼宏塊MBC的相關性,選擇當前編碼宏塊的上方宏塊MBU和左邊宏塊MBL,如圖6所示。其中陰影表示前1編碼幀相對位置的宏塊。采用這4個宏塊的MAD值,并考慮到邊界情況和3級流水特性,來預測MBC的MAD值。預測流程圖如圖7所示,其中加權系數通過Matlab計算得到,a,b,c分別為3/4,7/8,4/5。


本算法基于JM10.2參考模型,搭建每3個宏塊行采用Zigzag宏塊編碼順序和宏塊流3級水模型,在該模型上仿真本文提出的碼率控制算法。分別在60 kbit/s,80 kbit/s,100 kbit/s,120 kbit/s 目標碼率下測試了低速News序列,高速Foreman和Carphone序列,以及復雜序列Mobile。實驗結果如圖8和表2所示。經計算,本文提出的算法平均PSNR提高了0.12 dB,幀級MAD預測精度也有所提高,解決了硬件實現時的數據依賴問題,且適合硬件實現。

圖8 Foreman,Carphone,News,Mobile 序列率失真曲線

表2 本文算法與G012算法實驗結果對比
[1]呂振斌,王惠南.一種H.264基本單元層的碼率控制算法[J].電視技術,2009,33(S1):45-47.
[2]程飛,鄒雪妹,滕國偉,等.一種宏塊級碼率控制方案[J].電視技術,2010,34(6):23-25.
[3] CHEN T,CHIEN S,HUANG Y,et al.Analysis and architecture design of an HDTV 720p 30 frames/s H.264/AVC encoder[J].IEEE Trans.CSVT,2006,16(6):673-688.
[4] WU P T,CHANG T C,SU C L,et al.A H.264 basic-unit level rate control algorithm facilitating hardware realization[C]//Proc.ICASSP 2008.[S.l.]:IEEE Press,2008:2185-2188.
[5] CHEN C,HUANG C,CHEN Y,et al.Level C+data reuse scheme for motion estimation with corresponding coding orders[J].IEEE Trans.CSVT,2006,16(4):553-558.
[6] KUO C,CHANG L,FAN K,et al.Hardware/software codesign of a lowcost rate control scheme for H.264/AVC[J].IEEE Trans.CSVT,2010,20(2):250-261.