《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 顯示光電 > 設(shè)計(jì)應(yīng)用 > H.264高清視頻編碼器的設(shè)計(jì)與實(shí)現(xiàn)
H.264高清視頻編碼器的設(shè)計(jì)與實(shí)現(xiàn)
2015年微型機(jī)與應(yīng)用第6期
李 飛,卿粼波,滕奇志,何小海
(四川大學(xué) 電子信息學(xué)院,四川 成都 610065)
摘要: 針對(duì)高清視頻龐大的數(shù)據(jù)量以及H.264編碼器復(fù)雜的編碼結(jié)構(gòu)引起的低編碼速率的問(wèn)題,對(duì)影響算法編碼速率的原因進(jìn)行了深入分析,并設(shè)計(jì)了高效的多核并行方案,進(jìn)而充分利用TMS320C6678的多核性能,并結(jié)合TMS320C6678的運(yùn)算存儲(chǔ)特性,對(duì)H.264編碼器進(jìn)行了多方面的優(yōu)化,最終使H.264編碼器對(duì)720P高清視頻序列編碼速率從1.2 fps增加到27.2 fps,更加貼近于實(shí)際應(yīng)用。
Abstract:
Key words :

  摘  要: 針對(duì)高清視頻龐大的數(shù)據(jù)量以及H.264編碼器復(fù)雜的編碼結(jié)構(gòu)引起的低編碼速率的問(wèn)題,對(duì)影響算法編碼速率的原因進(jìn)行了深入分析,并設(shè)計(jì)了高效的多核并行方案,進(jìn)而充分利用TMS320C6678的多核性能,并結(jié)合TMS320C6678的運(yùn)算存儲(chǔ)特性,對(duì)H.264編碼器進(jìn)行了多方面的優(yōu)化,最終使H.264編碼器對(duì)720P高清視頻序列編碼速率從1.2 fps增加到27.2 fps,更加貼近于實(shí)際應(yīng)用。

  關(guān)鍵詞: H.264編碼器;TMS320C6678;高清視頻

0 引言

  H.264標(biāo)準(zhǔn)吸取以往標(biāo)準(zhǔn)中的優(yōu)點(diǎn),編碼效率與H.263+以及MPEG-4 SP相比最多可節(jié)省50%的碼率,存儲(chǔ)需求大大降低。正是由于H.264強(qiáng)大的功能及其巨大的市場(chǎng)潛力,國(guó)內(nèi)外不少公司開(kāi)始對(duì)H.264的編解碼應(yīng)用進(jìn)行研究并有產(chǎn)品紛紛面世。目前國(guó)內(nèi)也紛紛對(duì)   H.264標(biāo)準(zhǔn)進(jìn)行研究,使用專用H.264編解碼芯片推出了許多產(chǎn)品。編碼芯片速度很快,但是性能固定,無(wú)法根據(jù)需求進(jìn)行性能的改進(jìn),另一方面新一代的HEVC編碼算法性能更為優(yōu)越,但是由于其技術(shù)應(yīng)用尚不成熟,H.264仍然擁有巨大的應(yīng)用潛力,因而在DSP上實(shí)現(xiàn)H.264編碼器具有重大意義。

1 H.264復(fù)雜度分析

  H.264標(biāo)準(zhǔn)相比于以往壓縮標(biāo)準(zhǔn)有以下主要優(yōu)點(diǎn)[1]:

  (1)在相同重建圖像質(zhì)量下,H.264相比H.263+和MPEG-4節(jié)約50%的碼率;

 ?。?)H.264具有較強(qiáng)的抗誤碼能力,可以在惡劣的無(wú)線環(huán)境中運(yùn)用;

  (3)H.264采用簡(jiǎn)潔的分層模式,具有更友好的特性。

  本文采用H.264編碼器的可靠性能測(cè)試結(jié)果如表1所示。

004.jpg

  為了對(duì)編碼器進(jìn)行更具針對(duì)性的優(yōu)化,本文對(duì)編碼器內(nèi)部主要算法部分進(jìn)行了時(shí)間統(tǒng)計(jì),結(jié)果如圖1所示。

001.jpg

2 編碼器在DSP上的實(shí)現(xiàn)

  2.1 DSP的多核并行處理方案

  為了充分發(fā)揮TMS320C6678的性能,需要設(shè)計(jì)一個(gè)高效的多核并行處理方案[2]。核間通信(IPC)的方式一般有兩種:MessageQ消息機(jī)制和Notify中斷機(jī)制。其中中斷機(jī)制是一種不可屏蔽的中斷通信機(jī)制,通信快速便捷,因而本文采用Notify中斷方式進(jìn)行核間通信。多核之間實(shí)現(xiàn)可靠通信后,就需要為8個(gè)核的并行運(yùn)算設(shè)計(jì)一種高效的拓?fù)浣Y(jié)構(gòu),通常有Data-Flow模式和Master-Slave模式兩種常用的核間通信拓?fù)浣Y(jié)構(gòu)。

  (1)Data-Flow模式:通信控制邏輯簡(jiǎn)單,適合單向通信,多核利用率不穩(wěn)定,取決于各個(gè)核流水工作量均衡度,適用于能將算法分成多個(gè)獨(dú)立的相等工作量任務(wù)的情況。

  (2)Master-Slave模式:通信控制邏輯相對(duì)復(fù)雜,多核利用率較高,程序開(kāi)發(fā)相對(duì)簡(jiǎn)單[3]。

  根據(jù)圖1中時(shí)間測(cè)試可知,H.264編碼器中各任務(wù)工作時(shí)間很不均衡,因此本文采用Master-Slave模式。

001.jpg

  2.2 多核算法流程

  在Master-Slave模式下,核0充當(dāng)邏輯控制器及數(shù)據(jù)流收發(fā)器,其他核則專于壓縮算法處理。當(dāng)核0接收到視頻幀時(shí),將720P視頻幀盡可能均勻地分成7個(gè)視頻片分配到各核的接收緩沖區(qū)中,核1~5的視頻片為106×1 280,核6~7的視頻片為90×1 280,各核在編碼完后將數(shù)據(jù)流存放在發(fā)送緩沖區(qū)中。為充分利用、提高多核并行效率,本文為每個(gè)運(yùn)算核提供了兩組數(shù)據(jù)緩沖區(qū),形成一個(gè)乒乓緩沖存儲(chǔ)結(jié)構(gòu),用以節(jié)約運(yùn)算核對(duì)核0的等待時(shí)間,使各個(gè)核運(yùn)算基本保持全速運(yùn)行狀態(tài),從而充分地利用多核并行處理能力。

3 H.264編碼器的DSP優(yōu)化

  編碼器在DSP上的優(yōu)化依據(jù)是基于DSP硬件結(jié)構(gòu)上的特有操作,分為傳輸與運(yùn)算兩種操作。傳輸優(yōu)化是DSP核、EDMA控制器等主動(dòng)模塊對(duì)不同存儲(chǔ)類型訪問(wèn)性能優(yōu)化配置過(guò)程。本文采用的傳輸方面優(yōu)化有緩存優(yōu)化、EDMA優(yōu)化、數(shù)據(jù)存儲(chǔ)優(yōu)化;在運(yùn)算方面主要是針對(duì)C66x核的單指令多數(shù)據(jù)操作(SIMD)以及并行操作特性,在編譯器、C語(yǔ)言以及匯編語(yǔ)言層面上對(duì)編碼器進(jìn)行優(yōu)化。

  3.1 緩存(Cache)優(yōu)化

  C6678擁有兩級(jí)緩存結(jié)構(gòu),SYS/BIOS默認(rèn)將一級(jí)數(shù)據(jù)存儲(chǔ)(L1D)32 KB、一級(jí)程序存儲(chǔ)(L1P)32 KB全部設(shè)置為緩存,而本地二級(jí)存儲(chǔ)(LL2)則默認(rèn)全部為普通存儲(chǔ),可用于存放一些關(guān)鍵數(shù)據(jù)。圖2是在一級(jí)緩存為32 KB大小的情況下通過(guò)測(cè)試得到二級(jí)存儲(chǔ)不同緩存化程度與平均編碼時(shí)間的關(guān)系圖[4]。

002.jpg

  由圖2可以看出,當(dāng)二級(jí)緩存大小超過(guò)1/8Cache程度時(shí),編碼時(shí)間基本保持不變??紤]到資源寶貴,LL2用來(lái)存放一些高速運(yùn)行的算法數(shù)據(jù)會(huì)表現(xiàn)出更好的性能,本文將二級(jí)緩存設(shè)置為1/8Cache模式。

  3.2 數(shù)據(jù)存儲(chǔ)優(yōu)化

  數(shù)據(jù)存儲(chǔ)優(yōu)化是根據(jù)C6678對(duì)不同存儲(chǔ)資源訪問(wèn)的不同速度而確定數(shù)據(jù)分配,表2是DSP多核共享訪問(wèn)DDR3和SL2的實(shí)驗(yàn)統(tǒng)計(jì)對(duì)比。

005.jpg

  編碼過(guò)程中,全局變量所在的數(shù)據(jù)段為bss,動(dòng)態(tài)開(kāi)辟的空間、臨時(shí)變量以及中間保存結(jié)果所在的數(shù)據(jù)段為stack,還有全局?jǐn)?shù)組所在的段為far,這部分訪問(wèn)頻繁的數(shù)據(jù)則放在LL2上;其他訪問(wèn)較少的段,如text、sysmem、cio則統(tǒng)一放在DDR3上。

  3.3 EDMA優(yōu)化

  TMS320C6678共有3個(gè)EDMA管理器,10個(gè)通道。本文待壓縮視頻序列為720P,YUV420格式,一幅圖像的大小為1.32 MB,在任務(wù)分配過(guò)程中需要對(duì)圖像進(jìn)行拷貝。對(duì)于這種大數(shù)據(jù)量的復(fù)制過(guò)程,EDMA比通過(guò)DSP核進(jìn)行復(fù)制具有相當(dāng)大的優(yōu)勢(shì),并且EDMA還可以完成非連續(xù)數(shù)據(jù)段的復(fù)制[5]。EDMA和DSP核的復(fù)制性能與復(fù)制數(shù)據(jù)量的關(guān)系測(cè)試對(duì)比如圖3所示。

003.jpg

  3.4 匯編優(yōu)化

  匯編優(yōu)化是一種運(yùn)算型的優(yōu)化,通過(guò)充分利用C66x核的SIMD特性以及運(yùn)算單元并行特性,從而減少運(yùn)算過(guò)程中所消耗的時(shí)間[6]。

  根據(jù)圖1中所示,編碼時(shí)間主要集中在預(yù)測(cè)、運(yùn)動(dòng)估計(jì)、DCT、量化等部分,選擇各部分算法中的關(guān)鍵函數(shù)進(jìn)行匯編優(yōu)化[7],優(yōu)化結(jié)果如表3所示。

006.jpg

  3.5 其他優(yōu)化

  除上述4種基于TMS320C6678特性的獨(dú)特優(yōu)化,還可以進(jìn)行一些DSP中常用的普適優(yōu)化,這里只做簡(jiǎn)單描述。

 ?。?)-O優(yōu)化:-O優(yōu)化是編譯器對(duì)代碼優(yōu)化的級(jí)別,其中-O2深度優(yōu)化速度和減少代碼體積,一般為推薦等級(jí),故本文選擇-O2優(yōu)化級(jí)別。

 ?。?)去雙重循環(huán)優(yōu)化:在文件級(jí)優(yōu)化的過(guò)程中,編譯器對(duì)于單重循環(huán)可以進(jìn)行Pipeline優(yōu)化,當(dāng)遇到雙重循環(huán)時(shí),通過(guò)解開(kāi)一層循環(huán),優(yōu)化效率會(huì)得到很大提升[8]。

 ?。?)內(nèi)聯(lián)函數(shù)優(yōu)化:內(nèi)聯(lián)函數(shù)在調(diào)用處直接插入,而不是調(diào)用,因而可以省略掉函數(shù)的調(diào)用開(kāi)銷,適合對(duì)頻繁調(diào)用的簡(jiǎn)單函數(shù)如T264_sad_u_c()等進(jìn)行優(yōu)化。

4 測(cè)試結(jié)果

  4.1 測(cè)試環(huán)境

  本文編碼器測(cè)試環(huán)境如下:調(diào)試軟件環(huán)境CCS5.2.1,測(cè)試用到的DSP硬件平臺(tái)為TMS320C6678,編碼算法為H.264,量化參數(shù)Qp=30,編碼結(jié)構(gòu)GOP為I幀:P幀=1:5,測(cè)試視頻序列為官方KristenAndSara.yuv、shields_ter.yuv兩個(gè)序列,分辨率為720P,為更方便準(zhǔn)確地計(jì)算平均編碼速率,測(cè)試幀數(shù)設(shè)定為300幀。

  4.2 測(cè)試結(jié)果

  以KristenAndSara.yuv的測(cè)試為記錄,編碼器在優(yōu)化過(guò)程中的各項(xiàng)指標(biāo)整體記錄如表4所示。

007.jpg

  由表4可以看出,表中一系列優(yōu)化以后,編碼圖像質(zhì)量并沒(méi)有什么影響,編碼速度得到了極大的提升,其中多核優(yōu)化的作用非常明顯,說(shuō)明本文的多核結(jié)構(gòu)效率是很高的。

5 結(jié)論

  H.264具有相當(dāng)優(yōu)越的壓縮性能,面對(duì)其運(yùn)算復(fù)雜性與龐大運(yùn)算量的難題,本文結(jié)合硬件特點(diǎn),對(duì)編碼器進(jìn)行一系列優(yōu)化,從而使編碼器實(shí)現(xiàn)對(duì)高清視頻序列實(shí)時(shí)編碼。目前對(duì)DSP編碼器的研究很熱,本文提供的C6678多核方案、基于C6678硬件特點(diǎn)的優(yōu)化以及720P實(shí)時(shí)高清視頻H.264編碼器都是很有意義的。

參考文獻(xiàn)

  [1] 梁佩珊.H.264編碼器算法優(yōu)化與設(shè)計(jì)[D].杭州:浙江大學(xué),2006.

  [2] 曹折波,李青.多核處理器并行編程模型的研究與設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(13):2999-3002.

  [3] 吳灝,肖吉陽(yáng),范紅旗,等.TMS320C6678多核DSP的核間通信方法[J].電子技術(shù)應(yīng)用,2012,38(9):2-3.

  [4] 王熹微,唐昆,崔慧娟.基于DM642的視頻編碼Cache優(yōu)化策略[J].微計(jì)算機(jī)信息,2005,21(09Z):84-86.

  [5] PESCADOR F, MATURANA G, GARRIDO M J, et al. An H. 264 video decoder based on a latest generation DSP[J].  IEEE Transactions on Consumer Electronics, 2009,55(1):205-212.

  [6] 鄭回青,林嘉宇,張鑌.基于TMS320C64xDSP的匯編優(yōu)化方法[J].微處理機(jī),2010,31(1):105-108.

  [7] 黃國(guó)玉,廖湘柏.基于DM642的x264源代碼的匯編優(yōu)化[J].南華大學(xué)學(xué)報(bào)(自然科學(xué)版),2014,28(1):74-76.

  [8] Su Bogong, Wang Jian, ESGUERRA A. Source-level loop optimization for DSP code generation[C]. 1999 IEEE International Conference on Acoustics, Speech, and Signal Processing, 1999. Proceedings. 1999,4:2155-2158.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。