文獻(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í)時(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ù)左邊塊和上邊塊的參考值,,計(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ù)測計(jì)算出當(dāng)前塊的預(yù)測模式;plane模塊是對plane預(yù)測模式的預(yù)處理,;prediction模塊是幀內(nèi)預(yù)測的核心計(jì)算單元,4個(gè)PE單元并行運(yùn)算,,一個(gè)時(shí)鐘周期解碼出一個(gè)4×4的一列4個(gè)預(yù)測值;reconstruct模塊的功能是實(shí)現(xiàn)重構(gòu),。
2.1 predmode模塊設(shè)計(jì)
Intra_16×16和Intra_Chroma的預(yù)測模式可通過語法元素解析直接獲得,,所以本模塊的主要任務(wù)是解析Intra_4×4的預(yù)測模式。
本模式預(yù)測器的輸入是當(dāng)前4×4亮度塊的luma_4×4BlkIdx(塊索引),、解析的語法元素和當(dāng)前宏塊的信息,。輸出是當(dāng)前宏塊的16個(gè)子塊的預(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時(shí),左邊塊預(yù)測模式從reg_A里讀取,。當(dāng)宏塊E的16個(gè)子塊預(yù)測完成時(shí),,把5、7,、13,、15子塊的預(yù)測模式存儲到reg_A中,為下個(gè)宏塊模式預(yù)測提供左邊塊參考值,。
2.2 prediction模塊設(shè)計(jì)
prediction模塊是整個(gè)幀內(nèi)預(yù)測的核心計(jì)算模塊,。prediction模塊的功能是根據(jù)獲得的參考像素,在不同預(yù)測模式下采用不同的預(yù)測公式計(jì)算當(dāng)前塊的預(yù)測值,。幀內(nèi)預(yù)測共有17種預(yù)測模式,,通常若對每種預(yù)測模式都設(shè)計(jì)預(yù)測器,當(dāng)求解一個(gè)預(yù)算值時(shí),,其他16個(gè)模式處于空閑,,這就造成了很大的資源浪費(fèi)。通過分析各個(gè)模式所對應(yīng)的運(yùn)算法則,,可以發(fā)現(xiàn)這些運(yùn)算法則的共同特點(diǎn)是:(1)計(jì)算每個(gè)位置預(yù)測值最多需要4個(gè)參考樣本像素,;(2)計(jì)算公式都可由加法和移位操作完成計(jì)算。根據(jù)各個(gè)預(yù)測模式的相似點(diǎn),,把17種預(yù)測模式集合到一個(gè)運(yùn)算單元中,,可大大節(jié)約硬件資源。
圖5給出了PE的設(shè)計(jì),,該P(yáng)E的特點(diǎn)是:(1)Horizontal或Vertical預(yù)測模式中在獲得參考值x0后,,在bypass控制下不需要經(jīng)過運(yùn)算單元直接獲得預(yù)測值,;(2)DC模式,該模式的預(yù)測值是一個(gè)平均值,。對于Intra_4×4_DC模式,,用2個(gè)PE單元(PE0和PE1)在1個(gè)時(shí)鐘周期就可解得預(yù)測值。Intra_16x16_DC模式需要4個(gè)時(shí)鐘周期,,假設(shè)左邊和上邊的參考像素值分別命名為L0~L15和U0~U15,,前3個(gè)時(shí)鐘周期,PE0的輸入分別為(L0,,L1,,L2,L3),、((L0+L1+L2+L3),,U0,U1,,U2),、((L0+L1+L2+L3+U0+U1+U2),U3,,0,,0),輸出存儲在PE_reg中作為下個(gè)時(shí)鐘周期的輸入,,PE1,、FE2、PE3的輸入類同,,最后一個(gè)時(shí)鐘周期把PE0,、PE1、PE2,、PE3作為PE0的輸入求出DC模式的預(yù)測值,;(3)其他預(yù)測模式,如(A+2B+C+2)>>2和plane預(yù)處理單元的輸出都能經(jīng)過此運(yùn)算單元完成預(yù)測值的計(jì)算,。
為了提高解碼速度,,滿足視頻解碼實(shí)時(shí)性的要求,采用4個(gè)運(yùn)算單元PE0,、PE1,、PE2和PE3同時(shí)運(yùn)行, 4個(gè)運(yùn)算單元4個(gè)時(shí)鐘周期可以解碼出一個(gè)4×4塊,,提高了解碼速度,。
2.3 plane模塊設(shè)計(jì)
2.3.1 簡化 plane預(yù)測模式
Intra_16×16_Plane模式和色度塊Intra_chroma_Plane模式是幀內(nèi)預(yù)測中最復(fù)雜的預(yù)算模式,為了滿足系統(tǒng)實(shí)時(shí)處理的要求,可提前預(yù)算plane模式需要的一些參數(shù),。本文以Intra_16×16_Plane為例介紹如何簡化plane模式,,Intra_chroma_Plane方法類同。
在plane模式運(yùn)算中要用到乘法,,為了節(jié)約硬件資源,,采用移位來實(shí)現(xiàn)乘法,其中參數(shù)a,、b、c的計(jì)算公式為:
上述公式,,首先求得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è)計(jì)
plane模式的關(guān)鍵是求得參數(shù)H和V,,其硬件設(shè)計(jì)如圖6所示。以V為例介紹本電路,。
舉例說明本運(yùn)算單元如何計(jì)算出參數(shù)H:
當(dāng)a=a11,、b=a12、c=a3、d=a3,、sum=0,、mux1=0、IS6=0,、IS7=0,、shift1=0、shift2=1時(shí),,就可以求得A1+A3,。a=a21、b=a22,、c=a51,、d=a52、sum=0,、mux1=0,、IS6=0、IS7=0,、shift1=1,、shift2=2時(shí),就可以求得A2+A5,,并依照這個(gè)運(yùn)算單元可求出A4+A6和A8+A7,。
本電路4個(gè)時(shí)鐘周期就可以求得H或V,所以共需要8個(gè)時(shí)鐘周期求H和V,。本方法與通常方法相比,,只計(jì)算一次A、b,、c的值,,其他位置的預(yù)測值只需要在A的基礎(chǔ)上加上b或者c的倍數(shù),降低了復(fù)雜度,。
3 實(shí)驗(yàn)結(jié)果
本設(shè)計(jì)使用Verilog HDL完成硬件代碼的編寫,,并用Altera公司的Quartus II 8.0進(jìn)行代碼的仿真和綜合。圖7為核心單元prediction模塊的仿真結(jié)果,,PE0_out,、PE1_out、PE2_out,、PE3_out9為4個(gè)并行單元的輸出,。采用Altera公司的Cyclone II進(jìn)行本設(shè)計(jì)FPGA驗(yàn)證,本設(shè)計(jì)占用的邏輯資源數(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.