張亞運(yùn),孟李林,景博利
(西安郵電大學(xué) 電子工程學(xué)院,陜西 西安 710061)
?
H.264解碼器的幀內(nèi)預(yù)測優(yōu)化
張亞運(yùn),孟李林,景博利
(西安郵電大學(xué) 電子工程學(xué)院,陜西 西安710061)
摘要通過對(duì)H.264幀內(nèi)預(yù)測加以優(yōu)化,以提高其速度。采用4×4塊級(jí)流水線方式代替串行處理方式,以及自適應(yīng)的流水線協(xié)調(diào)不同種類塊、不同預(yù)測模式下的幀內(nèi)預(yù)測,用四路并行的多功能處理單元在1個(gè)周期內(nèi)計(jì)算出1列4個(gè)像素點(diǎn)的預(yù)測值;以“種子”法取代平面預(yù)測模式的直接計(jì)算方式。基于FPGA開發(fā)平臺(tái)設(shè)計(jì)出優(yōu)化后的預(yù)測電路,驗(yàn)證結(jié)果表明,優(yōu)化電路處理一個(gè)宏塊平均只需196個(gè)時(shí)鐘周期。
關(guān)鍵詞H.264;流水線;幀內(nèi)預(yù)測;多功能處理單元
H.264視頻壓縮編碼標(biāo)準(zhǔn)具有較高的壓縮效率[1],但計(jì)算復(fù)雜度相比于上一代視頻壓縮編碼標(biāo)準(zhǔn)H.263增加了10倍以上,編解碼時(shí)間也成倍增加。另外,H.264視頻壓縮編碼標(biāo)準(zhǔn)所處理的視頻圖像局限在1 920×1 080分辨率之內(nèi),要支持更高分辨率的視頻圖像,就必須提高解碼器的解碼效率。對(duì)H.264幀內(nèi)預(yù)測算法進(jìn)行優(yōu)化,就是解決此問題的途徑之一。
H.264幀內(nèi)預(yù)測算法[2]利用空間的相關(guān)性,根據(jù)當(dāng)前宏塊的相鄰已解碼參考像素及幀內(nèi)預(yù)測模式,對(duì)當(dāng)前宏塊的待預(yù)測像素點(diǎn)進(jìn)行幀內(nèi)預(yù)測計(jì)算。
為提升解碼效率,可考慮以加法器、數(shù)據(jù)選擇器、寄存器為基礎(chǔ),通過控制接口來重復(fù)使用H.264幀內(nèi)預(yù)測硬件結(jié)構(gòu)[3]。也可采用基于4×4子塊的并行方法,找出符合并行計(jì)算的新預(yù)測順序,以避免數(shù)據(jù)依賴問題,提高系統(tǒng)運(yùn)算速度[4],或可采用流水線的辦法對(duì)硬件結(jié)構(gòu)進(jìn)行優(yōu)化,以提高數(shù)據(jù)吞吐量[5]。不過,這些優(yōu)化方法僅局限于對(duì)硬件結(jié)構(gòu)的改變。
本文擬對(duì)幀內(nèi)預(yù)測硬件結(jié)構(gòu)及其算法進(jìn)行雙重優(yōu)化,即采用4×4塊級(jí)流水線方式代替串行處理方式,用自適應(yīng)的流水線協(xié)調(diào)不同種類塊及不同預(yù)測模式下的幀內(nèi)預(yù)測,利用4路并行的多功能處理單元在1個(gè)周期內(nèi)計(jì)算出1列4個(gè)像素點(diǎn)的預(yù)測值,采用“種子”法取代平面預(yù)測模式的直接計(jì)算方式,以求提高幀內(nèi)預(yù)測電路的處理速度。
1硬件結(jié)構(gòu)優(yōu)化
對(duì)幀內(nèi)預(yù)測算法的硬件結(jié)構(gòu)采用4×4塊級(jí)流水線及4×4塊自適應(yīng)流水線兩種不同的流水線設(shè)計(jì)。4×4塊級(jí)流水線設(shè)計(jì)將每個(gè)宏塊拆分為24個(gè)4×4塊,4×4塊作為最小的處理單元。4×4塊自適應(yīng)流水線主要對(duì)幀內(nèi)預(yù)測的參考像素準(zhǔn)備及計(jì)算進(jìn)行流水線處理,可根據(jù)預(yù)測模式、塊大小、塊類型的不同選擇相應(yīng)的時(shí)鐘周期,以節(jié)約處理周期。
設(shè)計(jì)一種多功能處理單元(Multifunction Processing Element,MFPE)實(shí)現(xiàn)全部13種幀內(nèi)預(yù)測模式下的運(yùn)算,以節(jié)約邏輯單元數(shù)量,避免資源浪費(fèi)。
1.1流水線
每個(gè)宏塊可分解為16個(gè)4×4亮度子塊和8個(gè)4×4色度子塊。如圖1所示,通過每個(gè)亮度、色度4×4子塊的預(yù)測模式及其相應(yīng)的參考像素完成幀內(nèi)預(yù)測,得到相應(yīng)的幀內(nèi)預(yù)測結(jié)果。隨后通過流水線同步器的同步控制將預(yù)測結(jié)果與殘差塊相加得到當(dāng)前4×4子塊的重建值,重建塊中與下一待預(yù)測塊相鄰的像素點(diǎn)作為待預(yù)測塊的參考像素點(diǎn)。
與16×16宏塊級(jí)流水線相比,4×4塊級(jí)流水線可與H.264標(biāo)準(zhǔn)的最小塊匹配,可迅速完成內(nèi)容切換;需要更少的寄存器用于存儲(chǔ)中間變量。4×4塊級(jí)流水線代替了串行處理方式。
圖1 幀內(nèi)預(yù)測4×4塊級(jí)流水線
1.2多功能處理單元
4×4亮度塊的幀內(nèi)預(yù)測模式有9種,16×16亮度宏塊的幀內(nèi)預(yù)測模式有4種,色度塊的幀內(nèi)預(yù)測模式也有4種,且與16×16亮度宏塊的幀內(nèi)預(yù)測模式類似。除垂直、水平、平均預(yù)測模式類似外,其余預(yù)測模式間基本沒有相似點(diǎn),若針對(duì)每種預(yù)測模式均設(shè)計(jì)與其對(duì)應(yīng)的處理單元,會(huì)造成大量的資源浪費(fèi)。故需設(shè)計(jì)MFPE以處理不同預(yù)測模式下的幀內(nèi)預(yù)測。
如圖2所示,MFPE由4個(gè)數(shù)據(jù)輸入、1個(gè)時(shí)鐘輸入和2個(gè)數(shù)據(jù)輸出組成。輸入的參考像素點(diǎn)經(jīng)過MFPE中移位器和選擇器等的處理可得到任一預(yù)測模式下的任一待預(yù)測像素點(diǎn)的預(yù)測結(jié)果。MFPE中的內(nèi)部寄存器負(fù)責(zé)暫存一些中間產(chǎn)生的結(jié)果,供其他MFPE在下一時(shí)鐘節(jié)拍使用。
圖2 MFPE的電路結(jié)構(gòu)設(shè)計(jì)
1.3自適應(yīng)流水線
不同的待預(yù)測塊和幀內(nèi)預(yù)測模式都需要特定位置的相鄰像素點(diǎn)用于計(jì)算,而一個(gè)固定的流水線無法有效地協(xié)調(diào)整個(gè)幀內(nèi)預(yù)測過程。因此,一種自適應(yīng)的流水線可靈活處理各種情況下的運(yùn)算。通過自適應(yīng)流水線的處理,可減小平均預(yù)測延遲,提高工作頻率[6]。如圖3所示,將自適應(yīng)流水線劃分為3個(gè)步驟。加載、預(yù)計(jì)算作為前兩個(gè)步驟,其處理周期是可變的,根據(jù)當(dāng)前待預(yù)測塊及幀內(nèi)預(yù)測模式的不同選擇其相應(yīng)的處理周期。計(jì)算作為自適應(yīng)流水線處理的第3步,具有固定的4個(gè)處理周期,每個(gè)周期通過4路并行的MFPE計(jì)算出1列4個(gè)像素點(diǎn)的預(yù)測值,通過4個(gè)周期即可計(jì)算出當(dāng)前4×4塊的幀內(nèi)預(yù)測結(jié)果。下面詳細(xì)介紹流水線的3個(gè)步驟:
(1)加載。參考像素由上鄰塊最下一行像素點(diǎn)和左鄰塊最右一列像素點(diǎn)組成。由于選用存儲(chǔ)器的位寬為32位,故存取上方4×4亮度子塊最下一行4個(gè)參考像素點(diǎn)只需1個(gè)周期即可完成,存取8×8色度塊參考像素點(diǎn)在2個(gè)周期內(nèi)可完成,存取16×16亮度宏塊參考像素點(diǎn)在4個(gè)周期內(nèi)可完成。當(dāng)采用水平預(yù)測模式或上方參考像素?zé)o效時(shí),可直接將加載的周期設(shè)置為0;
(2)預(yù)計(jì)算。在進(jìn)行平面模式預(yù)測前,需提前計(jì)算出5個(gè)中間變量用于后續(xù)計(jì)算。根據(jù)當(dāng)前待預(yù)測像素在宏塊中的位置及5個(gè)中間變量可計(jì)算出預(yù)測像素值。該步驟只適用于平面預(yù)測模式,除平面預(yù)測模式以外的其他預(yù)測模式均可在流水線處理中跳過此步;
(3)計(jì)算。得到當(dāng)前4×4塊的參考像素及預(yù)測模式后,經(jīng)過4個(gè)固定的周期可計(jì)算出當(dāng)前塊的預(yù)測值。
圖3 幀內(nèi)預(yù)測自適應(yīng)流水線
2平面預(yù)測模式的算法優(yōu)化
對(duì)計(jì)算復(fù)雜度較高的平面預(yù)測模式進(jìn)行算法優(yōu)化。
除平面預(yù)測模式外,其他幀內(nèi)預(yù)測模式可直接通過相鄰像素點(diǎn)計(jì)算出預(yù)測結(jié)果,而平面預(yù)測模式需要5個(gè)中間變量H、V、a、b、c用于預(yù)測。首先計(jì)算中間變量H/V,其余中間變量可通過H/V計(jì)算得出[7]。若直接計(jì)算H/V會(huì)需要大量的乘法器,必會(huì)增加硬件的負(fù)擔(dān)。故將計(jì)算分解為加法及移位計(jì)算,如乘5可分解為(乘4+乘1),通過一個(gè)移位器和一個(gè)加法器即可實(shí)現(xiàn)計(jì)算,其余項(xiàng)的計(jì)算方式與之類似。
為降低計(jì)算復(fù)雜度,提出一種兩級(jí)“種子”法。計(jì)算出1個(gè)一級(jí)種子,通過該一級(jí)種子計(jì)算7個(gè)確定像素點(diǎn)作為二級(jí)種子。通過這8個(gè)種子算得當(dāng)前16×16亮度宏塊在平面預(yù)測模式下的預(yù)測值。兩級(jí)“種子”法的處理順序如圖4所示。
圖4 兩級(jí)“種子”法處理順序
當(dāng)前待預(yù)測亮度宏塊內(nèi)第0個(gè)4×4子塊可通過一級(jí)種子與中間變量b,c求和完成預(yù)測,第1個(gè)4×4子塊的預(yù)測值可通過其左鄰像素點(diǎn)與中間變量b求和得出,亮度宏塊內(nèi)其余子塊的預(yù)測方式與之類似。
若對(duì)平面預(yù)測模式采用H.264標(biāo)準(zhǔn)中的直接計(jì)算方式,則完成一次平面預(yù)測操作需要512次乘法操作和1 024次加法操作[8],而兩級(jí)“種子”法只需279次加法操作和13次移位操作。與直接計(jì)算方式相比,兩級(jí)“種子”法去除了所有乘法操作,減少了72.8%的加法操作,使算法得到優(yōu)化。
3設(shè)計(jì)驗(yàn)證
經(jīng)流水線、并行化處理后的幀內(nèi)預(yù)測器采用verilog HDL實(shí)現(xiàn),在Modelsim SE 10.1a下得到仿真波形,以4×4亮度幀內(nèi)預(yù)測為例對(duì)仿真結(jié)果進(jìn)行說明。如圖5所示,位于當(dāng)前圖像幀的第8行,第0列的宏塊采用4×4亮度塊幀內(nèi)預(yù)測方式,Intra4x4_predmode_CurrMb表示當(dāng)前亮度宏塊的全部16個(gè)亮度子塊的預(yù)測模式,blk4x4_sum_PE0_out~blk4x4_sum_PE3_out表示用于參考的重建像素值,可在4個(gè)周期內(nèi)得當(dāng)前宏塊第4個(gè)子塊的預(yù)測值PE0_out~PE3_out。與官方編解碼模型JM18.6的提取結(jié)果進(jìn)行比對(duì),可知該預(yù)測結(jié)果完全正確。經(jīng)過驗(yàn)證可知,幀內(nèi)預(yù)測硬件電路是完全可行的。
圖5 幀內(nèi)預(yù)測仿真結(jié)果
基于Altera公司EP4CGX110DF27C7開發(fā)平臺(tái)實(shí)現(xiàn)了硬件電路設(shè)計(jì),使用Quartus 12.0完成電路綜合,結(jié)果表明:最高工作頻率為53.44 MHz,使用了5 063個(gè)邏輯單元,631個(gè)寄存器。完成一個(gè)宏塊預(yù)測平均需要196個(gè)時(shí)鐘周期,幀內(nèi)預(yù)測電路每秒可處理272 653個(gè)宏塊。
表1為幾種幀內(nèi)預(yù)測器的性能對(duì)比。本文幀內(nèi)預(yù)測器的預(yù)測速度相比文獻(xiàn)[4]經(jīng)并行處理的幀內(nèi)預(yù)測器的預(yù)測速度提高了23%,相比文獻(xiàn)[5]經(jīng)流水線處理的幀內(nèi)預(yù)測器的預(yù)測速度提高了43%。
表1 幀內(nèi)預(yù)測器性能對(duì)比
4結(jié)束語
為降低幀內(nèi)預(yù)測算法的復(fù)雜度,提升預(yù)測效率,本文采用4×4塊級(jí)流水線與H.264視頻編碼標(biāo)準(zhǔn)的最小處理塊大小相匹配,完成塊級(jí)流水線處理;自適應(yīng)流水線減小了平均預(yù)測延時(shí),提高了工作頻率;采用4路并行的MFPE在4個(gè)周期內(nèi)即可計(jì)算得出4×4塊的幀內(nèi)預(yù)測結(jié)果;在進(jìn)行平面預(yù)測時(shí)采用兩級(jí)“種子”法,去除了乘法操作并減少了72.8%的加法操作。一系列的電路結(jié)構(gòu)及算法優(yōu)化提升了幀內(nèi)預(yù)測器的運(yùn)算速度。在FPGA開發(fā)平臺(tái)上實(shí)現(xiàn)了幀內(nèi)預(yù)測器的硬件設(shè)計(jì)及驗(yàn)證,結(jié)果表明:該幀內(nèi)預(yù)測電路的工作頻率可達(dá)53.44 MHz,完成一個(gè)宏塊平均需要196個(gè)時(shí)鐘周期,每秒可處理272 653個(gè)宏塊。
參考文獻(xiàn)
[1]朱立,成衛(wèi),甘羽,等.H.264幀內(nèi)預(yù)測模式判定快速算法研究[J].電網(wǎng)技術(shù),2012,36(7):275-280.
[2]宋云,沈燕飛,龍際珍,等.基于方向梯度的H.264幀內(nèi)預(yù)測模式選擇算法[J].計(jì)算機(jī)學(xué)報(bào),2013,36(8):1757-1764.
[3]劉西振,楊靜,王威.基于FPGA的H.264幀內(nèi)預(yù)測實(shí)現(xiàn)和優(yōu)化[J].計(jì)算機(jī)工程,2012,38(7):257-259,262.
[4]Wu Lagou,Zhang Duoli,Du Gaoming,et al.A 4×4 pipelined intra frame decoder for H.264[C].Hong Kong:Anticounterfeiting,Security,and Identification in Communication,IEEE Press,2009.
[5]Wang Xi,Cui Xiaoxin,Yu Dunshan.A parallel intra prediction architecture for H.264 video decoding[C].Changsha:IEEE 8th International Conference on ASIC,IEEE Press,2009.
[6]徐平,余青山,金朝陽,等.基于時(shí)空預(yù)測的H.264快速幀內(nèi)預(yù)測模式選擇算法[J].通信學(xué)報(bào),2010,31(9):139-145.
[7]唐浩漾,王曙光.一種改進(jìn)的H.264幀內(nèi)預(yù)測模式選擇算法[J].西安郵電大學(xué)學(xué)報(bào),2014,19(5):46-50.
[8]汪大勇,孫世新,楊潔淼,等.適合于空間可伸縮編碼的幀內(nèi)快速算法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2010,22(11):1959-1965.
Optimization of Intra-prediction for H.264 Decoder
ZHANG Yayun,MENG Lilin,JING Boli
(School of Electronic Engineering,Xi’an University of Posts and Telecommunications,Xi’an 710061,China)
AbstractTo optimize the intra-prediction of the H.264 coding standard for improving the speed of intra-prediction,a 4×4 block pipeline is adopted instead of serial processing method.A adaptive pipeline is adopted which harmonizes the intra-prediction under different blocks and different prediction modes,using the four-channel parallel multifunction processing element to calculate the prediction values of four pixels in a column in one cycle.The “seed” method is adopted to replace the way of calculate directly in planar prediction mode.The optimized intra-prediction circuit is designed by using FPGA development platform.The verification results show that the optimized intra-prediction circuit only needs 196 clock cycles in average to process a macro block.
KeywordsH.264;pipeline;intra-prediction;multifunction processing element
中圖分類號(hào)TN919.81
文獻(xiàn)標(biāo)識(shí)碼A
文章編號(hào)1007-7820(2016)04-063-04
doi:10.16180/j.cnki.issn1007-7820.2016.04.017
作者簡介:張亞運(yùn)(1990—),男,碩士研究生。研究方向:專用集成電路設(shè)計(jì)。孟李林(1962—),男,教授。研究方向:計(jì)算機(jī)系統(tǒng)結(jié)構(gòu),嵌入式系統(tǒng)。
收稿日期:2015- 09- 09