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
主站蜘蛛池模板: 综合网天天| 午夜啪啪网| 97国产成人无码精品久久久| 亚洲首页国产精品丝袜| av手机版在线播放| 国产第一页亚洲| 国产综合在线观看视频| 波多野结衣第一页| 日韩av高清无码一区二区三区| 久久鸭综合久久国产| 日韩欧美中文字幕在线精品| 就去色综合| 又黄又湿又爽的视频| 99热国产这里只有精品9九| 91欧洲国产日韩在线人成| 亚洲日本在线免费观看| 99热最新在线| 毛片卡一卡二| 亚洲欧美在线综合图区| 日本91视频| 国产地址二永久伊甸园| 亚洲性一区| 欧美日韩v| 91在线视频福利| 99国产精品免费观看视频| 精品久久久久久久久久久| 91视频精品| 国产精品第| 国产精品福利导航| 久久免费看片| 免费在线看黄网址| 91色老久久精品偷偷蜜臀| 亚洲av无码片一区二区三区| 久久国产热| 在线视频精品一区| 中文字幕人妻av一区二区| 亚洲高清无在码在线无弹窗| 久久99国产综合精品1| 国产噜噜在线视频观看| 亚洲人成影视在线观看| 色呦呦手机在线精品| 日韩毛片视频| 欧美a在线看| 色婷婷国产精品视频| 午夜免费视频网站| 欧美另类第一页| 亚洲制服丝袜第一页| 2020精品极品国产色在线观看 | 亚洲无码精彩视频在线观看 | 国产精品亚洲αv天堂无码| 亚洲av无码牛牛影视在线二区| 成人在线综合| 中文纯内无码H| 亚洲资源站av无码网址| 欧美成人一级| 国产精品人人做人人爽人人添| 夜夜爽免费视频| 国产91透明丝袜美腿在线| 久久综合一个色综合网| a色毛片免费视频| 亚洲黄色视频在线观看一区| 成年A级毛片| 亚洲精品黄| 好吊日免费视频| 欧美天堂在线| 草逼视频国产| 国产一区二区人大臿蕉香蕉| 国产91麻豆视频| 午夜啪啪网| 精品国产aⅴ一区二区三区| 日韩欧美在线观看| 亚洲国产成人无码AV在线影院L| 国产精选自拍| 青青热久免费精品视频6| 欧美日韩国产高清一区二区三区| 伊人成人在线视频| a级毛片在线免费| 99久久精品免费看国产免费软件| 亚瑟天堂久久一区二区影院| 人妻无码AⅤ中文字| 色婷婷狠狠干| 色综合久久88色综合天天提莫 |