《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 業(yè)界動態(tài) > 基于H.264幀間預(yù)測解碼的研究及高效VLSI實現(xiàn)

基于H.264幀間預(yù)測解碼的研究及高效VLSI實現(xiàn)

2008-07-03
作者:楊海池,宋 銳,吳成柯,馮曉茹

???? 摘 要: 在深入研究H.264幀間預(yù)測" title="幀間預(yù)測">幀間預(yù)測技術(shù)的基礎(chǔ)上,采用三級流水線實現(xiàn)幀間預(yù)測解碼的VLSI設(shè)計,并詳細(xì)介紹了基于宏塊" title="宏塊">宏塊分割的變塊自適應(yīng)循環(huán)控制單元,針對存儲器的讀寫問題提出了一種交織存取方式,針對分像素插值" title="插值">插值提出了一種基于H.264標(biāo)準(zhǔn)的插值運算電路。通過仿真及在H.264解碼器中的實際應(yīng)用和測試,證明該設(shè)計工作穩(wěn)定,能夠滿足H.264標(biāo)準(zhǔn)基本框架下4CIF格式圖片30fps(幀/秒)實時解碼的要求。
???? 關(guān)鍵詞: 幀間預(yù)測? VLSI設(shè)計? 變塊大小自適應(yīng)? 交織存取? 插值運算

?

??? H.264[1]是聯(lián)合視頻工作組JVT(Joint Video Team)開發(fā)的最新一代視頻壓縮標(biāo)準(zhǔn)。與標(biāo)準(zhǔn)MPEG-2、MPEG-4和H.263相比,其總體結(jié)構(gòu)為基于增強(qiáng)的運動估計" title="運動估計">運動估計與補(bǔ)償加變換編碼的混合(hybrid)編碼模式,包含了許多新特征:如VCL層和NAL層分離、幀內(nèi)預(yù)測、高精度運動估計、可變塊大小運動補(bǔ)償、多參考幀運動補(bǔ)償預(yù)測、低復(fù)雜度16bit的整數(shù)變換和量化、去塊效應(yīng)濾波器和高效的熵編碼等。這些新特征使得H.264/AVC能夠顯著提高編碼效率且具有網(wǎng)絡(luò)友好性,可有效用于各種網(wǎng)絡(luò)和應(yīng)用環(huán)境[2]。
??? 作為視頻壓縮的關(guān)鍵技術(shù)之一,具有運動估計與補(bǔ)償?shù)膸g預(yù)測技術(shù)主要是利用連續(xù)圖像之間的相關(guān)性,采取運動估計與補(bǔ)償?shù)姆椒▉硐龝r間上的冗余。H.264解碼代碼的復(fù)雜度分析結(jié)果顯示,計算量最大的部分是幀間預(yù)測模塊、幀內(nèi)預(yù)測模塊和去塊效應(yīng)濾波模塊。但這些部分的控制方式相對簡單,適合用硬件來實現(xiàn)。本文在深入研究H.264幀間預(yù)測技術(shù)的基礎(chǔ)上,盡量降低硬件資源損耗,采用三級流水線實現(xiàn)幀間預(yù)測解碼的VLSI設(shè)計。
1 幀間預(yù)測技術(shù)研究
??? H.264幀間預(yù)測是利用已編碼視頻幀或場和基于塊的運動補(bǔ)償預(yù)測模式。與以往標(biāo)準(zhǔn)幀間預(yù)測不同的是,H.264增加了許多新功能[3],主要包括四個方面:
??? (1)可變塊大小運動補(bǔ)償:每個宏塊(16×16像素)的亮度,可以按4種方式進(jìn)行分割:1個16×16,或2個16×8,或2個8×16,或4個8×8,其運動補(bǔ)償也相應(yīng)有4種。而8×8模式的每個子宏塊可以繼續(xù)分割:1個8×8,或2個4×8,或2個8×4,或4個4×4。這種分割下的運動補(bǔ)償,稱為樹狀結(jié)構(gòu)運動補(bǔ)償。這些分割和子宏塊大大提高了各個宏塊的關(guān)聯(lián)性。一般來說,小塊可以提高預(yù)測的效果。
??? 宏塊的色度成分(Cr和Cb)則為相應(yīng)亮度的一半(水平和垂直各一半)。色度塊采用和亮度塊相同的分割模式,只是尺寸減半(水平和垂直方向都減半)。例如8×16的亮度塊其相應(yīng)的色度塊尺寸為4×8。
??? (2)高精度的運動補(bǔ)償:幀間編碼宏塊的每個分割或子宏塊都是對參考圖像的某一相同尺寸區(qū)域進(jìn)行預(yù)測得到的。兩者之間的差異(MV),對亮度成分采用1/4像素精度,色度1/8像素精度。亞像素位置的亮度和色度像素并不存在于參考圖像中,需要利用臨近已編碼點進(jìn)行內(nèi)插" title="內(nèi)插">內(nèi)插得到。
??? MV可由臨近已編碼分割的MV預(yù)測獲得。預(yù)測矢量MVp基于已計算的MV和MVD(預(yù)測與當(dāng)前的差異),并被編碼和傳輸。MVp取決于運動補(bǔ)償?shù)某叽绾团R近MV的有無。
??? (3)多參考幀運動補(bǔ)償:H.264支持多參考幀預(yù)測(multiple reference frames),即可以有多于1個、最多5個在當(dāng)前幀之前解碼的幀作為參考幀產(chǎn)生對當(dāng)前幀的預(yù)測。這適用于視頻序列中含有周期性運動的情況。較之只使用1個參考幀,使用5個參考幀可以節(jié)省碼率5~10%。采用這一技術(shù),可以改善運動估計的性能,提高H.264解碼器的錯誤恢復(fù)能力,但同時也增加了緩存的容量以及編解碼器的復(fù)雜性。不過,H.264的提出是基于半導(dǎo)體技術(shù)的飛速發(fā)展,因此這兩個負(fù)擔(dān)在不久的將來會變得微不足道。
??? (4)去塊效應(yīng)濾波:基于塊的視頻編碼在圖像中存在塊效應(yīng),主要來源于幀內(nèi)和幀間預(yù)測和殘余編碼。去塊效應(yīng)濾波器(Deblocking Filter)的作用是消除經(jīng)反量化和反變換后重建圖像中由于預(yù)測誤差產(chǎn)生的塊效應(yīng),即塊邊緣處的像素值跳變,從而改善圖像的主觀質(zhì)量,減少預(yù)測誤差。在去塊效應(yīng)濾波時,應(yīng)該根據(jù)圖像內(nèi)容判斷是圖像的真實邊界還是方塊效應(yīng)所形成的邊界(假邊界)。對真實邊界不進(jìn)行濾波處理,而對假邊界則根據(jù)周圍圖像塊的性質(zhì)和編碼方法采用不同強(qiáng)度的濾波。
2 幀間預(yù)測解碼硬件實現(xiàn)
??? 在本次H.264解碼設(shè)計中,解碼架構(gòu)采用DSP+FPGA協(xié)同處理,DSP主要負(fù)責(zé)完成slice_data前所有處理過程,包括序列參數(shù)集、圖像參數(shù)集及片頭的句法元素的解析以及碼流的處理,并存儲片層及宏塊層要解析的碼流,承擔(dān)整個解碼器的協(xié)調(diào)和控制。而FPGA負(fù)責(zé)完成片層及宏塊層各句法元素的解析,以及后續(xù)的解碼重建,如幀間預(yù)測、幀內(nèi)預(yù)測、反量化/變化、CAVLC解碼及去塊濾波等,充分利用了DSP和FPGA的優(yōu)勢[4]
??? 本文設(shè)計的幀間預(yù)測解碼整體框圖如圖1所示,主要包括MV分量及參考索引獲取計算、參考圖像矩陣選擇處理、分像素內(nèi)插和加權(quán)預(yù)測處理三級流水線模塊。

?

?????????????????????? ??

?

??? 宏塊流水線技術(shù)在硬件實現(xiàn)視頻編解碼過程中起到相當(dāng)重要的作用。圖1中, 當(dāng)?shù)谝粋€宏塊完成MV分量及參考索引獲取計算轉(zhuǎn)而進(jìn)入第二級執(zhí)行參考圖像矩陣選擇處理時, 第二個宏塊便進(jìn)入第一級執(zhí)行MV分量及參考索引獲取計算的環(huán)節(jié)中,大幅度提高了各個模塊的利用率。這樣做,雖然增加了一定的電路規(guī)模,但是大大提高了運行效率[5]。
??? 圖1中方框圖表示處理模塊,圓角框圖表示存儲器單元,其中縱條狀的是DDR SDRAM(用于存儲參考幀圖像)和SDRAM(用于存儲MV解析結(jié)果,B幀解碼時需要參考),其余橫條紋表示內(nèi)部使用或者與H.264其他解碼模塊接口的SRAM。黑色箭頭與H.264其他解碼模塊接口的存儲器或者模塊連接。
??? 幀間預(yù)測的整體實現(xiàn)過程為:在每幅圖像解碼開始后,DSP內(nèi)完成參考圖像的管理,包括當(dāng)前圖像的POC值計算、上一幅解碼圖像的標(biāo)記、當(dāng)前圖像標(biāo)記命令的存儲以及參考幀的初始化和重排,將重排好的參考幀列表信息寫入列表信息存儲器中。在片層(SLICE)解碼開始后,將每幅參考圖像的加權(quán)系數(shù)寫入加權(quán)信息存儲器中。宏塊級解碼開始后,采用流水線技術(shù)完成各個宏塊的幀間預(yù)測解碼處理。下面詳細(xì)描述各個模塊。
2.1 MV分量及參考索引獲取計算
??? H.264/AVC使用兩種熵編碼方法,CAVLC(上下文自適應(yīng)的可變長編碼)和CABAC(上下文自適應(yīng)二進(jìn)制算術(shù)編碼),兩種都是基于上下文的熵編碼技術(shù)。本單元采用乒乓機(jī)制接收CAVLC/CABAC解碼得到的幀間預(yù)測殘差信息,包括宏塊編碼方式(mb_type)、宏塊分割(mbPartIdx,subMbPartIdx)、參考幀標(biāo)識(predFlagLX)、參考幀索引號(ref_idx_lX)以及運動矢量差(mvd_lX)等等。然后,根據(jù)當(dāng)前宏塊在幀中的位置和小塊在宏塊中的偏移地址計算得到當(dāng)前小塊的左上和右上小塊在幀存中的地址,從參考塊信息存儲器中讀出參考小塊的參考索引和運動矢量,并結(jié)合殘差信息以及參考幀列表信息計算得到當(dāng)前小塊的絕對運動矢量,解析完成后將結(jié)果寫入當(dāng)前宏塊參考信息存儲器。同時將結(jié)果寫入SDRAM,供B幀參考使用。
本模塊循環(huán)控制由變塊自適應(yīng)循環(huán)控制單元完成,對一個宏塊中的各個小塊按照宏塊分割進(jìn)行變塊自適應(yīng),在完成一個小塊后進(jìn)行判斷,啟動下一個小塊運動矢量信息的預(yù)測。小塊之間的跳轉(zhuǎn)狀態(tài)以及宏塊分割如圖2所示。其中,下方是宏塊的各種分割,上方是各種狀態(tài)跳轉(zhuǎn),指示線上標(biāo)注的是分割寬高變量partWidth和partHeight。假設(shè)一個宏塊分割為兩個8×16,則小塊狀態(tài)跳轉(zhuǎn)順序為:0_0->0_2->END。

????????????????????????????? ???

?

??? 第二、三級變塊自適應(yīng)循環(huán)控制單元與之類似,不再贅述。
2.2 參考圖像矩陣選擇處理
??? 本單元通過循環(huán)控制得到當(dāng)前小塊運動矢量信息,根據(jù)當(dāng)前小塊的位置信息和運動矢量等,計算當(dāng)前小塊對應(yīng)的參考矩陣塊在二維圖像中的坐標(biāo),結(jié)合參考幀序列號等,計算得到參考矩陣塊在參考幀存儲器DDR SDRAM中的絕對讀地址,從DDR SDRAM中讀出參考數(shù)據(jù)。然后,根據(jù)數(shù)據(jù)的邊界信息,從讀取參考數(shù)據(jù)中抽取有效數(shù)據(jù),進(jìn)行進(jìn)一步的組織和運算,并寫入?yún)⒖枷袼鼐仃嚧鎯ζ鳌?BR>??? 參考矩陣選擇處理不涉及復(fù)雜的計算過程,但對數(shù)據(jù)操作比較多,涉及到的存儲器操作比較復(fù)雜。存儲器的讀寫在H.264的硬件設(shè)計中是一大瓶頸,因此主要關(guān)注點在于存儲器的高效讀寫和利用。為了滿足實時解碼的要求,DDR SDRAM位寬為32bit,參考幀數(shù)據(jù)按照交織的方式存入DDR SDRAM中,具體亮度交織存取方式如圖3所示,其中MBx_y為第y行第x列的宏塊。

?

???????????????????????????


??? 這樣,在DDR SDRAM中,每個BANK內(nèi)每個PAGE可以存儲4個宏塊亮度(或者8個宏塊亮度,色度按照CrCbCrCb方式存儲,便于讀寫和后端操作)。在這種存儲方式下,讀數(shù)據(jù)的起始地址,每行讀取幾個數(shù)據(jù),讀幾行數(shù)據(jù)等信息均由小塊位置解析模塊給出。具體的DDR中數(shù)據(jù)的讀地址由專門的DDR控制器產(chǎn)生,并根據(jù)要求將讀取的數(shù)據(jù)拼接成所需格式,供后端讀取和進(jìn)行進(jìn)一步的拼接和填充。
2.3 分像素內(nèi)插和加權(quán)預(yù)測處理模塊
??? 本單元通過循環(huán)控制得到當(dāng)前小塊運動矢量信息,計算得到色度矢量。然后,按照要求從參考像素矩陣存儲器(Luma_mem,Chroma_mem)中讀出參考數(shù)據(jù),分別對亮度和色度完成插值和加權(quán)預(yù)測,將結(jié)果存入預(yù)測像素結(jié)果存儲器。
為了保證插值的運算效率,滿足高清序列實時解碼需要,本文設(shè)計了一個基于H.264標(biāo)準(zhǔn)的亮度插值運算電路。由于H.264中宏塊采用樹形分割,最小分割尺寸為4×4,所以在該結(jié)構(gòu)中,每個宏塊被拆分成16個4×4的亮度塊,順序被處理。
亮度插值運算單元數(shù)據(jù)通路如圖4所示,插值運算單元每次參考9×9的輸入數(shù)據(jù)和運動矢量信息完成分像素插值。首先,根據(jù)運動矢量進(jìn)行判斷,如果運動矢量的垂直和水平分量為整數(shù),則表明插值預(yù)測像素已經(jīng)實際存在,可以直接由輸入數(shù)據(jù)得到。如果其中一個或者兩個為分?jǐn)?shù),則要通過參考幀中相應(yīng)像素內(nèi)插得到。

????????????????? ???????

?

??? 如圖4所示,輸入亮度數(shù)據(jù)根據(jù)多路信號選擇器分配給不同的6-tap濾波器,在運算單元內(nèi)部設(shè)置了幾組延時寄存器組,用來緩沖需要輸入到濾波器的參考像素值。在需要的半像素和整像素全部得到和對齊后,根據(jù)運動矢量選擇對應(yīng)位置的半像素和整像素,進(jìn)行加法和移位運算,得到1/4像素精度的預(yù)測亮度像素值。圖5給出了1/4亮度像素內(nèi)插部分信號時序。

???????????????????

?

3 分析及實現(xiàn)結(jié)果
??? 本文采用基于三級流水線結(jié)構(gòu)的幀間預(yù)測解碼VLSI實現(xiàn)結(jié)構(gòu),用Verilog-HDL語言進(jìn)行寄存器級描述,并且在Modelsim6.0環(huán)境下進(jìn)行功能仿真。仿真結(jié)果與標(biāo)準(zhǔn)算法軟件計算結(jié)果相比較以保證其正確性,證明本文的設(shè)計是正確的。設(shè)計實現(xiàn)采用ALTERA公司的QUARTUSⅡ5.0開發(fā)軟件,目標(biāo)器件為StratixⅡEP2S60F1020C5,硬件仿真和驗證表明該設(shè)計可以在60MHz頻率下穩(wěn)定工作。
??? 統(tǒng)計顯示,本文設(shè)計的三級流水結(jié)構(gòu)中,除第二級參考圖像矩陣選擇處理與宏塊分割、運動矢量以及DDR SDRAM讀寫相關(guān)無法具體確定外,第一級MV分量及參考索引獲取計算、第三級分像素內(nèi)插和加權(quán)預(yù)測處理均可以在900周期內(nèi)完成。
??? 通過仿真及在H.264解碼器中的實際應(yīng)用和測試,證明該設(shè)計工作穩(wěn)定,能夠滿足H.264標(biāo)準(zhǔn)基本框架下QCIF格式圖片30fps(幀/秒)實時解碼的要求。

參考文獻(xiàn)
[1] ITU-T Rec.H.264.Advance video coding for?generic audiovisual services[S].March,2005.
[2] WIEGAND T,SULLIVAN G J,BJONTEGAARD?G,et al.Overview of the H.264/AVC video coding standard[J].IEEE Trans.on circuits and systems for video technology,2003,13(7):560-576.
[3] 畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)-H.264/AVC[M].北京:人民郵電出版社,2005.
[4] 高玉娥.H.264解碼器的系統(tǒng)設(shè)計及CAVLC的硬件實現(xiàn)[J].電視技術(shù),2006(12):23-28.
[5] 吳子輝.H.264編解碼器方案綜述[J].電視技術(shù),2005,(12):12-14.
[6] H.264 reference software,JM9.6[CP].http://iphome.hhi.de/suehring/tml/download/old_jm/jm96.zip,July,2005.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。