H.264在A(yíng)DSP-BF561上的實(shí)現與優(yōu)化
2.1.2 ADSP-561 EZkite
ADSP-BF561視頻編碼器平臺采用ADI公司的ADSP-BF561 EZ-kit Lite評估板。此評估板包括1塊ADSP-BF561處理器、32 MB SDRAM和4 MB Flash,板中的AD-V1836音頻編解碼器可外接4輸入/6輸出音頻接口;而ADV7183視頻解碼器和ADV7171視頻編碼器則可外接3輸入/3輸出視頻接口。此外,該評估板還包括1個(gè)UART接口、1個(gè)USB調試接口和1個(gè)JTAG調試接口。攝像頭輸入的模擬視頻信號經(jīng)視頻芯片ADV7183A轉化為數字信號,此信號從ADSP-BF561的PPI1(并行外部接口)進(jìn)入ADSP-BF561芯片進(jìn)行壓縮,壓縮后的碼流則經(jīng)ADV7179轉換后從ADSP-BF561的PPI2口輸出。此系統可通過(guò)Flash加載程序,并支持串口及網(wǎng)絡(luò )傳輸。編碼過(guò)程中的原始圖像、參考幀等數據可存儲在SDRAM中。
2.2 算法選取與優(yōu)化方案
2.2.1 算法選取
H.264實(shí)現的源代碼不止一種,其中最常見(jiàn)的有JM、X264和T264。對比這三種實(shí)現源代碼,X264比T264具有更高的效率。而且相比廣泛采用的JM編碼模型,X264在兼顧編碼質(zhì)量的同時(shí)大幅度地提升了編碼速度,所以選取X264作為算法原型。
2.2.2 優(yōu)化方案
該優(yōu)化方案從三個(gè)層次對算法進(jìn)行優(yōu)化:算法層次、代碼層次、平臺層次。下面介紹具體優(yōu)化方法。
2.2.2.1 編碼器具體參數的選擇
該編碼器使用main檔次,I、B、P幀量化值分別為26、31、29,流控參數選為CBR。IDR幀間隔設為50,B幀間隔為2幀。這樣的選擇是為了在速度和運算量上取折中。選用B幀并將其量化值加大,可比baseline檔次、IPPP結構提高約10%的壓縮率。而B(niǎo)幀的計算量,因其不用做參考幀,故無(wú)需進(jìn)行去塊濾波和插值計算,在31的qp下,很多塊會(huì )被判做skip模式編碼,因而多數時(shí)B幀總運算量候反而較P幀低。
2.2.2.2 算法層次的優(yōu)化
算法層次的優(yōu)化主要是指在參數選定的情況下,對部分算法所作的替換或優(yōu)化。和參數的選擇一樣,算法層次優(yōu)化也主要受優(yōu)化策略的指導。如運動(dòng)匹配準則是選用SSD、SAD或SATD。如果只看中準確程度,則選擇SSD最佳;如果只看中運行速度,則選擇SAD最佳;如果要兼顧二者,則選用SATD是比較好的一個(gè)方案。在進(jìn)行算法優(yōu)化時(shí)還應該注意一個(gè)問(wèn)題,即要考慮實(shí)際運行平臺的支持情況。如在追求速度的策略下,匹配準則選用SAD,如果只計算一半的點(diǎn)則會(huì )大大降低運算速度。但是如果考慮ADSP-BF561匯編指令的設計情況,就會(huì )發(fā)現這樣做反而會(huì )增加指令數,會(huì )使速度更低。算法層次優(yōu)化包括如下幾個(gè)部分:
(1)除法求余。改進(jìn)策略是浮點(diǎn)型算法盡量改為整型,64位盡量改為32位,32位盡量改為16位。而對于某些計算比較多的,則改為查表計算。在A(yíng)DSP-BF561平臺上,一次32位整形除法需耗時(shí)300個(gè)CYCLE,而查表僅需幾個(gè)CYCLE,這樣的改進(jìn)能顯著(zhù)提高速度。
(2)飽和函數。在視頻的計算中,幾乎每次像素的計算都會(huì )調用飽和函數,X264代碼的實(shí)現中已將這部分代碼改為查表函數,在其他的編解碼器實(shí)現中也有將這部分改為一個(gè)判斷和幾個(gè)邏輯運算的形式。對大部分DSP平臺,采用判斷跳轉會(huì )打斷流水線(xiàn),即使平臺有比較好的跳轉預測功能,打斷流水仍然會(huì )造成stall。所以查表方法是一種高效方法。而在A(yíng)DSP-BF561匯編指令中,可以通過(guò)設置指令后綴或使用某些特殊指令來(lái)進(jìn)行飽和工作。甚至不用查表,在不同的場(chǎng)合使用不同的飽和算法能大大提高代碼的執行效率。
(3)MC部分函數。實(shí)測中發(fā)現MC部分函數運行效率不如ffmpeg解碼器中MC部分效率高,所以將這部分代碼用ffmpeg中的相應部分替換。此外qpel16_hv函數中計算有冗余,減少這些冗余能提高代碼運行效率。
(4)算法替代和改進(jìn)。幀間預測的改進(jìn):關(guān)于算法的改進(jìn)主要集中在對me(motion estimation)的改進(jìn)上,流程如圖2所示。costmin1=min(cost16,cost8,cost16×8,cost8×16),costmin2=min(costmin1,costsub),依次在16×16、8×8、16×8和8×16大小宏塊的整像素位置做預測,再做次像素估計和幀內預測,選用匹配準則函數(采用sad作為匹配準則函數)取得最小值的模式進(jìn)行編碼。每計算一種模式,都將sad值與一個(gè)經(jīng)驗閥值做比較。當sad值小于這個(gè)閥值時(shí),立即結束運動(dòng)估計,從而減少運算量。本文引用地址:http://dyxdggzs.com/article/166951.htm
幀內預測的改進(jìn):H.264標準所采用的幀內預測模式除了DC模式都具有方向性,相鄰4×4塊都具有相關(guān)性。根據這樣的相關(guān)性,只將當前4×4塊上邊和左邊選用預測模式及其相鄰的兩種預測模式作為當前4×4塊的預測模式,當其閥值都大于一個(gè)經(jīng)驗閥值時(shí),才采用DC模式。這樣的方案不用一一計算9種預測模式,在復雜度、編碼效率、質(zhì)量和速度上取了一個(gè)折中。流程如圖3所示。
評論