基于OMAP的MPEG-4實時解碼器的實現(xiàn)
2.3 程序的優(yōu)化考慮
本文引用地址:http://2s4d.com/article/86685.htm(1)合理分配存儲位置。TMS320C55x的片內(nèi)存儲器容量小而存取速度快,片外存儲器容量大但存取速度慢。在分配存儲器的時候應(yīng)考慮到這個特點合理地安排程序各部分。對于那些使用頻繁的變量應(yīng)考慮放在片內(nèi),如VLC表、運動矢量、反量化、反DCT的系數(shù)以及其它中間變量都應(yīng)放在片內(nèi),而對于那些執(zhí)行次數(shù)比較少或者比較大的變量如參考幀和當前解碼出的幀則應(yīng)該放在片外。此外由于編譯和分配空間是以文件為單位的,所以應(yīng)當把使用頻繁的函數(shù)盡量放在相同的幾個文件中,再將這幾個文件放入片內(nèi)存儲器以高效地利用有限的片內(nèi)資源。
(2)數(shù)據(jù)傳輸?shù)墓芾?。對于視頻解碼工作來說,TMS320C55x的片內(nèi)存儲器資源不是很多,必須合理利用。例如一幀4:2:0的QCIF(176×144)圖像,如果以緊湊的方式(2個字節(jié)存到一個16bit的字中)存放也需要18K字。因此不可能在解碼時把一整幀都放在片內(nèi),而應(yīng)考慮使用DMA在需要時把圖像的一部分傳入片內(nèi)進行處理。此外,為了使CPU訪問和DMA傳輸同時無沖突地進行,將數(shù)據(jù)訪問設(shè)計成乒乓結(jié)構(gòu)。在解I幀時片內(nèi)準備兩個大小為一宏塊行的存儲區(qū)用于存放YUV數(shù)據(jù),CPU將解碼的一宏塊行數(shù)據(jù)放在其中一塊后,DMA把這一宏塊行的數(shù)據(jù)傳輸?shù)狡鈱?yīng)的位置,同時CPU解下一宏塊行的數(shù)據(jù)并將結(jié)果放在另外一塊存儲區(qū),DMA再傳送此塊的數(shù)據(jù),如此反復(fù)執(zhí)行。選擇兩宏塊行大小的原因是不能使用片內(nèi)太多的存儲器資源,同時如果每次解碼傳輸?shù)臄?shù)據(jù)太少將過于頻繁地啟動DMA,導(dǎo)致效率下降,折衷考慮決定在片內(nèi)為解碼數(shù)據(jù)開辟兩宏塊行大小的緩存。而在解P幀的時候因為要先讀入?yún)⒖紟哪承?shù)據(jù)所以更為復(fù)雜。在片內(nèi)開辟兩塊緩存,用以存放對Inter宏塊進行運動補償所需的參考幀中對應(yīng)搜索范圍內(nèi)的數(shù)據(jù),同時準備兩個宏塊大小的片內(nèi)空間用于存放當前宏塊解碼的結(jié)果(為描述方便稱為M1和M2)。此時需要使用兩個DMA通道,通道1負責(zé)將解當前宏塊進行運動補償時所需的參考幀部分數(shù)據(jù)讀到片內(nèi)緩存中,通道2負責(zé)將解碼的數(shù)據(jù)傳輸?shù)狡鈱?yīng)的空間。先啟動通道1讀所需參考幀數(shù)據(jù)到緩存1,CPU用這些數(shù)據(jù)和讀入的碼流對Inter宏塊進行運動補償解出當前宏塊的數(shù)據(jù)放入M1,同時通道1讀下一宏塊所需的參考幀數(shù)據(jù)到緩存2。之后CPU、通道1、通道2并行工作,CPU利用緩存2的數(shù)據(jù)解下一宏塊放入M2,通道1再讀數(shù)據(jù)到緩存1中,通道2將解碼的數(shù)據(jù)從M1傳輸?shù)狡鈱?yīng)的空間,如此循環(huán),P幀利用DMA解碼如圖3所示。
(3)使用TI提供的IMGLIB庫函數(shù)。IMGLIB是專門為圖像處理和視頻提供的庫,用來提高視頻處理速度。這些庫函數(shù)中有的是軟件庫函數(shù),是用匯編寫成的高效代碼例如反量化函數(shù)IMG_dequantize_8x8等;有的則是硬件庫函數(shù),它們利用OMAP1510芯片中一些專門為視頻編解碼的硬件加速模塊來處理數(shù)據(jù),如利用反DCT模塊的IMG_idct_8x8等,這些函數(shù)處理數(shù)據(jù)的速度更快,效率更高。在使用某些庫函數(shù)的時候需要按照其接口的要求調(diào)整。
(4)使用DSP內(nèi)部固定的intrinsics指令,這些指令主要執(zhí)行一些簡單的算術(shù)操作,由于它們是由優(yōu)化的匯編代碼寫成,因而使用它們可以提高代碼執(zhí)行的效率。
(5)其它一些優(yōu)化考慮和措施。為了使程序的效率更高,采用了一些代碼優(yōu)化的措施,例如將一些循環(huán)內(nèi)部展開,特別是對多重循環(huán)的控制,如果外層循環(huán)較少,可將內(nèi)層循環(huán)展開,把轉(zhuǎn)移條件結(jié)合起來,以減少內(nèi)層與外層之間的相互聯(lián)系,減少判斷轉(zhuǎn)移并實現(xiàn)并行操作。又如利用DMA來代替原有的復(fù)制函數(shù)、為方便將浮點數(shù)定點化、使用移位操作代替乘除法等。此外,在應(yīng)用到多媒體通信中,采用支持數(shù)據(jù)分割的方法來有效控制無線通信中可能產(chǎn)生的誤碼。
3 測試結(jié)果
使用QCIF(176×144)的兩測試碼流foreman和carphone(各編碼100幀)在使用數(shù)據(jù)分割和沒使用數(shù)據(jù)分割的情況下得到的解碼速度(包括顯示部分)如表1所示。
從表1可以看出,本文提出的方法基本上能夠滿足MPEG-4實時解碼的需求,即使對比較復(fù)雜的使用數(shù)據(jù)分割的序列,仍能達到25幀/秒(fps)以上,圖像的質(zhì)量也比較好,因此適合在無線終端實現(xiàn)多媒體的應(yīng)用。
OMAP平臺因其獨有的雙核結(jié)構(gòu)和為無線應(yīng)用提供了一個強大的軟硬件基礎(chǔ)。本文結(jié)合其在MPEG-4解碼中應(yīng)用的實例,具體闡述了OMAP1510的軟件優(yōu)化開發(fā)方法,并基本上實現(xiàn)了實時解碼,希望能對使用OMAP或準備使用的開發(fā)人員具有借鑒意義。
參考文獻
1 Jamil Chaoi. Dedicated Systems Magazine. 2001 Q2.
2 謝 凱.開放式的多媒體應(yīng)用平臺OMAP.電子技術(shù)應(yīng)用,2001;27(11)
3 TI公司. OMAP1510 Multimedia Processor Technical Reference Manual. Dec.2002
4 宋 彬,常義林.視頻通信抗誤碼方法研究的新進展.電子學(xué)報,2002;(10)
5 ISO/IEC JTC 1/SC 29/WG 11 N 3056, Information technology-Coding of audio-viusal objects-Part2:Visual, Version 1.0, Jan ,2000
評論