王 佳,殷海兵,周冰倩
(中國(guó)計(jì)量學(xué)院信息工程學(xué)院,浙江杭州310018)
碼率控制算法是在碼率受限的條件下通過動(dòng)態(tài)的調(diào)整編碼參數(shù)來優(yōu)化視頻質(zhì)量。假如沒有進(jìn)行碼率控制,當(dāng)通過有限的信道帶寬傳送壓縮的比特流時(shí)緩沖區(qū)就會(huì)上溢或者下溢。在視頻編碼標(biāo)準(zhǔn)中,有幾種碼率控制算法已經(jīng)被推薦作為參考算法,比如MPEG-2的TM5、H.263的TMN8、MPGE-4的VM8、H.264AVC的G012。一些MPEG-2或H.263的碼率控制算法已經(jīng)有人提出了硬件實(shí)現(xiàn)方案[1]。對(duì)如H.264/AVC,它的碼率控制算法參考提案G012更為復(fù)雜,其直接硬件實(shí)現(xiàn)需要大量的門電路[2]。對(duì)如H.264/AVC視頻編碼器來說,G012的硬件消耗是非常大的,針對(duì)硬件實(shí)現(xiàn)的特點(diǎn)提出了一種適合硬件實(shí)現(xiàn)的碼率控制算法[3]。本文在H264/AVC編碼器Zig-zag宏塊編碼順序和宏塊級(jí)流水結(jié)構(gòu)的基礎(chǔ)上,利用時(shí)域和頻域的相關(guān)性,提出了一種新的低復(fù)雜度MAD預(yù)測(cè)算法,解決了硬件實(shí)現(xiàn)時(shí)的數(shù)據(jù)依賴問題。
通常硬件編碼器的實(shí)現(xiàn)面臨著兩個(gè)問題,數(shù)據(jù)吞吐和存儲(chǔ)帶寬。為了提高數(shù)據(jù)處理效率硬件編碼器通常采用Zigzag宏塊順序,宏塊級(jí)流水結(jié)構(gòu)。兩者的結(jié)合導(dǎo)致碼率控制算法實(shí)現(xiàn)時(shí)復(fù)雜的數(shù)據(jù)依賴關(guān)系。并且G012算法MAD預(yù)測(cè)模塊的高復(fù)雜度會(huì)消耗大量的硬件資源。
硬件編碼器為了實(shí)現(xiàn)數(shù)據(jù)的水平和垂直復(fù)用,通常采用Zig-zag[4]宏塊編碼順序代替軟件實(shí)現(xiàn)時(shí)的光柵掃描順序。編碼順序的改變導(dǎo)致數(shù)據(jù)的水平和垂直的依賴關(guān)系改變,如圖1所示,每3個(gè)宏塊行采用Zig-zag宏塊編碼順序。
通常情況下,H.264/AVC硬件編碼器宏塊級(jí)通常采用3級(jí)或者4級(jí)的流水結(jié)構(gòu)。如圖2所示,在宏塊流水開始前,通過碼率控制(RC)模塊獲取Qp,依次經(jīng)過整象素運(yùn)動(dòng)估計(jì)(IME),亞象素運(yùn)動(dòng)估計(jì)/幀內(nèi)預(yù)測(cè)(FME/INTRAL),熵編碼/去塊效應(yīng)濾波(EC/DB)3級(jí)流水[3]。
圖1 每3個(gè)宏塊行的Zig-zag宏塊編碼順序
圖2 3級(jí)宏塊流水結(jié)構(gòu)
H.264/AVC的碼率控制算法G012中,采用線性預(yù)測(cè)的方法計(jì)算MAD:
式中,兩個(gè)參數(shù)a1和a2采用線性回歸的方法進(jìn)行更新。參數(shù)a1和a2的計(jì)算如下所示[3],計(jì)算復(fù)雜度很高,直接采用硬件實(shí)現(xiàn),會(huì)消耗大量的硬件資源。
針對(duì)Zigzag宏塊編碼順序和宏塊流水結(jié)構(gòu)所產(chǎn)生的數(shù)據(jù)依賴問題,以及MAD線性預(yù)測(cè)參數(shù)更新的高復(fù)雜度,提出了一種利用時(shí)域和空域相關(guān)性來預(yù)測(cè)當(dāng)前編碼宏塊MAD值。如圖3所示,當(dāng)前編碼宏塊MB(n,i),MB(n-1,i)為前一幀相同位置宏塊,MBU和MBL分別當(dāng)前編碼宏塊上方和左邊宏塊,MBA、MBB和MBC位置依次如圖3所示。由于每3個(gè)宏塊行采用Zigzag宏塊編碼順序的特殊性,當(dāng)前編碼宏塊只有上方和左邊已編碼宏塊可以用來進(jìn)行預(yù)測(cè)。根據(jù)觀察和數(shù)據(jù)分析,MBL和MBU已經(jīng)前一幀相同位置MB(n-1,i)的相關(guān)性最大,可以直接采用這3個(gè)已編碼宏塊來預(yù)測(cè)當(dāng)前宏塊值。綜合考慮3級(jí)宏塊流水結(jié)構(gòu)和邊界情況,具體MAD預(yù)測(cè)流程如圖4所示,其中w1和w2的值為7/8和3/4,。
圖3 當(dāng)前預(yù)測(cè)宏塊和周圍宏塊
圖4 MAD預(yù)測(cè)流程圖
本次實(shí)驗(yàn)基于JM10.2參考模型,改變宏塊編碼的光柵掃描順序?yàn)槊?個(gè)宏塊行的Zigzag編碼順序,然后進(jìn)行碼流重排,并仿真本文提出的低復(fù)雜度MAD預(yù)測(cè)算法。測(cè)試序列分別為低速運(yùn)動(dòng)序列“News”,高速運(yùn)動(dòng)序列“Foreman”和“Carphone”,復(fù)雜序列“Mobile”。測(cè)試碼率分別為 60,80,100,120kbps。實(shí)驗(yàn)結(jié)果如表1,圖5所示。
表1 實(shí)驗(yàn)結(jié)果對(duì)比
表1、圖5中,在相同的碼率條件下可以保持與G012相同的PSNR,視頻質(zhì)量沒有降低,但MAD預(yù)測(cè)部分復(fù)雜度大大降低。如表2所示,其中n表示一幀中的宏塊數(shù)目,與原始算法G012相比,Zig-zag編碼情況下MAD預(yù)測(cè)部分復(fù)雜度降低了92%,并解決了數(shù)據(jù)依賴問題,適合硬件實(shí)現(xiàn)。
圖5 Foreman和Carphone測(cè)試序列率失真曲線
表2 算法復(fù)雜度對(duì)比
[1] ChenChing-Yeh,Huang Chao-Tsung,Chen Yi-Hau,etal.Level C+Data Reuse Scheme for Motion Estimation With Corresponding Coding Orders[J].IEEE Transactions on CSVT,2006,16(4):553 -558.
[2] Chang Hsiu-Cheng,Chen Jia-Wei,Su Ching-Lung,etal.A 7mw to 183mw dynamic quality-scalable H.264 video encoder chip[C].San Francisco:IEEE International Conference,2 007:280 -603.
[3] Kuo Chih-Hung,Chang Li-Chuan,F(xiàn)an Kuan-Wei,etal.Hardware/Software Codesign of a Low-Cost Rate Control Scheme for H.264/AVC[J].IEEE Transactions on CSVT,2010,20(2):250 -261.
[4] Wu Ping-Tsung,Chang Tzu-Chun,Su Ching-Lung,etal.A H.264 basic-unit level rate control algorithm facilitating hardware realization[C].Las Vegas:IEEE International Conference,2008:2 158 -2 188.
[5] Yin Hai bing,Qi Hong gang,Jia Huizhu,etal.Efficient Macroblock Pipeline Structure in High Definition AVS Video Encoder VLSI Architecture[C].Paris:IEEE International Conference,2010:669 -672.