文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)10-0053-03
H.264/AVC是由國際電信聯(lián)盟(ITU)和國際標(biāo)準(zhǔn)化組織(ISO)共同提出的最新一代數(shù)字視頻壓縮標(biāo)準(zhǔn),它吸取了以往壓縮技術(shù)的精華,又引進(jìn)了其他壓縮技術(shù)無法比擬的許多新技術(shù),因此,H.264在通信領(lǐng)域得到了廣泛應(yīng)用。H.264/AVC壓縮效率很高,但算法的復(fù)雜度和運(yùn)算量同時也大大增加,為了滿足視頻解碼實(shí)時性的要求,尋求更有效的解碼技術(shù)成為重要的研究課題。
幀內(nèi)預(yù)測是視頻編解碼中重要的一部分,其主要功能是降低圖像的空間冗余。本文根據(jù)H.264/AVC 幀內(nèi)預(yù)測的特點(diǎn)并結(jié)合對其算法的分析,提出了一種幀內(nèi)預(yù)測硬件電路結(jié)構(gòu),有效地減少了硬件電路面積,提高了解碼的性能。
1 H.264幀內(nèi)預(yù)測算法介紹
H.264視頻解碼器中,對于I和SI宏塊類型采用幀內(nèi)預(yù)測來解碼。幀內(nèi)預(yù)測模塊的輸入是當(dāng)前宏塊相鄰左邊塊和上邊塊環(huán)路濾波前的像素值及參考預(yù)測模式,輸出是當(dāng)前宏塊的預(yù)測值。預(yù)測值與反變換反量化得到的殘差值重構(gòu),得到宏塊的像素值。完成后,當(dāng)前宏塊的部分像素值和預(yù)測模式要進(jìn)行存儲,為后面宏塊解碼提供參考值。
H.264中亮度預(yù)測分兩類,一類是針對圖像中含有大量細(xì)節(jié)的部分采用4×4塊的預(yù)測模式(有9種預(yù)測模式);另一類是對圖像中比較平緩的區(qū)域采用16×16塊的預(yù)測模式(有4種預(yù)測模式)。色度預(yù)測是8×8塊的預(yù)測模式,有4種預(yù)測模式,這4種預(yù)測模式與亮度16×16的預(yù)測模式相似,也有豎直、水平、DC和平面模式。所有的預(yù)測模式都是根據(jù)左邊塊和上邊塊的參考值,計算當(dāng)前宏塊的預(yù)測值。
2 硬件實(shí)現(xiàn)
根據(jù)幀內(nèi)預(yù)測算法,硬件結(jié)構(gòu)劃分為predmode模塊、plane模塊、prediction模塊、reconstruct模塊、left_pixels模塊、predmode_ram、prediction_ram、sample和prediction_output模塊。如圖1所示,其中l(wèi)eft_pixels、prediction_ram、predmode _ram、sample和prediction_output模塊都是存儲單元,分別存儲的是當(dāng)前宏塊左邊塊的參考值、當(dāng)前宏塊上邊塊參考值、當(dāng)前宏塊上邊塊的參考預(yù)測模式、提取的參考像素值和當(dāng)前宏塊預(yù)測值輸出;predmode模塊預(yù)測計算出當(dāng)前塊的預(yù)測模式;plane模塊是對plane預(yù)測模式的預(yù)處理;prediction模塊是幀內(nèi)預(yù)測的核心計算單元,4個PE單元并行運(yùn)算,一個時鐘周期解碼出一個4×4的一列4個預(yù)測值;reconstruct模塊的功能是實(shí)現(xiàn)重構(gòu)。
2.1 predmode模塊設(shè)計
Intra_16×16和Intra_Chroma的預(yù)測模式可通過語法元素解析直接獲得,所以本模塊的主要任務(wù)是解析Intra_4×4的預(yù)測模式。
本模式預(yù)測器的輸入是當(dāng)前4×4亮度塊的luma_4×4BlkIdx(塊索引)、解析的語法元素和當(dāng)前宏塊的信息。輸出是當(dāng)前宏塊的16個子塊的預(yù)測模式mb_predmode。predmode_ram中存儲的是當(dāng)前宏塊上邊一行4×4塊的預(yù)測模式,如圖2陰影部分所示。左邊塊的預(yù)測模式存儲在predmode模塊內(nèi)。對于高清圖像(分辨率為1 920×1 080)來說,predmode_ram需要的存儲空間為1 080 bit。
如圖3所示,E是當(dāng)前塊,A是左邊塊,B是上邊塊,D是左上邊塊,C是右上邊塊。predmode模塊的結(jié)構(gòu)如圖4所示,圖中predmode_B模塊的作用是獲得當(dāng)前宏塊E的上邊塊B的預(yù)測模式,預(yù)測當(dāng)前宏塊E的子塊0、1、4、5,需要從predmode_ram中讀取上邊塊的參考預(yù)測模式,其他子塊的上邊塊參考預(yù)測模式是當(dāng)前塊已解碼子塊的預(yù)測模式。predmode_A模塊的作用是獲得當(dāng)前宏塊E的左邊塊A的預(yù)測模式,預(yù)測當(dāng)前塊E的子塊0、2、8、10時,左邊塊預(yù)測模式從reg_A里讀取。當(dāng)宏塊E的16個子塊預(yù)測完成時,把5、7、13、15子塊的預(yù)測模式存儲到reg_A中,為下個宏塊模式預(yù)測提供左邊塊參考值。
2.2 prediction模塊設(shè)計
prediction模塊是整個幀內(nèi)預(yù)測的核心計算模塊。prediction模塊的功能是根據(jù)獲得的參考像素,在不同預(yù)測模式下采用不同的預(yù)測公式計算當(dāng)前塊的預(yù)測值。幀內(nèi)預(yù)測共有17種預(yù)測模式,通常若對每種預(yù)測模式都設(shè)計預(yù)測器,當(dāng)求解一個預(yù)算值時,其他16個模式處于空閑,這就造成了很大的資源浪費(fèi)。通過分析各個模式所對應(yīng)的運(yùn)算法則,可以發(fā)現(xiàn)這些運(yùn)算法則的共同特點(diǎn)是:(1)計算每個位置預(yù)測值最多需要4個參考樣本像素;(2)計算公式都可由加法和移位操作完成計算。根據(jù)各個預(yù)測模式的相似點(diǎn),把17種預(yù)測模式集合到一個運(yùn)算單元中,可大大節(jié)約硬件資源。
圖5給出了PE的設(shè)計,該P(yáng)E的特點(diǎn)是:(1)Horizontal或Vertical預(yù)測模式中在獲得參考值x0后,在bypass控制下不需要經(jīng)過運(yùn)算單元直接獲得預(yù)測值;(2)DC模式,該模式的預(yù)測值是一個平均值。對于Intra_4×4_DC模式,用2個PE單元(PE0和PE1)在1個時鐘周期就可解得預(yù)測值。Intra_16x16_DC模式需要4個時鐘周期,假設(shè)左邊和上邊的參考像素值分別命名為L0~L15和U0~U15,前3個時鐘周期,PE0的輸入分別為(L0,L1,L2,L3)、((L0+L1+L2+L3),U0,U1,U2)、((L0+L1+L2+L3+U0+U1+U2),U3,0,0),輸出存儲在PE_reg中作為下個時鐘周期的輸入,PE1、FE2、PE3的輸入類同,最后一個時鐘周期把PE0、PE1、PE2、PE3作為PE0的輸入求出DC模式的預(yù)測值;(3)其他預(yù)測模式,如(A+2B+C+2)>>2和plane預(yù)處理單元的輸出都能經(jīng)過此運(yùn)算單元完成預(yù)測值的計算。
為了提高解碼速度,滿足視頻解碼實(shí)時性的要求,采用4個運(yùn)算單元PE0、PE1、PE2和PE3同時運(yùn)行, 4個運(yùn)算單元4個時鐘周期可以解碼出一個4×4塊,提高了解碼速度。
2.3 plane模塊設(shè)計
2.3.1 簡化 plane預(yù)測模式
Intra_16×16_Plane模式和色度塊Intra_chroma_Plane模式是幀內(nèi)預(yù)測中最復(fù)雜的預(yù)算模式,為了滿足系統(tǒng)實(shí)時處理的要求,可提前預(yù)算plane模式需要的一些參數(shù)。本文以Intra_16×16_Plane為例介紹如何簡化plane模式,Intra_chroma_Plane方法類同。
在plane模式運(yùn)算中要用到乘法,為了節(jié)約硬件資源,采用移位來實(shí)現(xiàn)乘法,其中參數(shù)a、b、c的計算公式為:
上述公式,首先求得A后,pred(0,1)、pred(0,2)、pred(0,3)的值是在A的基礎(chǔ)上加上c、2c、3c,然后再進(jìn)行移位和clip。pred(1,0)、pred(2,0)、pred(3,0)的值只是在A的基礎(chǔ)上加上b、2b、3b,然后再進(jìn)行移位和clip。所以提前求得A、b、c,預(yù)算值是在A的基礎(chǔ)上加上b或者c的倍數(shù),本方法可大大優(yōu)化plane模式。
2.3.2 plane模式硬件設(shè)計
plane模式的關(guān)鍵是求得參數(shù)H和V,其硬件設(shè)計如圖6所示。以V為例介紹本電路。
舉例說明本運(yùn)算單元如何計算出參數(shù)H:
當(dāng)a=a11、b=a12、c=a3、d=a3、sum=0、mux1=0、IS6=0、IS7=0、shift1=0、shift2=1時,就可以求得A1+A3。a=a21、b=a22、c=a51、d=a52、sum=0、mux1=0、IS6=0、IS7=0、shift1=1、shift2=2時,就可以求得A2+A5,并依照這個運(yùn)算單元可求出A4+A6和A8+A7。
本電路4個時鐘周期就可以求得H或V,所以共需要8個時鐘周期求H和V。本方法與通常方法相比,只計算一次A、b、c的值,其他位置的預(yù)測值只需要在A的基礎(chǔ)上加上b或者c的倍數(shù),降低了復(fù)雜度。
3 實(shí)驗(yàn)結(jié)果
本設(shè)計使用Verilog HDL完成硬件代碼的編寫,并用Altera公司的Quartus II 8.0進(jìn)行代碼的仿真和綜合。圖7為核心單元prediction模塊的仿真結(jié)果,PE0_out、PE1_out、PE2_out、PE3_out9為4個并行單元的輸出。采用Altera公司的Cyclone II進(jìn)行本設(shè)計FPGA驗(yàn)證,本設(shè)計占用的邏輯資源數(shù)量較少,節(jié)約了硬件資源。
本文根據(jù)H.264幀內(nèi)預(yù)測的特點(diǎn),提出了一種并行處理的硬件實(shí)現(xiàn)方法。該方法能夠提高幀內(nèi)預(yù)測的處理速度,節(jié)約了硬件資源,滿足了高清視頻的解碼要求。
參考文獻(xiàn)
[1] ISO/IEC 14496-10.draft ITU-T recommendation and final international standard of joint video specification(ITU-TRec.H.264/AVC) [S].2003.
[2] SAHIN E,HAMZAOGLU I.An efficient intra prediction hardware architecture for H.264 Video Decoding[M].IEEE,2009.
[3] Wang Xi.A parallel intra prediction architecture for H.264 video decoding[M].IEEE,2007.
[4] 畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)-H.264/AVC(第二版). 2009.