當(dāng)前位置:首頁 > 測試測量 > 測試測量
[導(dǎo)讀]摘要:提出了一種在TI公司高性能數(shù)字信號處理器TMS320DM3730上進行H.264編碼器(即x264編碼器)移植與優(yōu)化的方法,詳細描述了在CCS4.2開發(fā)平臺上進行x264編碼器移植工作的基本原理和需要注意的問題。為了提高編碼速度

摘要:提出了一種在TI公司高性能數(shù)字信號處理器TMS320DM3730上進行H.264編碼器(即x264編碼器)移植與優(yōu)化的方法,詳細描述了在CCS4.2開發(fā)平臺上進行x264編碼器移植工作的基本原理和需要注意的問題。為了提高編碼速度,針對DM3730處理器的結(jié)構(gòu)特點,對x264編碼器進行了優(yōu)化,主要方法包括編譯器優(yōu)化、內(nèi)存優(yōu)化、C語言代碼優(yōu)化及匯編代碼優(yōu)化。對x264編碼器進行的CIF格式編碼測試結(jié)果表明,在均值信噪比略微降低的前提下,編碼速度得到了顯著提高,因此獲得了更優(yōu)的編碼效率。
關(guān)鍵詞:TMS320DM3730;H.264標(biāo)準(zhǔn);x264編碼器;移植與優(yōu)化

    H.264/AVC是ISO/IEC和ITU-T聯(lián)合推出的新一代的視頻編碼標(biāo)準(zhǔn)。其具有高壓縮率、高圖像質(zhì)量、良好的網(wǎng)絡(luò)親和性等優(yōu)點,被廣泛的應(yīng)用于各個視頻相關(guān)產(chǎn)業(yè)中。在相同的圖像質(zhì)量的前提下,和傳統(tǒng)的視頻標(biāo)準(zhǔn)MPEG-4相比,H.264的碼率只有MPEG-4的1/3。但是,H.2 64算法非常復(fù)雜,要實現(xiàn)實時編碼是比較困難的。因此,如何將H.264編碼器進行移植和優(yōu)化,使其用于實際產(chǎn)品中成為了研究的熱點。
    DSP芯片技術(shù)的快速發(fā)展為實現(xiàn)嵌入式多媒體技術(shù)提供了可能。TMS320DM3730(簡稱DM3730)作為TI公司2010年推出的高性能芯片,以其ARM+DSP結(jié)構(gòu)體系、運算速度快、眾多多媒體接口等優(yōu)點成為進行嵌入式系統(tǒng)開發(fā)首選平臺之一。
    常用的H.264編碼器有JM編碼器、x264編碼器,T264編碼器,x264編碼器作為其中應(yīng)用最廣,效率最好的編碼器,是進行嵌入式開發(fā)的首選H.264編碼器。故本文在DM3730數(shù)字媒體處理器上進行x264編碼器的移植與優(yōu)化。本文首先介紹了DM3730的基本的結(jié)構(gòu)和特點;然后結(jié)合DM3730的DSP,介紹了x264編碼器的移植和優(yōu)化;最后進行編碼測試,結(jié)果表明編碼器移植的正確性,編碼速度得到了極大提高。

1 DM3730簡單介紹
   
DM3730數(shù)字媒體處理器是美國德州儀器(TI)推出的一款高性能達芬奇(DaVinci)芯片,由1 GHz的ARM Coretex—A8和800 MHz的TMS320 C64x+DSP Core兩部分組成,并集成了包括3D圖像處理器,圖像采集,USB2.0等模塊。其整體結(jié)構(gòu)如圖1所示。


    DM3730中ARM核作為主控制部分,負(fù)責(zé)整個芯片部分的設(shè)備的配置和控制、內(nèi)存的分配、同外部接口的數(shù)據(jù)的交換;DSP核主要進行數(shù)據(jù)的處理和計算,其主頻高達800MHz,采用VLIW(超長指令字)體系結(jié)構(gòu),包含8個獨立的功能單元,每個功能單元在每個時鐘周期執(zhí)行一條指令,最高運算速度高達6 400 MMACS(百萬乘法累加周期每秒)。同時擁有A、B兩個通用寄存器組。每個都有32個32-bits寄存器組成,每個通用寄存器都可以存放數(shù)據(jù)、地址和指針。

2 x264的移植
    CCS(Code Composer Stdio)是TI公司提供的用于C語言開發(fā)的開發(fā)平臺,該平臺可以使用C語言進行DSP程序的開發(fā)。本文基于CCS4.2平臺進行x264編碼器的移植,具體流程如圖2所示。


2.1 CCS工程的建立
   
在CCS環(huán)境下分別建立兩個工程:靜態(tài)庫工程Libx264.pjt和可執(zhí)行工程x264.pjt。靜態(tài)庫工程Libx264.pjt包含x.264編碼所需要的絕大部分的函數(shù),編譯鏈接生成可進行調(diào)用的Libx264.lib文件??蓤?zhí)行工程x264.pjit工程是x264編碼程序的主體的框架,包括編碼參數(shù)的初始化、文件的輸入輸出以及圖像的編碼循環(huán)等主函數(shù)實現(xiàn)部分。該工程添加對Libx264.lib文件的引用,最終編譯鏈接生成x264.out可執(zhí)行文件。
2.2 CCS中編譯選項的設(shè)置
   
在CCS4.2平臺下必須對Libx264.pjt和x264.pjt工程設(shè)置合適編譯選項:
    1)DM3730的DSP核為C64x+版本,故目標(biāo)處理器版本選項選擇為-mv64004+
    2)編譯器默認(rèn)的內(nèi)存模式為Near模式,而在Near模式下要求.BSS段必須小于32 kB,.BSS段存取的是工程中的全局變量和靜態(tài)變量,x264工程中的全局變量和靜態(tài)變量已經(jīng)遠大于32 kB,故將Data access model和Const access model設(shè)置為Far。
    3)在DM3730中使用的是小端模式的字節(jié)存儲即低位字節(jié)先存儲,故在CCS4.2中Device Endianess(設(shè)備字節(jié)存儲次序)設(shè)置為little-endian。
2.3 算法的剪裁
   
1)MMX、SSE匯編指令的去除
    在x264中有很多計算量大的函數(shù)例如DCT變換、運動估計、量化等都是使用MMX、SSE匯編指令進行實現(xiàn)的,但是這些匯編都是針對X86平臺、AMD平臺,在DSP的結(jié)構(gòu)下不能用,需要刪除這些匯編實現(xiàn)文件,并將宏定義_HAVE_MMX_進行刪除。
    2)精簡代碼
    考慮到x264的編碼的效率,采用了H.264中的baseline級別進行編碼,去除了CABAC(基于內(nèi)容的自適應(yīng)二進制編碼)和B幀(雙向預(yù)測幀)這兩個特性。這樣雖然一定程度上增加了編碼的碼率,但是對編碼速度的提高很明顯。編碼采用固定量化參數(shù),不使用碼率控制,保留所有幀內(nèi)預(yù)測模式和幀間預(yù)測分塊模式進行編碼,同時去除x264的多余的打印信息和help信息以提高編碼速度。
2. 4 函數(shù)、數(shù)據(jù)類型的修改
   
在編譯過程中函數(shù)名為isfinite的函數(shù)會出現(xiàn)重定義的錯誤,原因是在CCS4.2包含的頭文件中對該函數(shù)名有定義的,而x264中也有對其的定義,只需要將函數(shù)名進行修改一些即可。
    同時由于硬件平臺的差異,C語言中有些數(shù)據(jù)類型對應(yīng)的字節(jié)長也會有差異的,為了讓程序更好的兼容硬件平臺,x264程序使用了通用的數(shù)據(jù)類型定義。通用數(shù)據(jù)類型一般在stdint.h中定義,VC++中并沒有提供通用數(shù)據(jù)類型,而CCS中則提供了stdint.h,同時它包含于intty pe.h中,故移植到CCS中時應(yīng)該包含#include<inttype.h>。
2.5 內(nèi)存的分配
   
x264程序中存在很多使用malloc進行動態(tài)的內(nèi)存分配,這樣會大大提高占用堆棧的大小,應(yīng)該盡量的將動態(tài)內(nèi)存分配使用靜態(tài)的數(shù)組進行替代。同時在嵌入式系統(tǒng)中,合理的分配堆棧的大小對一個程序也是相當(dāng)重要的。由于x264中動態(tài)內(nèi)存的申請、靜態(tài)的表格數(shù)組和全局變量比較多,故在cmd文件中對堆棧的大小定義設(shè)為:
    -stack 0x8000
    -heap 0x400000
    同時將x264程序中的代碼和數(shù)據(jù)的段地址全部放置到外部寄存器中。

3 x264編碼器的優(yōu)化
   
x264成功移植后在DM3730上進行CIF(通用影像傳輸格式)格式圖像編碼測試,平均編碼速度只有1fps(幀每秒)左右,離實時編碼差距很大,需要對x264編碼器進行優(yōu)化工作。優(yōu)化的方法包括編譯器優(yōu)化、內(nèi)存優(yōu)化、C語言優(yōu)化和匯編優(yōu)化。
3.1 編譯器優(yōu)化
   
在使用C編譯器連接和生成最終DSP可執(zhí)行代碼時,CCS上的C編譯器擁有非常出色的優(yōu)化性能,可以通過設(shè)置編譯優(yōu)化選項進行編譯器的自我優(yōu)化。表1所示是CCS4.2中一些優(yōu)化選項及其功能列表。


    通過對程序速度性能的要求和代碼結(jié)構(gòu)的考慮,最終選擇的編譯選項為:-mv6400+ -pm -o3 -op3 -mf3 -mt。
3.2 內(nèi)存優(yōu)化
    DSP的內(nèi)部存儲器和外部存儲器由于總線頻率的限制所以存在較大的讀取速度差異,DM3730中片上內(nèi)存的訪問頻率為300 MHZ,而對SDRAM的訪問頻率最高為133 MHZ,若利用靜態(tài)地址分配將一些使用頻繁而比較大的結(jié)構(gòu)體或數(shù)組指定到片上內(nèi)存中,那樣程序的運行速度將會得到很大的提高。故可以將一些使用頻繁的動態(tài)內(nèi)存分配改為靜態(tài)內(nèi)存分配,然后將靜態(tài)分配的常用的數(shù)據(jù)結(jié)構(gòu)比如幀存儲區(qū)利用DATA_SECTION指定段地址,通過.cmd文件將指定的段放置到片上內(nèi)存中。
3.3 C語富代碼的優(yōu)化
   
1)使用內(nèi)聯(lián)函數(shù)
    CCS的C6000編譯器提供了一些經(jīng)過匯編優(yōu)化的C內(nèi)聯(lián)函數(shù),可以使用這些內(nèi)聯(lián)函數(shù)替換x264中的相應(yīng)函數(shù),提高程序的運行速度。在x264中使用的內(nèi)聯(lián)函數(shù)有:_abs()、_amem4()、_amem4_const()、_pack2()、_paek14()、_min2()、_max2()、_dotpu4()等。
    2)使用數(shù)據(jù)對齊指令DATA_ALIGN
    數(shù)據(jù)對齊指令的完整的語法是:
    #pragma DATA_ALIGN(symbol,constant)
    該指令的作用是將對象symbol排列到constant指定的列邊界上以方便讀取。例如DM3730是支持對非對齊雙字的一次性讀取,但是如果內(nèi)存地址對齊,同一個時鐘周期內(nèi)可以同時進行兩組雙字的讀取,而如果不對齊則只能讀取一組。因此在定義數(shù)組時使用DATA_ALIGN指令,可以大大減少數(shù)據(jù)讀取時內(nèi)存地址不對齊的情況,增加程序的并行性。
    3)使用最小循環(huán)次數(shù)指令MUST_ITERATE
    最小循環(huán)次數(shù)指令的完整語法是:
    #pragma MUST_ITERATE(min,max,multiple)
    其中min和max分別代表了循環(huán)的最小和最大迭代次數(shù),multiple表明了循環(huán)次數(shù)是其倍數(shù)。使用最小循環(huán)次數(shù)程序指令可以通過通知編譯器至少進行多少次循環(huán),那樣編譯器可以將min次循環(huán)進行展開進行軟件流水,進行循環(huán)之間并行處理,提高程序運行速度。
3.4 匯編代碼的優(yōu)化
   
C語言編譯器通常只能完成大部分的工作,這個階段的C語言代碼在DSP端運行的效率并不是很高,為了進一步改善性能,對那些算法簡單但計算量大且使用很頻繁的函數(shù)使用匯編語言進行編寫實現(xiàn),可以大大提高程序運行速度。例如快速DCT變換、SAD、量化等算法過程可以考慮用匯編語言來編寫。
    線性匯編是TI公司簡化C6000系列DSP的匯編語言而開發(fā)設(shè)計的,介于高級語言和機器語言之間。線性匯編語言的指令系統(tǒng)和普通的匯編語言的指令系統(tǒng)基本相同。在編寫線性匯編語言的時候是不需要考慮到指令的延時、寄存器的使用和功能單元的分配,C6000編譯器提供了匯編優(yōu)化器進行匯編優(yōu)化,會綜合指令的延時、寄存器的使用和功能單元的分配進行優(yōu)化,讓線性匯編語言盡量的進行軟件流水和指令的并行處理,提高匯編的運行速度。DM3730的DSP核為C64x+系列,線性匯編在上面是可以完美運行的。


    表2所示為使用CCS中的profile工具測量的一些函數(shù)的C語言函數(shù)和線性匯編函數(shù)在DM3730上運行時鐘周期對比。

4 實驗結(jié)果分析
   
x264編碼器移植成功后,使用標(biāo)準(zhǔn)CIF格式視頻序列對移植和優(yōu)化后的x264編碼器在DM3730上進行測試,測試結(jié)果如下表3所示。


    從表3可以看出,x264程序經(jīng)過優(yōu)化后,峰值信噪比有略微的下降,但該下降不影響整體視頻效果,而編碼速度得到了大大的提高。

5 結(jié)束語
   
文中基于DM3730平臺,描述了進行x264編碼器移植應(yīng)該注意的主要問題,然后通過編譯選項優(yōu)化、內(nèi)存優(yōu)化、C語言代碼的優(yōu)化和匯編代碼的優(yōu)化等優(yōu)化方法對x264編碼器進行了優(yōu)化。最后視頻編碼測試表明,優(yōu)化的效果顯著,且均值信噪比下降不多。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉