引言
與H.263協(xié)議相比,H.264協(xié)議的基本算法仍然是通過幀間預(yù)測和運動補償消除時域的冗余,經(jīng)過變換編碼消除頻域的冗余。但是,在計算精度和其它一些具體細節(jié)上都有所改進,這既是H.264協(xié)議優(yōu)于H.263協(xié)議的關(guān)鍵所在,同時也是提高H.264編碼器運算速度的最大瓶頸。這些關(guān)鍵技術(shù)可以概括為:1/4象素精度的運動預(yù)測與補償,基于4×4塊的DCT變換,以及基于最小4×4塊的多種運動預(yù)測與補償模式。
H.264協(xié)議推出了一系列測試程序——JM系列,本文的優(yōu)化方案就是針對JM61程序在TMS320C64xx系列DSP芯片上的移植而進行的。
通過對整個程序的分析可以看出,在編碼端,encode_one_ macroblock()函數(shù)是實現(xiàn)整個協(xié)議的關(guān)鍵函數(shù),也是對一個宏塊編碼的全部過程,因此,對這個函數(shù)優(yōu)化的程度直接決定了編碼器的編碼速度。雖然JM系列程序隨著H.264協(xié)議的發(fā)展而不斷更新,但它始終是以測試為目的,內(nèi)部結(jié)構(gòu)還存在許多冗余,大量的判斷以及循環(huán)語句也不適合DSP程序的執(zhí)行。
基于DSP的優(yōu)化方案
塊匹配方案的優(yōu)化
在H.264協(xié)議中,將每個宏塊的inter預(yù)測模式分為7種,需要在參考幀中尋找每種模式的最佳匹配塊。目前,判斷兩個子塊匹配最常用的準則是求幀間亮度的最小絕對誤差值(SAD值),JM61參考程序采用的也是這個準則,其公式為:
其中表示當前幀圖像中的象素點,表示參考幀圖像中的象素點,i、j分別表示當前搜索點pos的偏移量。
由于DSP片內(nèi)空間有限,不可能將參與計算的兩個因子(和)全部放在片內(nèi),而SAD值的計算又是進行整象素搜索的關(guān)鍵,在編碼一個宏塊時,這個公式被反復(fù)調(diào)用,因此,有必要在進行SAD計算之前引入?yún)⒖即按嬖瓉淼膮⒖紟�。參考窗是參考幀中的有效�?shù)據(jù)部分,包含了當前宏塊的整象素運動搜索范圍之內(nèi)的所有參考點,并且對一個宏塊進行編碼時只需要引入一次,所占用的空間較小,因而可以將參考窗數(shù)據(jù)放在片內(nèi),利于存取與計算,編碼下一個宏塊時再對窗中的數(shù)據(jù)進行刷新。
填充參考窗的過程可以分為兩種情況:第一種情況是所有的搜索點都在參考幀的內(nèi)部,并沒有超出參考幀圖像的邊界,在這種情況下,可以利用EDMA直接進行數(shù)據(jù)搬移,只需要配置幾個寄存器啟動EDMA,只占用很少的CPU資源,這樣既沒有增加數(shù)據(jù)搬移時間,又能在計算SAD時保證數(shù)據(jù)放在片內(nèi),從而提高運算速度。第二種情況是在搜索范圍之內(nèi)的參考點并不都在參考幀圖像內(nèi)部,有一部分超出了圖像的邊界,對于這些超出了邊界的參考點,需要用與之最臨近的邊界點代替,根據(jù)出邊界的情況需要進行不同處理。沒有出邊界的參考點仍然可以用EDMA或者QDMA進行搬移。
參考窗的大小是由搜索范圍決定的, 參考程序中采用的搜索方法是搜索范圍為16的全搜索算法(FS),這種算法的優(yōu)點在于能夠100%地搜索到最佳匹配塊,保證圖像的質(zhì)量,然而帶來的缺