王慶春,何曉燕,曹喜信
(1.安康學(xué)院 電子與信息技術(shù)研究中心,陜西 安康 725000;2.北京大學(xué) 軟件與微電子學(xué)院,北京 102600)
分?jǐn)?shù)像素運(yùn)動估計(jì)(Fractional Motion Estimation,F(xiàn)ME)是H.264/AVC標(biāo)準(zhǔn)中實(shí)現(xiàn)幀間預(yù)測編碼的重要技術(shù),其主要功能包括分?jǐn)?shù)像素插值、拉格朗日模式選取和運(yùn)動補(bǔ)償;雖然它對編碼壓縮性能有0.5~2 dB的提升[1],但由于其預(yù)測運(yùn)算流程復(fù)雜,功能子模塊多,實(shí)現(xiàn)結(jié)構(gòu)復(fù)雜,硬件利用率低,成為H.264/AVC編碼器芯片設(shè)計(jì)中的難點(diǎn)。為了提高編碼器的硬件效率,F(xiàn)ME的結(jié)構(gòu)設(shè)計(jì)需要在設(shè)計(jì)方法上根據(jù)具體的系統(tǒng)需求,遵循面積和速度的平衡與互換設(shè)計(jì)原則,盡可能地通過功能模塊復(fù)用來減小FME模塊的硬件實(shí)現(xiàn)代價(jià),開發(fā)出與之相適應(yīng)的、高效的VLSI設(shè)計(jì)結(jié)構(gòu)。
在H.264/AVC視頻編碼器的VLSI設(shè)計(jì)中,由于編碼系統(tǒng)的目標(biāo)檔次、編碼圖像的大小和使用范圍有較大差別,這就給FME的數(shù)據(jù)處理能力提出了不同的具體要求。只有針對具體編碼需求的FME設(shè)計(jì)才是優(yōu)化的;而不能盲目地追求運(yùn)算速度或最小化面積。根據(jù)H.264/AVC的編碼數(shù)據(jù)流程合理使用并行處理結(jié)構(gòu)、時(shí)序串行和流水處理結(jié)構(gòu)來優(yōu)化設(shè)計(jì)FME的1/2像素運(yùn)動估計(jì)、1/4像素運(yùn)動估計(jì)、宏塊編碼模式選?。ɡ窭嗜漳J脚袛啵┖蛶g運(yùn)動補(bǔ)償(MC)等4個(gè)基本功能模塊,在芯片面積和編碼速度之間尋求最佳的平衡。筆者針對不同的H.264/AVC視頻編碼系統(tǒng),提出了4種FME的VLSI結(jié)構(gòu)設(shè)計(jì)來滿足不同的編碼需求。
H.264/AVC視頻編解碼標(biāo)準(zhǔn)中的幀間運(yùn)動估計(jì)使用了可變塊、多參考幀和率失真優(yōu)化(RDO)技術(shù)而獲得了較高的視頻編碼效率,同時(shí)這些復(fù)雜算法也使編碼運(yùn)算過程變得更加復(fù)雜[1-3]。這些技術(shù)具體到FME中,首先,要求在每個(gè)參考幀中對宏塊的7種分割子塊 (41個(gè)子塊)依次進(jìn)行1/2像素的運(yùn)動估計(jì)和1/4像素的運(yùn)動估計(jì);然后,在1/4像素運(yùn)動搜索結(jié)的基礎(chǔ)上進(jìn)行宏塊編碼模式選取 (8×8塊編碼模式和16×16塊編碼模式判斷);最后,根據(jù)得到的最佳宏塊編碼模式再進(jìn)行幀間運(yùn)動補(bǔ)償(亮度殘差計(jì)算)。而且,上述的分?jǐn)?shù)像素運(yùn)動估計(jì)和宏塊編碼模式選取都是要通過計(jì)算率失真代價(jià) (RD_cost)來完成的;這里的率失真代價(jià)計(jì)算不但包括了編碼失真度SAD/SATD(絕對誤差和/絕對變換差和),而且還要考慮編碼運(yùn)動矢量(Motion Vector,MV)的編碼代價(jià)(編碼比特?cái)?shù))、參考幀的編碼代價(jià)和預(yù)測編碼模式代價(jià)[2,4-5]。
在基于宏塊(16×16)流水的H.264/AVC視頻編碼器芯片設(shè)計(jì)中,F(xiàn)ME的VLSI設(shè)計(jì)主要面臨著以下方面的挑戰(zhàn):首先,在分?jǐn)?shù)像素運(yùn)動估計(jì)過程中參與運(yùn)算的數(shù)據(jù)量大。對于1個(gè)16×16宏塊需要進(jìn)行分?jǐn)?shù)像素匹配運(yùn)算的子塊數(shù)目達(dá)到41×n個(gè),n表示參考幀數(shù)目,并且子塊的大小各異(4×4~16×16)。 對于多參考幀的視頻編碼系統(tǒng),待運(yùn)算的子塊數(shù)會成倍增長,這就要求必要的并行處理結(jié)構(gòu)來滿足系統(tǒng)的編碼運(yùn)算速度需求。
其次,F(xiàn)ME中的分?jǐn)?shù)像素要求插值到1/4精度 (亮度信號),要先用6階濾波器(FIR)完成1/2像素插值,再進(jìn)行雙線性1/4像素插值,插值后的數(shù)據(jù)量就會劇增。1個(gè)4×4子塊(128 bit)對應(yīng)的1/2像素匹配搜索區(qū)是9×9(648 bit),1/4 像素搜索區(qū)是 19×19(2888 bit),并且這些插值得到的分?jǐn)?shù)像素會在1/2像素運(yùn)估計(jì)、1/4像素運(yùn)動估計(jì)和幀間運(yùn)動補(bǔ)償這3個(gè)過程中重復(fù)使用,所以盡可能利用過程數(shù)據(jù)復(fù)用就能有效減小硬件實(shí)現(xiàn)代價(jià)。
最后,宏塊的編碼模式選?。ɡ窭嗜漳J脚袛啵┻^程極其復(fù)雜。這是因?yàn)楹陦K的編碼模式選取是在得到所有參考幀的所有子塊(41×n個(gè))的1/4像素運(yùn)動估計(jì)的率失真(RD_cost)代價(jià)后進(jìn)行的,要在259種可能分割模式中確定出1種模式;并且宏塊的編碼模式選取又包括針對所有參考幀的16×16宏塊編碼模式選取和針對每個(gè)參考幀的8×8子塊編碼模式選取這2個(gè)過程,把這個(gè)宏塊編碼模式選取過程映射到VLSI硬件結(jié)構(gòu)設(shè)計(jì)上也是一個(gè)難點(diǎn)。
根據(jù)文獻(xiàn)[5-6]中的復(fù)用設(shè)計(jì)思想,得到全復(fù)用的FME設(shè)計(jì)結(jié)構(gòu)如圖1所示,其中,1/2像素運(yùn)動估計(jì)、1/4像素運(yùn)動估計(jì)(包括宏塊編碼模式選取)和幀間運(yùn)動補(bǔ)償(MC)這3個(gè)數(shù)據(jù)處理階段是完全順序地進(jìn)行的。在全復(fù)用的FME設(shè)計(jì)結(jié)構(gòu)中,不同功能模塊的選擇組合就能實(shí)現(xiàn)不同階段的運(yùn)算。圖1中的路徑①完成了1/2像素運(yùn)動估計(jì);路徑②完成了1/4像素運(yùn)動估計(jì)和宏塊的幀間編碼模式選??;路徑③實(shí)現(xiàn)了幀間的運(yùn)動補(bǔ)償,這樣的設(shè)計(jì)使得1/2像素插值單元的硬件利用率達(dá)到100%(3個(gè)運(yùn)算階段復(fù)用),整個(gè)FME模塊的運(yùn)算速度都要受到它的制約;1/2像素運(yùn)動估計(jì)和1/4像素運(yùn)動估計(jì)復(fù)用了一個(gè)計(jì)算SATD的4×4塊處理單元(PU)陣列(9個(gè)PU),分?jǐn)?shù)像素運(yùn)動矢量代價(jià)計(jì)算的硬件結(jié)構(gòu)也是復(fù)用的。
全復(fù)用FME結(jié)構(gòu)雖然在每一步運(yùn)動估計(jì)的內(nèi)部采用了36倍數(shù)據(jù)并行度,PU陣列使用了9個(gè)處理單元PU(每個(gè)PU并行計(jì)算同一行上相鄰4個(gè)像素的殘差和變換)來并行計(jì)算9個(gè)分?jǐn)?shù)像素匹配位置的失真度SATD值,但是FME的3個(gè)數(shù)據(jù)處理階段是順序執(zhí)行的,因此這樣的FME設(shè)計(jì)在數(shù)據(jù)處理能力上是很有限的,對于使用2個(gè)參考幀運(yùn)動估計(jì)的H.264/AVC視頻編碼系統(tǒng),完成FME至少就需要3488個(gè)時(shí)鐘周期。如果要把它直接使用到H.264/AVC基本檔次(level 3,4個(gè)參考幀)、CIF 圖像格式(352×288)的實(shí)時(shí)(30 f/s)視頻編碼系統(tǒng)中,就要求有90 MHz以上的時(shí)鐘頻率。所以,這樣的全復(fù)用結(jié)構(gòu)FME比較適合于參考幀比較少的簡單視頻編碼系統(tǒng)。如果在FME模塊之前就解決了宏塊匹配的多參考幀問題,這樣的FME結(jié)構(gòu)也完全能夠應(yīng)用到復(fù)雜的H.264/AVC視頻編碼系統(tǒng)中。
H.264/AVC視頻編碼器的FME要對每一個(gè)參考幀的41個(gè)子塊(41個(gè)MV所對應(yīng)41個(gè)子塊)進(jìn)行1/2像素、1/4像素運(yùn)動估計(jì)和8×8子塊編碼模式選取,而16×16宏塊模式選取和幀間運(yùn)動補(bǔ)償是在所有參考幀運(yùn)算結(jié)果的基礎(chǔ)上進(jìn)行的[7],所以對不同參考幀進(jìn)行的1/2像素、1/4像素運(yùn)動估計(jì)、8×8子塊編碼模式選取可以采用并行處理結(jié)構(gòu)來實(shí)現(xiàn)硬件加速,提出的FME結(jié)構(gòu)如圖2所示。這個(gè)結(jié)構(gòu)中不同參考幀的數(shù)據(jù)處理是并行的,但是針對每個(gè)參考幀中41個(gè)子塊的1/2像素運(yùn)動估計(jì)和1/4像素運(yùn)動估計(jì)還是復(fù)用的VLSI設(shè)計(jì)。
圖2所示的FME結(jié)構(gòu)是針對H.264/AVC基本檔次(level 3,4個(gè)參考幀)的視頻編碼系統(tǒng),4個(gè)參考幀的分?jǐn)?shù)像素運(yùn)動估計(jì)模塊是并行的結(jié)構(gòu),而在每個(gè)模塊的內(nèi)部,1/2像素和1/4像素的運(yùn)動估計(jì)單元又是結(jié)構(gòu)復(fù)用的。在這個(gè)設(shè)計(jì)結(jié)構(gòu)中的宏塊編碼模式選取和幀間運(yùn)動補(bǔ)償又是一個(gè)獨(dú)立的結(jié)構(gòu) (各有獨(dú)立的分?jǐn)?shù)像素插值單元),這樣的結(jié)構(gòu)雖然硬件實(shí)現(xiàn)代價(jià)比較高、對參考像素存儲器的訪問帶寬大,但是它的數(shù)據(jù)處理能力強(qiáng)、運(yùn)算速度快,而且所能處理的參考幀數(shù)目也易于擴(kuò)展(并行擴(kuò)展并不改變FME的運(yùn)算速度)。部分模塊復(fù)用的FME結(jié)構(gòu)對于2個(gè)參考幀的H.264/AVC視頻編碼系統(tǒng),完成FME只需要1824個(gè)時(shí)鐘周期。如果把它使用到H.264/AVC 基本檔次(level 3,4 個(gè)參考幀)、CIF 圖像格式(352×288)的實(shí)時(shí)(30 f/s)視頻編碼系統(tǒng)中,要求的最低時(shí)鐘頻率降低到22 MHz,這一點(diǎn)對降低芯片動態(tài)功耗是比較有利的。
FME中的1/2像素運(yùn)動估計(jì)和1/4像素運(yùn)動估計(jì)雖然在整體上來說是要求順序執(zhí)行的,但是具體到每一個(gè)參考幀內(nèi)部41個(gè)子塊的1/2像素運(yùn)動估計(jì)和1/4像素運(yùn)動估計(jì)又可以安排成流水的處理結(jié)構(gòu) (子塊之間的流水處理),分成1/2像素運(yùn)動估計(jì)和1/4像素運(yùn)動估計(jì)兩級流水線完成。這樣可以很好地提高FME模塊的數(shù)據(jù)吞吐能力,但是整個(gè)流水線的控制比較困難,如圖3所示,在1/4像素運(yùn)動估計(jì)流水級需要不定的等待時(shí)鐘周期(出現(xiàn)流水線氣泡)。
圖4的流水FME結(jié)構(gòu)和圖2的FME結(jié)構(gòu)相近,只是把圖2中復(fù)用的分?jǐn)?shù)像素運(yùn)動估計(jì)部分替換成了基于流水的1/2像素運(yùn)動估計(jì)和1/4像素運(yùn)動估計(jì)。這樣的結(jié)構(gòu)可以使FME的使用周期數(shù)進(jìn)一步縮短,對于2個(gè)參考幀的H.264/AVC視頻編碼系統(tǒng),完成FME只需要1070個(gè)時(shí)鐘周期。如果把它使用到H.264/AVC基本檔次(level 3,4 個(gè)參考幀)、CIF 圖像格式(352×288)的實(shí)時(shí)(30 f/s)視頻編碼系統(tǒng)中,要求的最低時(shí)鐘頻率降低到了13 MHz。這種設(shè)計(jì)結(jié)構(gòu)會要求更高的硬件實(shí)現(xiàn)代價(jià),對參考像素存儲器(局部存儲器)的訪問帶寬也會進(jìn)一步加大,而且由于1/4像素運(yùn)動估計(jì)需要有不定時(shí)鐘周期數(shù)的等待時(shí)序(如圖3所示),使得分?jǐn)?shù)像素運(yùn)動估計(jì)流水線控制變得比較困難。
圖4所示的FME流水結(jié)構(gòu)中,1/2像素運(yùn)動估計(jì)、1/4像素運(yùn)動估計(jì)和幀間運(yùn)動補(bǔ)償都有獨(dú)立的分?jǐn)?shù)像素插值單元,但是從理論上講,1/2插值像素可以在1/4像素運(yùn)動估計(jì)中復(fù)用(1/4插值是在1/2插值數(shù)據(jù)的基礎(chǔ)上進(jìn)行的),1/4插值像素也可以在幀間運(yùn)動補(bǔ)償中復(fù)用。如果在FME設(shè)計(jì)中實(shí)現(xiàn)插值像素?cái)?shù)據(jù)的復(fù)用,就可以降低參考像素存儲器的訪問帶寬和插值單元的數(shù)目[8],圖5是基于插值像素緩存的FME結(jié)構(gòu)。
基于數(shù)據(jù)緩存的FME結(jié)構(gòu)中,在1/2像素運(yùn)動估計(jì)的同時(shí)要對1/2插值像素進(jìn)行緩存;1/4像素運(yùn)動估計(jì)的同時(shí)要對1/4插值像素進(jìn)行緩存。1/2像素緩存數(shù)據(jù)的取出是要根據(jù)1/2像素運(yùn)動估計(jì)的結(jié)果進(jìn)行選擇取出的;同樣,1/4緩存數(shù)據(jù)也是要根據(jù)宏塊編碼模式的選取結(jié)果進(jìn)行選擇取出的,很明顯這兩個(gè)存儲器的存儲數(shù)據(jù)有很大的冗余;并且存儲器的讀寫地址產(chǎn)生也是比較復(fù)雜的,但是這樣的結(jié)構(gòu)比較適合用FPGA來實(shí)現(xiàn) (FPGA內(nèi)部的內(nèi)嵌RAM單元可以得到充分的利用)。從理論上講,圖5的FME結(jié)構(gòu)的數(shù)據(jù)處理能力和圖4的結(jié)構(gòu)是一樣的,它對于2個(gè)參考幀的H.264/AVC視頻編碼系統(tǒng),完成FME也只需要1070個(gè)時(shí)鐘周期。如果把它使用到H.264/AVC基本檔次 (level 3,4個(gè)參考幀)、CIF圖像格式(352×288)的實(shí)時(shí)(30 f/s)視頻編碼系統(tǒng)中,要求的最低時(shí)鐘頻率也降低到了13 MHz。
筆者提出了全復(fù)用、部分模塊復(fù)用、流水處理和數(shù)據(jù)緩存的4種FME的VLSI設(shè)計(jì)結(jié)構(gòu),其中全復(fù)用的FME處理結(jié)構(gòu)硬件利用率最高,但數(shù)據(jù)吞吐量最小、速度最慢,只適合于參考幀比較少的低檔次的H.264/AVC視頻編碼系統(tǒng)?;诹魉幚砗蛿?shù)據(jù)緩存的FME結(jié)構(gòu)都屬于高速并行處理的結(jié)構(gòu),都是以較高硬件代價(jià)來獲得較高的數(shù)據(jù)處理能力,而前者需要復(fù)雜的流水線控制時(shí)序、后者需要更大的片內(nèi)存儲器。部分模塊復(fù)用FME結(jié)構(gòu)是高速和低代價(jià)之間的折中設(shè)計(jì)方案,整體結(jié)構(gòu)中既有每一參考幀數(shù)據(jù)處理的復(fù)用,同時(shí)又有不同參考幀數(shù)據(jù)處理上并行特點(diǎn),是一種中速的FME設(shè)計(jì)方案。
[1]Joint Video Team,Draft ITU-T Recommendation and Final DraftInternational Standard of Joint Video Specification,ITU-T Rec.H.264 and ISO/IEC 14496-10 AVC[S].2005.
[2]王慶春,何曉燕,曹喜信.H.264/AVC幀間宏塊編碼模式選擇的VLSI設(shè)計(jì)[J].電視技術(shù),2007,31(12):17-19.
[3]LIN Yu-kun,LIN Chia-chun,KUO Tzu-yun,et al.A hardware-efficient H.264/AVC motion-estimation design for high-definition video[J].IEEE Trans.Circuits and Systems,2008,55(6):1526-1535.
[4]王洪強(qiáng),郝軍.H.264幀間模式快速判決[J].電視技術(shù),2006,30(6):10-12.
[5]OKTEM S,HAMZAOGLU I.An efficient hardware architecture for quarter-pixel accurate H.264 motion estimation[C]//Proc.the 10th Euromicro Conference on Digital System Design Architectures,Methods and Tools.Washington.DC.,USA:IEEE Computer Society,2007:444-447.
[6]CHEN T C,HUANG Y W,CHEN L G.Fully utilized and reusable architecture for fractional motion estimation of H.264/AVC[EB/OL].[2010-01-20].http://ieeexplore.ieee.org/Xplore/login.jsp?reload=true&url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F9248%2F29347%2F01327034.pdf%3Farnumber%3D1327034&authDecision=-203.
[7]ZHAI Haihua,XI Zhiqi,CHEN Guanghua.VLSI implementation of subpixel interpolator for H.264/AVC encoder[C]//International Symposium on High Density packaging and Microsystem Integration,2007.Shang hai,China:[s.n.],2007:1-3.
[8]CHENTC,F(xiàn)ANGHC,LIANCJr,etal.Algorithmanalysisandarchitecture design for HDTV applications:a look at the H.264/AVC video compressor system[EB/OL].[2010-01-20].http://ntur.lib.ntu.edu.tw/handle/246246/141460.