張建國,關(guān)則昂,徐 淵,劉勁松
(1.深圳市振華微電子有限公司,廣東 深圳518060;2.深圳大學信息工程學院,廣東 深圳518060)
H.264是由視頻編碼專家組(Video Coding Experts Group,VCEG)聯(lián)合動態(tài)圖像專家組(Moving Pictures Experts Group,MPEG)提出的一種具有高壓縮效率的視頻編碼標準[1]。目前國內(nèi)外對相關(guān)編碼器設(shè)計大多基于專用集成電路(Application Specific Integrated Circuit,ASIC)芯片結(jié)構(gòu)或數(shù)字信號處理(Digital Signal Processing,DSP)+現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)編碼器解決方案?;贔PGA芯片實現(xiàn)該系統(tǒng)既具有ASIC強大的運算能力優(yōu)勢,同時又有類似DSP的靈活性,已成為新一代的H.264編碼器實現(xiàn)方案。而且,多數(shù)相關(guān)課題只基于FPGA實現(xiàn)H.264編碼器內(nèi)部分功能設(shè)計及優(yōu)化,如新型運動估計結(jié)構(gòu)[2-3]等研究。
本文在Xilinx的FPGA芯片上實現(xiàn)基于基本畫質(zhì)層次的整個編碼系統(tǒng),并針對高分辨率視頻處理采用并行處理、高度吞吐量優(yōu)化設(shè)計,對1080P,720P等高清視頻進行實時編碼處理。
編碼器預測編碼由幀內(nèi)(I幀)與幀間預測(P幀)組成,本文對于I幀編碼部分實現(xiàn)3種預測模式:水平,垂直以及均值預測,幀間編碼實現(xiàn)P幀預測。
幀內(nèi)預測中對于亮度域提供2種編碼模式:基于4×4[4]和16×16塊編碼。前者共有9種預測模式,如圖1所示,一般適用對存在大量細節(jié)的圖像編碼,而后者僅4種預測模式,適用于圖像中較平坦區(qū)域的編碼[5]。
圖1 亮度域的9種預測模式
如圖1所示,4×4塊周邊相鄰像素(A~L)是已編碼與重構(gòu)后像素,作為當前4×4塊的預測參考像素。系統(tǒng)分別對9種預測模式進行預測,找出誤差最小的一種預測模式。由于人眼視覺系統(tǒng)對色度變化的敏感性較低,只對色度定義了4種預測模式,且與16×16亮度塊相似,只是對應的模式編碼不同。
將當前編碼圖像視為當前幀,其前一幀視為參考幀,以宏塊(16×16)為單位在參考幀中搜索出與當前編碼宏塊最相似的參考塊,該過程被稱為運動估計。而在目前提出的各種搜索算法中,全搜索方式下得到的效果更加準確,硬件結(jié)構(gòu)也較易實現(xiàn)[6-7]。
2.2.1 運動估計
全搜索方式中的可變塊大小運動估計(Variable Block Size Motion Estimation,VBSME)是 H.264標準的一種新型編碼技術(shù)[8-9]。相比固定的塊大小,VBSME更加適合小型和不規(guī)則運動區(qū)域搜索,能夠更好地估算和適應運動邊界。VBSME中每個宏塊可以被分為P_16×16,P_16×8,P_8×16,P_8×8 4種一級宏塊類型,而P_8×8又可進一步分為P_8×8,P_8×4,P_4×8,P_4×4 4種二級宏塊類型共41個子塊。運動估計就是基于可變塊方式,在搜索窗內(nèi)依次提取相應的參考塊與編碼塊進行匹配,兩者之間相對差值(Sum of Absolute Difference,SAD)[10]最小的為預測塊,搜索完成后得到41個子塊的最小相對差值(Minimum-SAD,MSAD)以 及 對 應 的 運 動 矢 量(Motion Vector,MV)(Vx,Vy),算法流程如圖2所示。
圖2 運動估計算法流程
2.2.2 預測模式選擇
宏塊預測模式選擇是以宏塊為單位,分別對不同宏塊分割模式下的編碼代價量(COST)作評估,選擇COST最小的一種分割模式。經(jīng)運動估計處理分別得到了41個子塊的MSAD和MV后,根據(jù)式(1)計算出宏塊在不同分割模式下的對應若干子塊的COST,并累加得到整個宏塊的COST,最后比較得到代價量最小的一種分割模式,該模式為預測模式。
對COST的一般評估算法是僅以MSAD作為宏塊的代價量,但H.264標準的編碼碼流同時包括了宏塊的預測模式、運動矢量以及殘差塊數(shù)據(jù)等信息,所以該方式不能準確地評估出宏塊編碼的代價量。本文以宏塊的MSAD和MV同時作為評估因素,能夠更準確地預測出代價量最小的宏塊分割模式。
其中,MSAD表示不同分割模式下的子塊最小相對差值;vx和vy為對應的運動矢量,都由運動估計計算得到。
另外,λmotion為運動矢量的平衡系數(shù),取值與量化步長QP相關(guān),其作用是平衡運動矢量部分的代價量與MSAD代價量之間的比重,目的是讓總代價量均衡地反映在2個編碼因素上。
2.2.3 運動補償
編碼碼流中的殘差數(shù)據(jù)由編碼宏塊和參考塊的相差得到,該過程稱為運動補償,如圖3所示。經(jīng)過模式選擇后得到宏塊編碼的運動矢量和預測模式,運動補償根據(jù)該結(jié)果在搜索窗內(nèi)提取對應的參考塊并與編碼宏塊相差產(chǎn)生殘差塊。以圖3為例,經(jīng)過模式選擇得到編碼宏塊的分割模式為P_8×8,根據(jù)MV在參考幀內(nèi)找出各參考子塊組合得到參考塊,并與編碼宏塊相差得到殘差數(shù)據(jù)塊。
圖3 運動補償示意圖
圖4為H.264編碼器的系統(tǒng)框圖,系統(tǒng)采用多通道數(shù)據(jù)讀寫方式從雙倍率存儲器(Double Data Rate,DDR)讀取原圖像的編碼數(shù)據(jù)。同時對系統(tǒng)采用分時域共工作模式,在讀寫模塊給予較高的時鐘驅(qū)動,快速讀取編碼數(shù)據(jù)。整個編碼系統(tǒng)可分4個部分:幀內(nèi)預測,幀間預測,變換編碼以及系統(tǒng)控制。其中,幀間預測主要包括了運動估計(圖4中IME)以及運動補償(圖4中MC)模塊。系統(tǒng)控制(圖4中TopCtrlSM)模塊負責系統(tǒng)的頂層控制,包括I幀和P幀預測的切換、編碼圖像設(shè)置、碼流頭信息生成等。
圖4 H.264編碼系統(tǒng)
TopCtrlSM為整個系統(tǒng)的控制單元,同時也是微控制單元(Micro Control Unit,MCU)控制與系統(tǒng)硬件的通信模塊,MCU可配置知識產(chǎn)權(quán)(Intellectual Property,IP)內(nèi)部參數(shù)寄存器(圖像尺寸等)和狀態(tài)寄存器。
IP系統(tǒng)對外進行數(shù)據(jù)交互時,采用了典型的雙向握手機制,即在接收數(shù)據(jù)時時刻反饋內(nèi)部存儲狀態(tài),信號有效可接收數(shù)據(jù)。從圖4可看出,系統(tǒng)編碼后的碼流數(shù)據(jù)由先入先出隊列(First Input First Output,F(xiàn)IFO)存儲并輸出,規(guī)范的對外通信接口使得外部只需簡單的握手設(shè)計就可以調(diào)用該IP。在系統(tǒng)內(nèi)部,模塊之間均使用有效的握手信號進行數(shù)據(jù)傳遞,并使用FIFO對數(shù)據(jù)進行存儲,以避免處理過程相鄰模塊處理速度不同步所引起的沖突。
圖5為幀內(nèi)預測的功能模塊分布圖,整個預測過程為:由CtrlSM模塊控制生成隨機存儲器(Random Access Memory,RAM)的讀寫地址,圖中不同的RAM分別存儲編碼數(shù)據(jù)、預測參考數(shù)據(jù)(上方相鄰行數(shù)據(jù)和左邊相鄰列數(shù)據(jù)),輸出到差值計算模塊,并比較得到預測模式以及對應的殘差數(shù)據(jù)。
圖5 幀內(nèi)預測結(jié)構(gòu)
數(shù)據(jù)緩存模塊由RAM構(gòu)成,并由控制模塊CtrlSM根據(jù)預測模式(水平、垂直和均值預測等)控制生成RAM的讀地址,分別在RAM中讀取相應的參考數(shù)據(jù)進入預測模塊,得到不同模式下的差值后通過預測模塊進行選擇,輸出預測模式。
CtrlSM生成整個幀內(nèi)預測系統(tǒng)控制信號,分別控制了編碼塊的數(shù)據(jù)請求、相鄰參考像素讀取、殘差數(shù)據(jù)有效輸出以及內(nèi)部模塊的反饋信號處理,保證幀內(nèi)預測系統(tǒng)有條不紊地進行,狀態(tài)圖如圖6所示。
圖6 幀內(nèi)預測狀態(tài)圖
幀內(nèi)預測系統(tǒng)共有5個狀態(tài),如圖6所示,其中,“001”為編碼數(shù)據(jù)準備狀態(tài),該狀態(tài)下判斷內(nèi)部RAM的編碼數(shù)據(jù)是否足夠,滿足條件后跳轉(zhuǎn)狀態(tài)進行幀內(nèi)預測操作。而當處于狀態(tài)“010”,判斷是否預測參考數(shù)據(jù)以及系統(tǒng)外部狀態(tài)空閑,滿足后進而判斷是否已完成宏塊內(nèi)全部子塊預測,即返回初始狀態(tài)開始預測下個宏塊,否則對當前宏塊內(nèi)下一個子塊進行預測操作。
設(shè)計采用全搜索設(shè)計,搜索窗為32×32,以單個像素點為步長,Meander蛇形(左上角點為起點,依次下移-右移-上移-右移……)搜索路線依次取尺寸對應(16×16)的參考塊與編碼宏塊進行匹配,相差進而比較找出參考預測塊。
3.3.1 運動估計處理架構(gòu)
圖7是幀間預測系統(tǒng)的結(jié)構(gòu)框圖,包含2條數(shù)據(jù)路徑:參考塊路徑以及編碼塊路徑。圖中搜索窗的存儲模塊(Buffer Zone)輸入數(shù)據(jù)由16個像素組成位寬為128bit。由于在宏塊的搜索過程中會出現(xiàn)新的參考塊,16_Rb_ram_stripe將輸出的參考塊新數(shù)據(jù)重新排列,組成新參考塊的一行數(shù)據(jù)(16×8 bit),RB_shift_reg_array是一個存儲參考塊的移位寄存器,基于蛇形搜索特點,相鄰參考塊只有16個像素的新數(shù)據(jù),所以只需將下一個參考塊的新數(shù)據(jù)與RB_shift_reg_array內(nèi)部的可用數(shù)據(jù)進行重新移位排列,組成下一個參考塊進入PE陣列進行差值計算:PE陣列實現(xiàn)參考塊與編碼宏塊的差值計算,該陣列由16個4×4運算陣列組成,僅需一個周期即可得到差值結(jié)果。
圖7 整數(shù)運動估計結(jié)構(gòu)
圖8是搜索窗數(shù)據(jù)結(jié)構(gòu),包括2個存儲單元,存儲內(nèi)容相同但用處不同。為對相鄰編碼塊搜索窗的數(shù)據(jù)復用,內(nèi)部存儲一個48×32的數(shù)據(jù)塊,該塊包含了當前編碼塊的全部搜索窗數(shù)據(jù)以及下一個編碼塊的部分搜索窗數(shù)據(jù),以實現(xiàn)數(shù)據(jù)復用。當在進行第n宏塊搜索時,同時將第n+1宏塊對應的部分搜索窗新數(shù)據(jù)覆蓋掉第n宏塊與第n-1宏塊不重合的搜索窗數(shù)據(jù),如此類推。另外,由狀態(tài)機控制2個存儲單元的讀地址,Rb_buf0輸出參考塊上移及下移的新數(shù)據(jù),Rb_buf1輸出右移的新數(shù)據(jù),存儲單元內(nèi)部機制如圖9所示。
由于相鄰編碼宏塊存在共同的搜索窗區(qū)域,適當?shù)臄?shù)據(jù)復用設(shè)計以減少新數(shù)據(jù)的讀取次數(shù)是必不可少的。該架構(gòu)由16條位寬為8bit的存儲條構(gòu)成,每次將128bit的輸入數(shù)據(jù)分為16個8bit分別存儲到各存儲條中。在搜索過程中,參考塊在上移和下移時的新數(shù)據(jù)由圖中Crossbar接口輸出,而每次右移時的數(shù)據(jù)可在其前一次上移或下移過程中控制輸出,并由圖中串轉(zhuǎn)并接口模塊寄存。這樣的存儲結(jié)構(gòu)使得無論在參考塊的上移、下移或右移下都只需簡單的地址計算就能夠在存儲單元中提取出對應的新數(shù)據(jù),無疑節(jié)省了搜索操作的時間,將復雜的結(jié)構(gòu)簡單化,圖10為存儲條數(shù)據(jù)在搜索窗內(nèi)的位置。
圖10 相鄰宏塊搜索窗
3.3.2 運動補償結(jié)構(gòu)設(shè)計
運動補償是基于運動估計得到的宏塊信息在搜索窗內(nèi)鎖定參考塊,并與編碼宏塊相差得到殘差塊數(shù)據(jù)。
運動補償先將搜索窗以及編碼塊數(shù)據(jù)進行暫存等待讀取,為了節(jié)省數(shù)據(jù)讀取的時間,內(nèi)部分別設(shè)計了編碼宏塊與搜索窗數(shù)據(jù)雙緩存機制,并有專門的控制電路實現(xiàn)讀寫控制操作。圖11中的虛線內(nèi)部分為存儲單元組,通過控制選擇信號進行切換讀寫。
圖11 運動補償內(nèi)部存儲結(jié)構(gòu)
在完成數(shù)據(jù)存儲進入處理階段,雙緩存機制能夠有效提高系統(tǒng)的數(shù)據(jù)處理速度。圖12對單通道與雙通道緩存方式的工作模式進行了比較,對模塊內(nèi)部處理工作時域進行分析,整個處理的耗時控制為T1,與單緩存耗時T0相比,節(jié)省了數(shù)據(jù)寫入時間(T2=T0-T1)。其他編碼模塊在設(shè)計上均采用流水線處理方式,并且各級模塊間采用通用的數(shù)據(jù)接 口設(shè)計,保證了數(shù)據(jù)處理速度。
圖12 運動補償內(nèi)部結(jié)構(gòu)時域分析示意圖
以Xilinx公司的Virtex-6芯片為測試平臺,表1列出了編碼器內(nèi)部所有模塊的硬件綜合信息,以及所能夠支持的最大時鐘頻率??梢钥闯鼋?jīng)過時序優(yōu)化的系統(tǒng)內(nèi)部各模塊的最大可支持時鐘頻率較高。
表1 編碼器綜合信息
經(jīng)過對硬件系統(tǒng)完成時序與布局布線優(yōu)化后,得到H.264硬件編碼器的FPGA資源利用量如表2所示。從資源列表可以直觀看出該硬件系統(tǒng)的LUT利用率為28%,36 KB與18 KB的BRAM利用率分別為24%和5%,總體上該硬件編碼器FPGA資源占用量較少。
表2 編碼器硬件資源
表3為H.264編碼器實現(xiàn)的編碼效率,實驗結(jié)果表明編碼器對720P圖像的編碼速度能夠達到每秒34幀,具有較理想的編碼速率,充分體現(xiàn)了高度實時性的壓縮性能,同時能夠保證較好的圖像質(zhì)量。
表3 編碼性能實驗結(jié)果
配置尺寸參數(shù)分別對圖13(720P)格式視頻進行編碼,其中圖片中右邊的圖像顯示了解碼后得到的圖像,畫質(zhì)較好。本文實現(xiàn)的FPGA全硬件H.264編碼器具有高清視頻的實時編碼能力,與文獻[11]提出的以FPGA作為協(xié)處理器與DSP芯片共同實現(xiàn)的編碼器相比,兩者雖具有相近的處理能力,但本文提出的FPGA全硬件具有成本優(yōu)勢,同時系統(tǒng)升級性強。另外,文獻[12]與本文實現(xiàn)方式相似,同樣采用FPGA實現(xiàn)硬件編碼,但其采用的是鉆石搜索算法,圖像質(zhì)量較低,且系統(tǒng)框架較復雜,不方便系統(tǒng)升級。
圖13 720P格式編碼圖像
本文分析國內(nèi)外視頻編碼技術(shù)發(fā)展歷程,實現(xiàn)了一種具有高壓縮效率的編碼器——H.264/AVC,并基于FPGA實現(xiàn)H.264/AVC基本畫質(zhì)層次的全硬件系統(tǒng)設(shè)計。為解決編碼器的高編碼效率及高實時性問題,在系統(tǒng)硬件設(shè)計中廣泛采用并行處理架構(gòu)。實驗結(jié)果表明,本文實現(xiàn)的硬件編碼器可以使得720P圖像中的編碼速度達34幀,且編碼后的圖像質(zhì)量較好,適用于高清視頻監(jiān)控、視頻文件壓縮等領(lǐng)域。另外,可針對編碼效率對系統(tǒng)多方面進行升級,如對運動估計擴展到小數(shù)像素級、動態(tài)碼率控制等,以進一步減少編碼后的碼率,這是下一步工作需要考慮的問題。
[1]劉志剛.基于FPGA的 H.264編碼器的硬件的實現(xiàn)[D].西安:西安電子科技大學,2009.
[2]Kao Chao-Yang,Lin Youn-Long.A Memory-efficient and Highly Parallel Architecture for Variable Block Size Integer Motion Estimation in H.264/AVC[J].IEEE Transactions on Very Large Scale Integration Systems,2010,18(6):866-874.
[3]Xu Yuan,Liu Jinsong,Gong Liwei,et al.A High Performance VLSI Architecture for Integer Motion Estimation in HEVC[C]//Proceedings of the 10th International Conference on Control & Automation.Washington D.C.,USA:IEEE Press,2013:1-4.
[4]周 巍,周 欣,段哲民.基于 H.264/AVC的幀內(nèi)4×4預測模式快速選擇算法[J].西北工業(yè)大學學報,2012,30(3):440-444.
[5]裴世保,李厚強,俞能海.H.264/AVC幀內(nèi)預測模式選擇算法研究[J].計算機應用,2005,25(8):1808-1810.
[6]Zhang Li,Guo Wen.Improved FFSBM Algorithm and Its VLSI Architecture for Variable Block Size Motion Estimation of H. 264 [C ]//Proceedings of International Symposium on Intelligent Signal Processing and Communication Systems.Washington D.C.,USA:IEEE Press,2005:445-448.
[7]Kim J,Park T.A Novel VLSI Architecture for Fullsearch Variable Block-size Motion Estimation[J].IEEE Transactions on Consumer Electronics,2009,55(2):728-733.
[8]Chen Ching-Yeh,Chien Shao-Yi,Huang Yu-Wen,et al.Analysis and Architecture Design of variable Blocksize Motion Estimation for H.264/AVC[J].IEEE Tran-sactions on Circuits and Systems I,2006,53(3):578-593.
[9]Kuo Tien-Ying,Chan Chen-Hung.Fast Variable Block Size Motion Estimation for H.264Using Likelihood and Correlation of Motion Field [J].IEEE Transactions on Circuits and Systems for Video Technology,2006,16(10):1185-1195.
[10]Li Dongxiao,Zheng Wei,Zhang Ming.Architecture Design for H.264/AVC Integer Motion Estimation with Minimum Memory Bandwidth [J].IEEE Transactions on Consumer Electronics,2007,53(3):1053-1060.
[11]Nirmalkumar P,MuraliKrishnan E,Gangadharan E.Enhanced Performance of H.264Using FPGA Coprocessors in Video Surveillance[C]//Proceedings of International Conference on Signal Acquisition and Processing.Washington D.C.,USA:IEEE Press,2010:157-161.
[12]Atitallah A B,Loukil H,Masmoudi N.FPGA Design for H.264/AVC Encoder[J].International Journal of Computer Science,Engineering and Applications,2011,1(5):119-138.