亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于TMS320DM 3730的H.264編碼器移植與優(yōu)化方法研究

        2012-01-18 12:03:32向海波閆中江
        電子設(shè)計(jì)工程 2012年23期
        關(guān)鍵詞:指令程序優(yōu)化

        向海波,李 波,閆中江

        (西北工業(yè)大學(xué) 電子信息學(xué)院,陜西 西安 710129)

        H.264/AVC是ISO/IEC和ITU-T聯(lián)合推出的新一代的視頻編碼標(biāo)準(zhǔn)。其具有高壓縮率、高圖像質(zhì)量、良好的網(wǎng)絡(luò)親和性等優(yōu)點(diǎn),被廣泛的應(yīng)用于各個(gè)視頻相關(guān)產(chǎn)業(yè)中。在相同的圖像質(zhì)量的前提下,和傳統(tǒng)的視頻標(biāo)準(zhǔn)MPEG-4相比,H.264的碼率只有MPEG-4的1/3[1]。但是,H.264算法非常復(fù)雜,要實(shí)現(xiàn)實(shí)時(shí)編碼是比較困難的。因此,如何將H.264編碼器進(jìn)行移植和優(yōu)化,使其用于實(shí)際產(chǎn)品中成為了研究的熱點(diǎn)。

        DSP芯片技術(shù)的快速發(fā)展為實(shí)現(xiàn)嵌入式多媒體技術(shù)提供了可能。TMS320DM3730(簡(jiǎn)稱DM3730)作為TI公司2010年推出的高性能芯片,以其ARM+DSP結(jié)構(gòu)體系、運(yùn)算速度快、眾多多媒體接口等優(yōu)點(diǎn)成為進(jìn)行嵌入式系統(tǒng)開發(fā)首選平臺(tái)之一。

        常用的H.264編碼器有JM編碼器、x264編碼器,T264編碼器,x264編碼器作為其中應(yīng)用最廣,效率最好的編碼器,是進(jìn)行嵌入式開發(fā)的首選H.264編碼器。故本文在DM3730數(shù)字媒體處理器上進(jìn)行x264編碼器的移植與優(yōu)化。本文首先介紹了DM3730的基本的結(jié)構(gòu)和特點(diǎn);然后結(jié)合DM3730的DSP,介紹了x264編碼器的移植和優(yōu)化;最后進(jìn)行編碼測(cè)試,結(jié)果表明編碼器移植的正確性,編碼速度得到了極大提高。

        1 DM3730簡(jiǎn)單介紹

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

        圖1 DM3730框圖Fig.1 DM3730 block diagram

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

        2 x264的移植

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

        圖2 x264編碼器移植流程Fig.2 x264 encoder transplant progress

        2.1 CCS工程的建立

        在CCS環(huán)境下分別建立兩個(gè)工程:靜態(tài)庫(kù)工程Libx264.pjt和可執(zhí)行工程x264.pjt。靜態(tài)庫(kù)工程Libx264.pjt包含x.264編碼所需要的絕大部分的函數(shù),編譯鏈接生成可進(jìn)行調(diào)用的Libx264.lib文件??蓤?zhí)行工程x264.pjt工程是x264編碼程序的主體的框架,包括編碼參數(shù)的初始化、文件的輸入輸出以及圖像的編碼循環(huán)等主函數(shù)實(shí)現(xiàn)部分。該工程添加對(duì)Libx264.lib文件的引用,最終編譯鏈接生成x264.out可執(zhí)行文件。

        2.2 CCS中編譯選項(xiàng)的設(shè)置

        在CCS4.2平臺(tái)下必須對(duì)Libx264.pjt和x264.pjt工程設(shè)置合適編譯選項(xiàng):

        1)DM3730的 DSP核為C64x+版本,故目標(biāo)處理器版本選項(xiàng)選擇為-mv6400+

        2)編譯器默認(rèn)的內(nèi)存模式為Near模式,而在Near模式下要求.BSS段必須小于32 kB,.BSS段存取的是工程中的全局變量和靜態(tài)變量,x264工程中的全局變量和靜態(tài)變量已經(jīng)遠(yuǎn)大于32 kB,故將 Data access model和Const access model設(shè)置為Far。

        3)在DM3730中使用的是小端模式的字節(jié)存儲(chǔ)即低位字節(jié)先存儲(chǔ),故在CCS4.2中Device Endianess(設(shè)備字節(jié)存儲(chǔ)次序)設(shè)置為little-endian。

        2.3 算法的剪裁

        1)MMX、SSE 匯編指令的去除

        在x264中有很多計(jì)算量大的函數(shù)例如DCT變換、運(yùn)動(dòng)估計(jì)、量化等都是使用MMX、SSE匯編指令進(jìn)行實(shí)現(xiàn)的,但是這些匯編都是針對(duì)X86平臺(tái)、AMD平臺(tái),在DSP的結(jié)構(gòu)下不能用,需要?jiǎng)h除這些匯編實(shí)現(xiàn)文件,并將宏定義_HAVE_MMX_進(jìn)行刪除[3]。

        2)精簡(jiǎn)代碼

        考慮到x264的編碼的效率,采用了H.264中的baseline級(jí)別進(jìn)行編碼,去除了CABAC(基于內(nèi)容的自適應(yīng)二進(jìn)制編碼)和B幀(雙向預(yù)測(cè)幀)這兩個(gè)特性。這樣雖然一定程度上增加了編碼的碼率,但是對(duì)編碼速度的提高很明顯。編碼采用固定量化參數(shù),不使用碼率控制,保留所有幀內(nèi)預(yù)測(cè)模式和幀間預(yù)測(cè)分塊模式進(jìn)行編碼,同時(shí)去除x264的多余的打印信息和help信息以提高編碼速度。

        2.4 函數(shù)、數(shù)據(jù)類型的修改

        在編譯過(guò)程中函數(shù)名為isfinite的函數(shù)會(huì)出現(xiàn)重定義的錯(cuò)誤,原因是在CCS4.2包含的頭文件中對(duì)該函數(shù)名有定義的,而x264中也有對(duì)其的定義,只需要將函數(shù)名進(jìn)行修改一些即可。

        同時(shí)由于硬件平臺(tái)的差異,C語(yǔ)言中有些數(shù)據(jù)類型對(duì)應(yīng)的字節(jié)長(zhǎng)也會(huì)有差異的,為了讓程序更好的兼容硬件平臺(tái),x264程序使用了通用的數(shù)據(jù)類型定義。通用數(shù)據(jù)類型一般在stdint.h中定義,VC++中并沒(méi)有提供通用數(shù)據(jù)類型,而CCS中則提供了stdint.h,同時(shí)它包含于inttype.h中,故移植到CCS中時(shí)應(yīng)該包含#include

        2.5 內(nèi)存的分配

        x264程序中存在很多使用malloc進(jìn)行動(dòng)態(tài)的內(nèi)存分配,這樣會(huì)大大提高占用堆棧的大小,應(yīng)該盡量的將動(dòng)態(tài)內(nèi)存分配使用靜態(tài)的數(shù)組進(jìn)行替代。同時(shí)在嵌入式系統(tǒng)中,合理的分配堆棧的大小對(duì)一個(gè)程序也是相當(dāng)重要的。由于x264中動(dòng)態(tài)內(nèi)存的申請(qǐng)、靜態(tài)的表格數(shù)組和全局變量比較多,故在cmd文件中對(duì)堆棧的大小定義設(shè)為:

        -stack 0x8000

        -heap 0x400000

        同時(shí)將x264程序中的代碼和數(shù)據(jù)的段地址全部放置到外部寄存器中。

        3 x264編碼器的優(yōu)化

        x264成功移植后在DM3730上進(jìn)行CIF(通用影像傳輸格式)格式圖像編碼測(cè)試,平均編碼速度只有1 fps(幀每秒)左右,離實(shí)時(shí)編碼差距很大,需要對(duì)x264編碼器進(jìn)行優(yōu)化工作。優(yōu)化的方法包括編譯器優(yōu)化、內(nèi)存優(yōu)化、C語(yǔ)言優(yōu)化和匯編優(yōu)化。

        3.1 編譯器優(yōu)化

        在使用C編譯器連接和生成最終DSP可執(zhí)行代碼時(shí),CCS上的C編譯器擁有非常出色的優(yōu)化性能,可以通過(guò)設(shè)置編譯優(yōu)化選項(xiàng)進(jìn)行編譯器的自我優(yōu)化。表1所示是CCS4.2中一些優(yōu)化選項(xiàng)及其功能列表[4]。

        表1 編譯器優(yōu)化選項(xiàng)和對(duì)應(yīng)描述Tab.1 Compiler optimize option and its description

        通過(guò)對(duì)程序速度性能的要求和代碼結(jié)構(gòu)的考慮,最終選擇的編譯選項(xiàng)為:-mv6400+-pm-o3-op3-mf3-mt。

        3.2 內(nèi)存優(yōu)化

        DSP的內(nèi)部存儲(chǔ)器和外部存儲(chǔ)器由于總線頻率的限制所以存在較大的讀取速度差異,DM3730中片上內(nèi)存的訪問(wèn)頻率為300 MHZ,而對(duì)SDRAM的訪問(wèn)頻率最高為133 MHZ,若利用靜態(tài)地址分配將一些使用頻繁而比較大的結(jié)構(gòu)體或數(shù)組指定到片上內(nèi)存中,那樣程序的運(yùn)行速度將會(huì)得到很大的提高。故可以將一些使用頻繁的動(dòng)態(tài)內(nèi)存分配改為靜態(tài)內(nèi)存分配,然后將靜態(tài)分配的常用的數(shù)據(jù)結(jié)構(gòu)比如幀存儲(chǔ)區(qū)利用DATA_SECTION指定段地址,通過(guò).cmd文件將指定的段放置到片上內(nèi)存中。

        3.3 C語(yǔ)言代碼的優(yōu)化

        1)使用內(nèi)聯(lián)函數(shù)

        CCS的C6000編譯器提供了一些經(jīng)過(guò)匯編優(yōu)化的C內(nèi)聯(lián)函數(shù)[5],可以使用這些內(nèi)聯(lián)函數(shù)替換x264中的相應(yīng)函數(shù),提高程序的運(yùn)行速度。在x264中使用的內(nèi)聯(lián)函數(shù)有:_abs()、_amem4()、_amem4_const()、_pack2()、_packl4()、_min2()、_max2()、_dotpu4()等。

        2)使用數(shù)據(jù)對(duì)齊指令DATA_ALIGN

        數(shù)據(jù)對(duì)齊指令的完整的語(yǔ)法是:

        #pragma DATA_ALIGN( symbol,constant)

        該指令的作用是將對(duì)象symbol排列到constant指定的列邊界上以方便讀取。例如DM3730是支持對(duì)非對(duì)齊雙字的一次性讀取,但是如果內(nèi)存地址對(duì)齊,同一個(gè)時(shí)鐘周期內(nèi)可以同時(shí)進(jìn)行兩組雙字的讀取,而如果不對(duì)齊則只能讀取一組。因此在定義數(shù)組時(shí)使用DATA_ALIGN指令,可以大大減少數(shù)據(jù)讀取時(shí)內(nèi)存地址不對(duì)齊的情況,增加程序的并行性。

        3)使用最小循環(huán)次數(shù)指令MUST_ITERATE

        最小循環(huán)次數(shù)指令的完整語(yǔ)法是:

        #pragma MUST_ITERATE(min,max,multiple)

        其中min和max分別代表了循環(huán)的最小和最大迭代次數(shù),multiple表明了循環(huán)次數(shù)是其倍數(shù)。使用最小循環(huán)次數(shù)程序指令可以通過(guò)通知編譯器至少進(jìn)行多少次循環(huán),那樣編譯器可以將min次循環(huán)進(jìn)行展開進(jìn)行軟件流水,進(jìn)行循環(huán)之間并行處理,提高程序運(yùn)行速度。

        3.4 匯編代碼的優(yōu)化

        C語(yǔ)言編譯器通常只能完成大部分的工作,這個(gè)階段的C語(yǔ)言代碼在DSP端運(yùn)行的效率并不是很高,為了進(jìn)一步改善性能,對(duì)那些算法簡(jiǎn)單但計(jì)算量大且使用很頻繁的函數(shù)使用匯編語(yǔ)言進(jìn)行編寫實(shí)現(xiàn),可以大大提高程序運(yùn)行速度。例如快速DCT變換、SAD、量化等算法過(guò)程可以考慮用匯編語(yǔ)言來(lái)編寫。

        線性匯編[6]是TI公司簡(jiǎn)化C6000系列DSP的匯編語(yǔ)言而開發(fā)設(shè)計(jì)的,介于高級(jí)語(yǔ)言和機(jī)器語(yǔ)言之間。線性匯編語(yǔ)言的指令系統(tǒng)和普通的匯編語(yǔ)言的指令系統(tǒng)基本相同。在編寫線性匯編語(yǔ)言的時(shí)候是不需要考慮到指令的延時(shí)、寄存器的使用和功能單元的分配,C6000編譯器提供了匯編優(yōu)化器進(jìn)行匯編優(yōu)化,會(huì)綜合指令的延時(shí)、寄存器的使用和功能單元的分配進(jìn)行優(yōu)化,讓線性匯編語(yǔ)言盡量的進(jìn)行軟件流水和指令的并行處理,提高匯編的運(yùn)行速度。DM3730的DSP核為C64x+系列,線性匯編在上面是可以完美運(yùn)行的。

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

        表2 C語(yǔ)言函數(shù)和線性匯編函數(shù)代價(jià)Tab.2 Cost of C language function and linear assembly function

        4 實(shí)驗(yàn)結(jié)果分析

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

        表3 測(cè)試結(jié)果Tab.3 Experiment result

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

        5 結(jié)束語(yǔ)

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

        [1]畢厚杰.新一代視頻壓縮標(biāo)準(zhǔn)-H.264/AVC[M].北京:人民郵電出版社,2004.

        [2]Texas Instruments.AM/DM37x Multimedia Device Silicon Revision 1.x[S].2010.

        [3]張偉華,孫松林,景曉軍.H.264在DM6446平臺(tái)上的移植與實(shí)現(xiàn)[J].中國(guó)多媒體通信,2009(9):41-45.ZHANGWei-hua,SUNSong-lin,JINGXiao-jun.Transplantation and Implementation of H.264 on DM6446 Platform[J].Multimedia Communication in China,2009(9):41-45.

        [4]宋磊.H.264視頻編碼算法在Ti DM642平臺(tái)上的實(shí)現(xiàn)與優(yōu)化[D].上海:上海交通大學(xué),2007.

        [5]賈克斌,李可,謝晶,等.基于DM642的 H264編碼實(shí)現(xiàn)與優(yōu)化[J].北京工業(yè)大學(xué)學(xué)報(bào),2008,34(9):914-919.JIA Ke-bin,LI Ke,XIE Jin,et al.Implementation and optimization of H264 coding on the DM642[J].Journal of Beijing University of Technology, 2008,34(9):914-919.

        [6]Texas Instruments.TMS320C6000 optimizing compiler v6.1 user’s guide[S].2008.

        猜你喜歡
        指令程序優(yōu)化
        聽(tīng)我指令:大催眠術(shù)
        超限高層建筑結(jié)構(gòu)設(shè)計(jì)與優(yōu)化思考
        民用建筑防煙排煙設(shè)計(jì)優(yōu)化探討
        關(guān)于優(yōu)化消防安全告知承諾的一些思考
        一道優(yōu)化題的幾何解法
        試論我國(guó)未決羈押程序的立法完善
        ARINC661顯控指令快速驗(yàn)證方法
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        “程序猿”的生活什么樣
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        自拍视频国产在线观看| 色偷偷偷久久伊人大杳蕉 | 久久av无码精品人妻出轨| 欧美精品aaa久久久影院| 亚洲情久久久精品黄色| 天天综合网网欲色| 人妻暴雨中被强制侵犯在线| 欧洲亚洲第一区久久久| 91羞射短视频在线观看| 曰韩内射六十七十老熟女影视| 精品一区二区三区免费播放| 野外三级国产在线观看| 国产又湿又爽又猛的视频 | 女同同成片av免费观看| 精品一区二区三区四区国产| 青草视频在线播放| 国产精品国产三级国产专区5o| 在线视频自拍视频激情| 亚洲无码在线播放| 亚洲av片不卡无码久久| 九九精品国产99精品| 久久精品国产免费一区二区三区 | 人妖另类综合视频网站| 日韩亚洲在线观看视频| av色综合久久天堂av色综合在| 少妇高潮惨叫喷水在线观看| 久久一区av蜜桃人妻| 亚洲成人福利在线视频| 亚洲午夜精品a片久久www慈禧| 天天躁日日操狠狠操欧美老妇| 久久精品国产亚洲av热东京热| 精品福利一区二区三区免费视频 | 麻豆成人在线视频| 国产伦精品一区二区三区在线| 久久久久亚洲av无码a片| 女人扒开下面无遮挡| 亚欧同人精品天堂| 亚洲美女毛片在线视频| 色先锋av资源中文字幕| 精品人伦一区二区三区蜜桃麻豆| 蜜臀av一区二区三区|