999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2012-01-18 12:03:32向海波閆中江
電子設計工程 2012年23期
關鍵詞:指令程序優化

向海波,李 波,閆中江

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

H.264/AVC是ISO/IEC和ITU-T聯合推出的新一代的視頻編碼標準。其具有高壓縮率、高圖像質量、良好的網絡親和性等優點,被廣泛的應用于各個視頻相關產業中。在相同的圖像質量的前提下,和傳統的視頻標準MPEG-4相比,H.264的碼率只有MPEG-4的1/3[1]。但是,H.264算法非常復雜,要實現實時編碼是比較困難的。因此,如何將H.264編碼器進行移植和優化,使其用于實際產品中成為了研究的熱點。

DSP芯片技術的快速發展為實現嵌入式多媒體技術提供了可能。TMS320DM3730(簡稱DM3730)作為TI公司2010年推出的高性能芯片,以其ARM+DSP結構體系、運算速度快、眾多多媒體接口等優點成為進行嵌入式系統開發首選平臺之一。

常用的H.264編碼器有JM編碼器、x264編碼器,T264編碼器,x264編碼器作為其中應用最廣,效率最好的編碼器,是進行嵌入式開發的首選H.264編碼器。故本文在DM3730數字媒體處理器上進行x264編碼器的移植與優化。本文首先介紹了DM3730的基本的結構和特點;然后結合DM3730的DSP,介紹了x264編碼器的移植和優化;最后進行編碼測試,結果表明編碼器移植的正確性,編碼速度得到了極大提高。

1 DM3730簡單介紹

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

圖1 DM3730框圖Fig.1 DM3730 block diagram

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

2 x264的移植

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

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

2.1 CCS工程的建立

在CCS環境下分別建立兩個工程:靜態庫工程Libx264.pjt和可執行工程x264.pjt。靜態庫工程Libx264.pjt包含x.264編碼所需要的絕大部分的函數,編譯鏈接生成可進行調用的Libx264.lib文件。可執行工程x264.pjt工程是x264編碼程序的主體的框架,包括編碼參數的初始化、文件的輸入輸出以及圖像的編碼循環等主函數實現部分。該工程添加對Libx264.lib文件的引用,最終編譯鏈接生成x264.out可執行文件。

2.2 CCS中編譯選項的設置

在CCS4.2平臺下必須對Libx264.pjt和x264.pjt工程設置合適編譯選項:

1)DM3730的 DSP核為C64x+版本,故目標處理器版本選項選擇為-mv6400+

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

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

2.3 算法的剪裁

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

在x264中有很多計算量大的函數例如DCT變換、運動估計、量化等都是使用MMX、SSE匯編指令進行實現的,但是這些匯編都是針對X86平臺、AMD平臺,在DSP的結構下不能用,需要刪除這些匯編實現文件,并將宏定義_HAVE_MMX_進行刪除[3]。

2)精簡代碼

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

2.4 函數、數據類型的修改

在編譯過程中函數名為isfinite的函數會出現重定義的錯誤,原因是在CCS4.2包含的頭文件中對該函數名有定義的,而x264中也有對其的定義,只需要將函數名進行修改一些即可。

同時由于硬件平臺的差異,C語言中有些數據類型對應的字節長也會有差異的,為了讓程序更好的兼容硬件平臺,x264程序使用了通用的數據類型定義。通用數據類型一般在stdint.h中定義,VC++中并沒有提供通用數據類型,而CCS中則提供了stdint.h,同時它包含于inttype.h中,故移植到CCS中時應該包含#include

2.5 內存的分配

x264程序中存在很多使用malloc進行動態的內存分配,這樣會大大提高占用堆棧的大小,應該盡量的將動態內存分配使用靜態的數組進行替代。同時在嵌入式系統中,合理的分配堆棧的大小對一個程序也是相當重要的。由于x264中動態內存的申請、靜態的表格數組和全局變量比較多,故在cmd文件中對堆棧的大小定義設為:

-stack 0x8000

-heap 0x400000

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

3 x264編碼器的優化

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

3.1 編譯器優化

在使用C編譯器連接和生成最終DSP可執行代碼時,CCS上的C編譯器擁有非常出色的優化性能,可以通過設置編譯優化選項進行編譯器的自我優化。表1所示是CCS4.2中一些優化選項及其功能列表[4]。

表1 編譯器優化選項和對應描述Tab.1 Compiler optimize option and its description

通過對程序速度性能的要求和代碼結構的考慮,最終選擇的編譯選項為:-mv6400+-pm-o3-op3-mf3-mt。

3.2 內存優化

DSP的內部存儲器和外部存儲器由于總線頻率的限制所以存在較大的讀取速度差異,DM3730中片上內存的訪問頻率為300 MHZ,而對SDRAM的訪問頻率最高為133 MHZ,若利用靜態地址分配將一些使用頻繁而比較大的結構體或數組指定到片上內存中,那樣程序的運行速度將會得到很大的提高。故可以將一些使用頻繁的動態內存分配改為靜態內存分配,然后將靜態分配的常用的數據結構比如幀存儲區利用DATA_SECTION指定段地址,通過.cmd文件將指定的段放置到片上內存中。

3.3 C語言代碼的優化

1)使用內聯函數

CCS的C6000編譯器提供了一些經過匯編優化的C內聯函數[5],可以使用這些內聯函數替換x264中的相應函數,提高程序的運行速度。在x264中使用的內聯函數有:_abs()、_amem4()、_amem4_const()、_pack2()、_packl4()、_min2()、_max2()、_dotpu4()等。

2)使用數據對齊指令DATA_ALIGN

數據對齊指令的完整的語法是:

#pragma DATA_ALIGN( symbol,constant)

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

3)使用最小循環次數指令MUST_ITERATE

最小循環次數指令的完整語法是:

#pragma MUST_ITERATE(min,max,multiple)

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

3.4 匯編代碼的優化

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

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

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

表2 C語言函數和線性匯編函數代價Tab.2 Cost of C language function and linear assembly function

4 實驗結果分析

x264編碼器移植成功后,使用標準CIF格式視頻序列對移植和優化后的x264編碼器在DM3730上進行測試,測試結果如下表3所示。

表3 測試結果Tab.3 Experiment result

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

5 結束語

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

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

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

[3]張偉華,孫松林,景曉軍.H.264在DM6446平臺上的移植與實現[J].中國多媒體通信,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平臺上的實現與優化[D].上海:上海交通大學,2007.

[5]賈克斌,李可,謝晶,等.基于DM642的 H264編碼實現與優化[J].北京工業大學學報,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.

猜你喜歡
指令程序優化
聽我指令:大催眠術
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
主站蜘蛛池模板: 久久精品波多野结衣| 五月婷婷激情四射| 毛片免费高清免费| 成人一级黄色毛片| 亚洲天堂日本| 日韩视频免费| 亚洲 欧美 日韩综合一区| 无码电影在线观看| 2020精品极品国产色在线观看| 亚洲成人福利网站| 欧美自慰一级看片免费| 国产一二视频| 免费观看无遮挡www的小视频| 综合色88| 日本道中文字幕久久一区| 亚洲日本精品一区二区| 国产精品欧美在线观看| 国产成人综合在线视频| 成年av福利永久免费观看| 国产精品网曝门免费视频| 日日拍夜夜操| 噜噜噜久久| 国产区人妖精品人妖精品视频| 不卡视频国产| 国产噜噜噜| 国产成人AV综合久久| 国产日韩欧美精品区性色| 日韩欧美国产另类| 亚洲天堂.com| 在线免费a视频| 国产激情在线视频| 国产欧美精品午夜在线播放| 粗大猛烈进出高潮视频无码| 久久6免费视频| 国产人成在线视频| 香蕉精品在线| 91精品国产一区自在线拍| 激情五月婷婷综合网| 亚洲精品不卡午夜精品| 亚瑟天堂久久一区二区影院| 五月婷婷丁香色| 91久久青青草原精品国产| 亚洲精品天堂自在久久77| 99精品在线视频观看| 国产91蝌蚪窝| 青青久视频| 欧美在线视频a| 久久这里只有精品66| 久久久久免费看成人影片| 国产精品香蕉在线| 亚洲综合精品第一页| 欧美激情福利| 国产永久无码观看在线| 国产精品福利导航| 欧美亚洲中文精品三区| 国产久草视频| 国产在线日本| 亚洲国产精品日韩专区AV| 欧美yw精品日本国产精品| 亚洲v日韩v欧美在线观看| 久久综合色天堂av| 伊人成人在线视频| 国产菊爆视频在线观看| 99热这里只有成人精品国产| a毛片在线| 日韩精品免费一线在线观看| 国产成人超碰无码| 成人福利在线看| 国产成人成人一区二区| 国产精品久久久久久影院| 亚洲码一区二区三区| 欧美亚洲欧美区| 毛片网站观看| 亚洲精品无码日韩国产不卡| 国产99久久亚洲综合精品西瓜tv| 日韩a级毛片| 91丝袜在线观看| A级全黄试看30分钟小视频| 亚洲日本一本dvd高清| 性欧美在线| 久久人人爽人人爽人人片aV东京热| 亚洲大尺码专区影院|