新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于DSP的H.264編碼器的系統設計與優化

        基于DSP的H.264編碼器的系統設計與優化

        作者: 時間:2012-04-01 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257597.htm

        2.5 控制電路設計

        DM6446的視頻信號接口、EMIF接口為1.8 V電平,ADV7189B接口、PCIE橋接口為3.3 V電平。系統需要大量的電平轉換工作,同時還需要實現大量的邏輯控制、PCIE橋與DM6446的通信協議。FPGA器件是最適合的選擇。選用Altera公司的邏輯器件EP2C35,它可在片內實現1.8 V、2.5 V、3.3 V電平的轉換,并且能夠滿足系統對邏輯控制功能的要求。EP2C35內部集成有片內存儲器,可在ADV7189B與DM6446之間建立一個緩存區,提高數據傳輸效率。FPGA與DM6446、ADV7189B和PCIE橋接口電路如圖2所示。

        3 移植與優化

        目前,的實現版本主要有:JM、T264、X264。其中JM是H.264官方源碼,實現H.264所有特征,但其程序結構冗長,只考慮引入各種新特性以提高編碼性能,忽略編碼復雜度,其復雜度極高,不宜實用;T264編碼器編碼輸出標準的264碼流,解碼器只能解T264編碼器生成的碼流;X264是編碼器注重實用,在不明顯降低編碼性能的前提下,努力降低編碼的計算復雜度。這里,用X264編碼器對平臺移植、優化。X264程序在平臺上實現及優化主要有:程序簡化、代碼移植、代碼優化。

        3.1 程序簡化

        X264編碼器除支持H.264的基本檔次外,還包含主要檔次的某些功能選項以及其他功能模塊,代碼尺寸較大,因此需要將不必要的功能模塊刪除,以減小代碼尺寸。主要做以下刪減:刪除X264程序中的解碼部分,以及基本檔次功能之外的CABAC、B slice部分;X264程序是基于X86的PC平臺,包含了SSE、MMX等。PC平臺使用的優化技術,在DSP平臺下無效:針對DSP平臺特點,調整刪減后的代碼文件結構。

        3.2 代碼移植

        TI公司的DSP開發工具CCS具有自己的ANSI C編譯器和優化器,并有自己的語法規則和定義,經過上一步簡化后得到純C版本的X264編碼器需要經過修改才能夠在CCS下應用于具體的DSP。主要包括:①Visual c++、CCS對于變量和結構體的“重復定義”問題的不同處理,需更改頭文件中變量和結構體定義的位置;②用功能相同的庫函數代替CCS中沒有的庫函數,如strncasecmp();③數據格式的不同,用long代替CCS中沒有的_int64格式;④按照CCS下C語言的規則定義數組;⑤修改系統配置參數的讀取方式;⑥編寫針對TMS320DM6446存儲結構的CMD文件。如此,X264便可以在CCS下編譯通過并運行。

        3.3 代碼優化

        純C版本的X264程序并沒有利用DM6446的資源和并行機制,代碼運行速度極低。因此必須對代碼進行優化,提高處理性能。X264代碼優化有以下3個層次:項目級優化、算法級優化和指令級優化:

        (1)項目級優化項目級優化主要是對CCS提供的各種編譯參數進行選擇、搭配、調整,如本文使用的選項-o3、-pm等;利用CCS編譯器提供的優化功能,改善循環及多重循環體性能,進行軟件流水,提高軟件的并行性;改寫不適合編譯器優化的語句,使CCS能夠對程序進行更好的優化。

        (2)算法級優化進行算法級優化時。應使VC環境下的純C版本與CCS下的版本同步更新,VC版本運行正確,既可以保證算法理論上的正確,又可以加快工作速度并減少問題的產生。該算法優化工作主要有以下幾點:①運動估算法的選擇:X264編碼器提供3種可選的整像素運動估算法:X264_ME_ESA(全搜索法)、X264_ME_HEX(六邊形搜索法)、X264_ME_DIA(小菱形搜索法)。在VC環境下使用純C版本代碼對同一視頻序列使用3種不同的搜索方法進行編碼。對比3種搜索方法在編碼速度、峰值信噪比(PSNR)、碼率方面的性能。對比之下X264_ME_ESA算法的峰值信噪比最高,X264_ME_HEX次之,X264_ME_DIA最低,但相互之間的質量差別并不大,碼率差別也很小,但編碼速度卻有明顯差距,X264_ME_DIA較前兩者在編碼速度上有明顯的優勢。經比較,選擇使用X264_ME_DIA運動估計算法。②幀內預測模式的改進:在X264的幀內預測流程中加入提前終止模式選擇的條件,改進算法的流程。進行16×16宏塊幀內模式搜索時,在當前模式的開銷小于已搜索過的模式的最小開銷的一半時,終止16×16幀內預測模式選擇,以當前模式為最佳16×16幀內預測模式。對4×4塊也加入相同的條件,并且若當前4×4塊幀內預測模式的預測開銷比相應的最佳16×16塊幀內預測模式的開銷的1/16還要小,則終止4×4塊的幀內預測模式選擇,以當前預測模式作為最佳4×4塊的幀內預測模式。改進后的幀內預測主體流程如圖3所示,灰色部分為加入的判定條件。

        幀間預測模式的改進:將當前的16×16宏塊劃分為4個8×8宏塊,分別預測其運動矢量,然后以左右相鄰、上下相鄰的2個8×8塊的運動矢量的差值和閾值相比較為依據,判定是否進行16×8、8×16等分塊模式的預測,最后選擇開銷最小的劃分模式為最佳幀間劃分模式。

        (3)指令級優化 DM6446一個時鐘周期內可并行運行8條指令,一次可存取64位數據,內部擁有64個32位通用寄存器,并且支持對寄存器中的4個8位字節或2個16位字節分別進行運算處理,這些使得DM6446具有很強的并行運算能力。視頻圖像的像素尺寸一般是4的倍數,X264中像素的值是用8位或16位數據按矩陣形式有規律的存儲,這種數據存儲結構與DM6446的并行處理方式很契合。因此對X264程序進行指令優化充分發揮DM6446的并行運算能力,是提高編碼器速度的關鍵。主要分為以下兩部分:①使用內聯函數優化;C6000編譯器提供了許多內聯函數intrinsics,它們是匯編指令映射的在線函數,不宜用C語言實現其功能的匯編指令都有對應的intrinsics函數。這樣就可在C語言結構中直接使用內聯函數實現對多個數據的并行運算操作。如:未使用內聯函數優化前X264程序調用一次雙線性內插函數只能計算一個亞像素點的值,而使用內聯函數_mem4()、_avgu4()等進行優化后,一次可以計算4個亞像素點的值,大大提高了運算速度。②使用線性匯編語言優化:由于線性匯編不需要考慮寄存器分配、指令延遲、并行指令安排等因素。因此可以利用CCS提供的profile分析工具將使用頻率高、耗時多的函數抽取出來,根據事先已知的數據間的相關性等信息,在程序中直接改寫函數匯編,人工優化。涉及的算法有:SAD、SSD的計算;DCT變換;反DCT變換、亞像素搜索等。

        4 實驗結果

        選取具有代表性的視頻序列carphone(人物運動幅度較大)、news(背景變化,人物運動幅度不大)、container(背景簡單,景物運動緩慢)進行編碼。視頻為YUV 4:2:0格式.QCIF,量化步長定為26,共50幀,采用IPPP…編碼模式。DM6446的時鐘頻率為600 MHz。表1為優化后峰值信噪比、消耗時鐘周期、碼率等實驗結果。表2為優化前后編碼時鐘周期對比,I幀編碼速度平均提高了9倍,P幀編碼速度平均提高了11倍。

        以視頻Miss-America為例,研究、對比移植優化后的編碼器在不同的量化步長值(QP)下,圖像的壓縮質量,如圖4所示。

        5 結論

        移植優化后的X264編碼器在CCS環境下可正確編碼,在量化步長值26下編碼圖像質量較高,優化后編碼速度較優化前有明顯提升。介紹的H.264視頻編碼系統的硬件設計,和X264編碼器針對DM6446平臺移植、優化的思路和方法,對構建高效的視頻應用平臺具有一定的參考價值。

        作者:李博丞 嚴勝剛 曲鵬


        上一頁 1 2 下一頁

        關鍵詞: DSP H.264編碼器 VCEG

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 庆阳市| 凤山市| 石台县| 定州市| 彭阳县| 若尔盖县| 惠州市| 浏阳市| 洪洞县| 威远县| 龙门县| 麟游县| 普定县| 五台县| 丽水市| 太康县| 灌阳县| 泸溪县| 彰化县| 搜索| 玛曲县| 汝城县| 都昌县| 方山县| 论坛| 成都市| 罗定市| 农安县| 卓尼县| 兴安县| 盐山县| 铜梁县| 土默特左旗| 建德市| 红河县| 乌鲁木齐市| 石首市| 白朗县| 班玛县| 三明市| 义马市|