基于OMAP的MPEG—4實(shí)時(shí)解碼器的實(shí)現 作者: 時(shí)間:2007-03-09 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 摘要:提出了一種在TI OMAPl510上實(shí)現MPEC—4實(shí)時(shí)視頻解碼的方法。該方法充分利用了0MAP雙核的特點(diǎn),同時(shí)采用軟件優(yōu)化來(lái)滿(mǎn)足實(shí)時(shí)的要求。仿真結果表明,該方法在保持質(zhì)量的情況下有較快的解碼速度,適合在無(wú)線(xiàn)終端實(shí)現多媒體的應用。關(guān)鍵詞:OMAPl510 MPEC—4解碼器 實(shí)時(shí)解碼 優(yōu)化 隨著(zhù)移動(dòng)通信和多媒體技術(shù)的發(fā)展,人們對通信的要求已不滿(mǎn)足于傳統的語(yǔ)音業(yè)務(wù),而是追求更高品質(zhì)的視頻、音頻等多媒體信息服務(wù)。在多媒體通信中,視頻區別于音頻和文字的顯著(zhù)特點(diǎn)是其大數據量以及高處理復雜度?,F有的移動(dòng)終端一般采用DSP芯片作為核心,DSP芯片在數據處理方面具有較多的優(yōu)勢,但其系統處理和控制能力比較弱。第三代移動(dòng)通信(3G)終端需要提供更多更復雜的服務(wù)如實(shí)時(shí)視頻交互等,原有的DSP芯片很難滿(mǎn)足這些需求[1]。TI公司提出了開(kāi)放式多媒體應用平臺OMAP (Open Multimedia Applications Platform)體系結構,并為此設計了OMAP處理器。筆者利用本文提出的方法在使用TI OMAPl510的PocketPC上實(shí)現了MPEG-4簡(jiǎn)單級(simple profile)解碼,基本滿(mǎn)足了實(shí)時(shí)的要求,同時(shí)保持了較好的質(zhì)量。 1 開(kāi)放式多媒體平臺(OMAP) OMAP采用一種獨特的雙核結構,把控制性能較強的ARM處理器與高性能低功耗的DSP核結合,是一種開(kāi)放式的、可編程的基于DSP的體系結構。主要目標是滿(mǎn)足2.5G和3G網(wǎng)絡(luò )上移動(dòng)電話(huà)、PDA上的語(yǔ)音與多媒體需要。圖11.1 OMAP的硬件平臺 OMAP硬件平臺主要由DSP核、ARM核以及業(yè)務(wù)控制器(Traffic Controller)組成。這三部分可以獨立地進(jìn)行時(shí)鐘管理,有效地控制功耗。OMAP硬件平臺采用雙核技術(shù)提高操作系統的效率和優(yōu)化多媒體代碼的執行。實(shí)時(shí)性任務(wù)如實(shí)時(shí)視頻通信等由DSP完成,非實(shí)時(shí)性任務(wù)和系統控制工作如界面交互、操作系統等由ARM完成[2]。例如,使用者在進(jìn)行視頻通信時(shí)可以同時(shí)使用操作系統上的應用軟件如Word、Excel等,這樣分別利用了DSP低功耗而又較強數據處理能力和ARM的較強控制能力的優(yōu)勢。與傳統只使用ARM或者只使用DSP芯片的移動(dòng)終端相比,OMAP成功地解決了性能與功耗的最佳組合問(wèn)題。 OMAP硬件平臺不斷升級,以滿(mǎn)足日益增長(cháng)的應用需求。本文使用OMAPl510芯片,它的兩個(gè)關(guān)鍵部分是TI增強型ARM925 (TI925T) 和TMS320C55x DSP。TMS320C55x DSP的工作主頻為200MHz,內部有32K字雙存取SRAM,48K字單存取SRAM和12K字的高速指令緩存。它具有高度的并行能力,32位讀寫(xiě)和功能強大的EMIF、雙流水線(xiàn)的獨立操作以及雙MAC的運算能力。它采用了三項關(guān)鍵的革新技術(shù):增大的空閑省電區域、變長(cháng)指令、擴大的并行機制。此外TMS320C55x DSP核增加了處理運動(dòng)估計、離散余弦變換(DCT)、離散余弦反變換(IDCT)、1/2像素插值的硬件加速器,降低了視頻處理的功耗,其結構對于多媒體應用高度優(yōu)化,適合低功耗的實(shí)時(shí)語(yǔ)音圖像處理。TI增強型ARM925采用ARM9TDMI技術(shù),工作主頻為175MHz,有16K字節的高速指令緩存、8K字節的高速數據緩存和17個(gè)字的寫(xiě)緩沖。ARM和DSP都可以訪(fǎng)問(wèn)內部SRAM和外部存儲器接口,但ARM是平臺的核心,它能訪(fǎng)問(wèn)全部16M字節的內存空間和DSP的128K字節的I/O空間。 1.2 OMAP的軟件平臺 OMAP的軟件結構建立在兩個(gè)操作系統之上,一個(gè)是基于A(yíng)RM的操作系統如WindowsCE、Linux等;另一個(gè)是基于DSP的實(shí)時(shí)操作系統(RTOS)DSP/BIOS。無(wú)縫連接兩個(gè)操作系統的關(guān)鍵技術(shù)是DSP/BIOS橋。DSP/BIOS橋建立的這種連接使ARM端的客戶(hù)能與DSP上的任務(wù)交換信息和數據[3]。對于軟件開(kāi)發(fā)者來(lái)說(shuō),DSP/BIOS橋提供了一種使用DSP的無(wú)縫接口,開(kāi)發(fā)者可以在GPP(通用處理器,包括ARM)上使用標準應用編程接口訪(fǎng)問(wèn)并控制DSP的運行環(huán)境。 2 MPEG—4實(shí)時(shí)視頻解碼在OMAP上的軟件實(shí)現 2.1 MPEG-4解碼流程 MPEG-4標準因其給出多種抗誤碼工具而適于應用在無(wú)線(xiàn)信道環(huán)境下的多媒體通信[4]。本文實(shí)現的是主要應用于無(wú)線(xiàn)通信的簡(jiǎn)單級(simple profile)[5],因而只使用了I幀和P幀。其解碼的流程如圖1所示。如果是I幀,碼流中主要是紋理信息,經(jīng)過(guò)可變長(cháng)(VLC)解碼、反掃描、反預測、反量化和反DCT(IDCT)可以直接得到重構的幀。如果是P幀,碼流中還含有運動(dòng)矢量信息,經(jīng)過(guò)VLC解碼、反掃描、反預測、反量化和反DCT得到的只是殘差信息。利用解碼得到的運動(dòng)矢量、殘差信息和參考幀進(jìn)行運動(dòng)補償可以得到重構的幀。2.2 在OMAPl510上的程序結構 在OMAP上開(kāi)發(fā)程序通常分為兩部分,一部分是使用Embedded Visual C開(kāi)發(fā)ARM端程序,另一部分是使用TI CCS開(kāi)發(fā)DSP端程序。前者主要是為了使設計的算法與xDAIS(eXpressDSP TM算法標準)兼容,在A(yíng)RM端程序中調用一些DSP/BIOS橋的API實(shí)現在DSP上初始化信號處理任務(wù)、與DSP任務(wù)交換消息、對來(lái)自DSP和從DSP發(fā)出的數據流進(jìn)行緩沖、暫停、繼續、刪除DSP任務(wù)并進(jìn)行資源狀態(tài)查詢(xún)等。而具體的功能實(shí)現則是在DSP端完成。圖2顯示了TI-enhanced ARM925應用程序與DSP節點(diǎn)之間的關(guān)系。 通過(guò)寫(xiě)節點(diǎn)封裝器的創(chuàng )建、執行及刪除函數,將xDAIS算法封裝于DSP節點(diǎn)中。創(chuàng )建函數可分配節點(diǎn)處理和xDAIS算法所需的存儲器,還可分配節點(diǎn)的相關(guān)模塊。這些模塊是傳遞到執行和刪除函數的一種結構。創(chuàng )建函數還可給出xDAIS算法的實(shí)例,并可將其激活,還可初始化任何在任務(wù)執行前必須初始化的數據或參數。執行函數是主要的分派函數,在此函數執行階段中一般不分配存儲器及其它資源。執行函數一般包括消息處理循環(huán),該循環(huán)可中斷函數并等待來(lái)自ARM925的消息或數據流,然后節點(diǎn)將這些消息或數據分派到合適的xDAIS控制或處理任務(wù)中去。同時(shí)執行函數查詢(xún)DSP/BIOS橋所發(fā)送的指示函數退出循環(huán)的特殊消息,然后檢查定制消息或流數據,并對這些消息或數據流進(jìn)行適當處理。刪除函數清空創(chuàng )建函數所分配的資源,包括相關(guān)模塊和數據流。刪除函數還必須關(guān)閉算法、釋放存儲器以及分配給節點(diǎn)的其它資源。 2.3 程序的優(yōu)化考慮 (1)合理分配存儲位置。TMS320C55x的片內存儲器容量小而存取速度快,片外存儲器容量大但存取速度慢。在分配存儲器的時(shí)候應考慮到這個(gè)特點(diǎn)合理地安排程序各部分。對于那些使用頻繁的變量應考慮放在片內,如VLC表、運動(dòng)矢量、反量化、反DCT的系數以及其它中間變量都應放在片內,而對于那些執行次數比較少或者比較大的變量如參考幀和當前解碼出的幀則應該放在片外。此外由于編譯和分配空間是以文件為單位的,所以應當把使用頻繁的函數盡量放在相同的幾個(gè)文件中,再將這幾個(gè)文件放入片內存儲器以高效地利用有限的片內資源。 (2)數據傳輸的管理。對于視頻解碼工作來(lái)說(shuō),TMS320C55x的片內存儲器資源不是很多,必須合理利用。例如一幀4∶2∶0的QCIF(176x144)圖像,如果以緊湊的方式(2個(gè)字節存到一個(gè)16bit的字中)存放也需要18K字。因此不可能在解碼時(shí)把一整幀都放在片內,而應考慮使用DMA在需要時(shí)把圖像的一部分傳入片內進(jìn)行處理。此外,為了使CPU訪(fǎng)問(wèn)和DMA傳輸同時(shí)無(wú)沖突地進(jìn)行,將數據訪(fǎng)問(wèn)設計成乒乓結構。在解I幀時(shí)片內準備兩個(gè)大小為一宏塊行的存儲區用于存放YUV數據,CPU將解碼的一宏塊行數據放在其中一塊后,DMA把這一宏塊行的數據傳輸到片外對應的位置,同時(shí)CPU解下一宏塊行的數據并將結果放在另外一塊存儲區,DMA再傳送此塊的數據,如此反復執行。選擇兩宏塊行大小的原因是不能使用片內太多的存儲器資源,同時(shí)如果每次解碼傳輸的數據太少將過(guò)于頻繁地啟動(dòng)DMA,導致效率下降,折衷考慮決定在片內為解碼數據開(kāi)辟兩宏塊行大小的緩存。而在解P幀的時(shí)候因為要先讀入參考幀的某些數據所以更為復雜。在片內開(kāi)辟兩塊緩存,用以存放對Inter宏塊進(jìn)行運動(dòng)補償所需的參考幀中對應搜索范圍內的數據,同時(shí)準備兩個(gè)宏塊大小的片內空間用于存放當前宏塊解碼的結果(為描述方便稱(chēng)為M1和M2)。此時(shí)需要使用兩個(gè)DMA通道,通道1負責將解當前宏塊進(jìn)行運動(dòng)補償時(shí)所需的參考幀部分數據讀到片內緩存中,通道2負責將解碼的數據傳輸到片外對應的空間。先啟動(dòng)通道1讀所需參考幀數據到緩存1,CPU用這些數據和讀人的碼流對Inter宏塊進(jìn)行運動(dòng)補償解出當前宏塊的數據放入M1,同時(shí)通道1讀下一宏塊所需的參考幀數據到緩存2。之后CPU、通道1、通道2并行工作,CPU利用緩存2的數據解下一宏塊放入M2,通道1再讀數據到緩存1中,通道2將解碼的數據從M1傳輸到片外對應的空間,如此循環(huán),P幀利用DMA解碼如圖3所示。(3)使用TI提供的IMCLIB庫函數。IMCLIB是專(zhuān)門(mén)為圖像處理和視頻提供的庫,用來(lái)提高視頻處理速度。這些庫函數中有的是軟件庫函數,是用匯編寫(xiě)成的高效代碼例如反量化函數IMG_dequantiZe_8x8等;有的則是硬件庫函數,它們利用OMAPl510芯片中一些專(zhuān)門(mén)為視頻編解碼的硬件加速模塊來(lái)處理數據,如利用反DCT模塊的IMG_idct_8x8等,這些函數處理數據的速度更快,效率更高。在使用某些庫函數的時(shí)候需要按照其接口的要求調整。 (4)使用DSP內部固定的intrinsics指令,這些指令主要執行一些簡(jiǎn)單的算術(shù)操作,由于它們是由優(yōu)化的匯編代碼寫(xiě)成,因而使用它們可以提高代碼執行的效率。 (5)其它一些優(yōu)化考慮和措施。為了使程序的效率更高,采用了一些代碼優(yōu)化的措施,例如將一些循環(huán)內部展開(kāi),特別是對多重循環(huán)的控制,如果外層循環(huán)較少,可將內層循環(huán)展開(kāi),把轉移條件結合起來(lái),以減少內層與外層之間的相互聯(lián)系,減少判斷轉移并實(shí)現并行操作。又如利用DMA來(lái)代替原有的復制函數、為方便將浮點(diǎn)數定點(diǎn)化、使用移位操作代替乘除法等。此外,在應用到多媒體通信中,采用支持數據分割的方法來(lái)有效控制無(wú)線(xiàn)通信中可能產(chǎn)生的誤碼。 3 測試結果 使用QCIF(176%26;#215;144)的兩測試碼流foreman和car-phone(各編碼100幀)在使用數據分割和沒(méi)使用數據分割的情況下得到的解碼速度(包括顯示部分)如表1所示。表1 測試結果 使用數據分割沒(méi)使用數據分割foreman25.2fps27.9fpscarphone27.4fps29.9fps從表1可以看出,本文提出的方法基本上能夠滿(mǎn)足MPEG—4實(shí)時(shí)解碼的需求,即使對比較復雜的使用數據分割的序列,仍能達到25幀/秒(fps)以上,圖像的質(zhì)量也比較好,因此適合在無(wú)線(xiàn)終端實(shí)現多媒體的應用。 OMAP平臺因其獨有的雙核結構和為無(wú)線(xiàn)應用提供了一個(gè)強大的軟硬件基礎。本文結合其在MPEC—4解碼中應用的實(shí)例,具體闡述了OMAP1510的軟件優(yōu)化開(kāi)發(fā)方法,并基本上實(shí)現了實(shí)時(shí)解碼,希望能對使用OMAP或準備使用的開(kāi)發(fā)人員具有借鑒意義。
評論