楊貴新,谷志鋒,梁麗娟
(1.中國電子科技集團(tuán)公司第五十四研究所,河北石家莊050081;2.軍械工程學(xué)院,河北石家莊050003;3.邢臺學(xué)院,河北邢臺054001)
H.264是ISO/IEC MPEG聯(lián)合ITU-T VCEG成立的聯(lián)合視頻組制定的一個全新的標(biāo)準(zhǔn),H.264能面向各種應(yīng)用場合,其算法本身也包含了豐富的基于壓縮和網(wǎng)絡(luò)傳輸?shù)母鞣N編碼選項。它不僅具有優(yōu)異的壓縮性能,而且還有很好的網(wǎng)絡(luò)適應(yīng)性[1],這些都是在實時視頻通信中十分重要的。TI公司所推出的新一代開發(fā)平臺達(dá)芬奇技術(shù),不僅提供了高性能和高集成度的處理平臺,而且還有一套開放的音視頻標(biāo)準(zhǔn)開發(fā)框架,可以有效地降低開發(fā)周期和成本,非常適合于數(shù)字音視頻方面的研究和應(yīng)用開發(fā)。因此,把高性能的達(dá)芬奇平臺作為多媒體數(shù)據(jù)處理平臺,以H.264視頻壓縮標(biāo)準(zhǔn)作為多媒體的軟件實現(xiàn)算法,通過兩者的結(jié)合實現(xiàn)一個高效的編解碼器。
TMS320DM6446處理器芯片是由TI公司推出的高性能數(shù)字媒體集成芯片,內(nèi)部集成了一個600 MHz工作頻率的DSP核和一個300 MHz工作頻率的ARM926核。ARM核負(fù)責(zé)處理系統(tǒng)控制和運行操作系統(tǒng)功能,DSP核主要實現(xiàn)語音和視頻編解碼功能,DSP核和ARM核可以通過內(nèi)部寄存器的內(nèi)存映射來交互。TMS320DM6446除了包含一個ARM926核和64X+的 DSP核外[2],還包含有一個視頻處理子系統(tǒng);此外,它還有豐富的外設(shè)資源:USB2.0接口、以太網(wǎng)MAC、DDR2控制器、存儲卡接口和IDE接口等。非常適合應(yīng)用在視頻、多媒體及帶多媒體功能的其他設(shè)備中。
H.264視頻編碼器是基于DM6446核心處理器實現(xiàn)的,其目標(biāo)是保證數(shù)字視頻圖像資源的高質(zhì)量、高可靠性及視頻數(shù)據(jù)的互聯(lián)互通。整個編解碼器由視頻采集子系統(tǒng) TVP5150、DM6446處理器模塊、FPGA模塊、內(nèi)存模塊DDR、Flash及以太網(wǎng)和UART接口等組成,系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)硬件平臺
系統(tǒng)的工作過程如下:系統(tǒng)上電復(fù)位后,從Flash存儲器加載程序到DDR內(nèi)存,首先完成對各個功能芯片的初始化和外圍硬件的配置工作,開始進(jìn)行視頻的采集,從攝像頭采集到的模擬視頻信號經(jīng)過TVP5150轉(zhuǎn)換為數(shù)字信號,送入DM6446的視頻通道,處理器將接收到的數(shù)字視頻信號用H.264標(biāo)準(zhǔn)編碼壓縮[3],將壓縮碼流封裝成IP包經(jīng)網(wǎng)口輸出傳輸?shù)綄Χ酥鳈C上。同時DM6446也接收來自以太網(wǎng)的壓縮多媒體數(shù)據(jù),進(jìn)行解包,分離出數(shù)字視頻信號,進(jìn)而按照H.264解碼,最后輸出顯示和播放。
TI提供的達(dá)芬奇軟件框架可以分為3層:應(yīng)用層、信號處理層和 I/O層,其中應(yīng)用層通過 VISA API來調(diào)用DSP側(cè)的算法,通過EPSI API來訪問和操作其外設(shè)。信號處理層通常都運行在DSP一側(cè)負(fù)責(zé)信號處理,包括音視頻編解碼算法、Codec Engine、DSP的實時操作系統(tǒng)DSP/BIOS等。I/O層就是針對達(dá)芬奇外設(shè)模塊的驅(qū)動程序開發(fā)。
在達(dá)芬奇軟件中,完成ARM與DSP之間雙核通信是通過調(diào)用Codec Engine的VISA API接口函數(shù)完成的。Codec Engine通過這套API為算法的執(zhí)行提供了一個標(biāo)準(zhǔn)的軟件架構(gòu)和接口。
VISA接口中的*_create()函數(shù)的可以用來傳遞初始化算法的相關(guān)參數(shù),這些參數(shù)一般是一些通用的編碼參數(shù)。也可以使用*_control來傳遞算法的動態(tài)參數(shù)。
采用VISA接口中的*_process()函數(shù)傳遞編碼參數(shù)如H.264編碼,對視頻數(shù)據(jù)進(jìn)行壓縮處理。
本設(shè)計中ARM端主要負(fù)責(zé)讀取源圖像數(shù)據(jù)和存放傳輸編碼后文件,以及讀入編解碼參數(shù)等,DSP端集中完成編碼類型的識別、視頻編碼及參考幀的存放等處理。ARM端讀完一幀圖像后通過VISA接口調(diào)用DSP端的H.264編解碼算法來執(zhí)行一次編解碼。視頻編解碼實現(xiàn)流程如圖2所示。
圖2 視頻編解碼實現(xiàn)流程
H.264采用一系列新的壓縮方法,獲得了更好的壓縮效果。標(biāo)準(zhǔn)中的整數(shù)離散余弦變換(DCT)和量化與先前的標(biāo)準(zhǔn)有很大的不同[4]。下面簡要介紹傳統(tǒng)的DCT變換以及H.264采用的整數(shù)DCT,著重探討DSP的代碼優(yōu)化方法。
3.1.1 傳統(tǒng)的DCT變換
二維DCT及其逆變換定義為:
式中,Xij是N×N圖像塊X中第i行第j列元素;Y是DCT系數(shù)。
3.1.2 整數(shù)DCT變換及優(yōu)化算法
H.264對輸入圖像采用基于塊的變化編碼,但與之前的8×8點DCT變換不同,H.264采用了新的整數(shù)變換算法,以4×4像素子塊為單位,在變換和反變換過程中只包含整數(shù)運算[5],這也是H.264標(biāo)準(zhǔn)區(qū)別于其他標(biāo)準(zhǔn)的重要不同之處。整數(shù)變換算法采用了全新的變換核和量化公式,變換可以通過16位運算來實現(xiàn),有效地較低對存儲器的要求,同時簡化了運算步驟,在計算時只使用加法和移位運算,而無須使用乘法運算。使用這種算法做變換和反變換同樣是可逆的,不存在誤匹配問題。
矩陣形式的DCT定義如下:
Y=AXAT;X=ATYA其中X為圖像或殘差值的矩陣,Y為相應(yīng)的頻率點的DCT系數(shù)矩陣,變換矩陣A的系數(shù)為:
式中,a=c=1;b=2。
可以將矩陣乘法運算改造成2次一維整數(shù)DCT變換,例如先對圖像或其殘差塊的每行進(jìn)行一維整數(shù)DCT,然后對經(jīng)行變換的塊的每列再應(yīng)用一維整數(shù)DCT,而每次一維整數(shù)DCT可以采用一維快速運算,以節(jié)省計算時間,其運算過程如表1所示。定義x(0),x(1),x(2),x(3)為輸入的一行或一列殘差數(shù)據(jù);W(0),W(1),W(2),W(3)為正變換后的系數(shù);xx(0),xx(1),xx(2),xx(3)為反變換后的系數(shù);u,v,y,z為一維變換所生成的中間變量。
表1 整數(shù)變換與反變換一維算法運算過程
一維快速算法利用了矩陣乘法中的重復(fù)單元,將這些冗余計算儲存起來,很大程度上減少了運算次數(shù),易于在DSP處理器上實現(xiàn)。
將編碼算法移植到達(dá)芬奇平臺后,還要根據(jù)達(dá)芬奇平臺的特點對代碼進(jìn)行優(yōu)化,如果不進(jìn)行優(yōu)化,其代碼運行效率將很低,達(dá)不到實時編碼要求。對代碼的優(yōu)化[6],主要有以下幾個步驟:編譯優(yōu)化、系統(tǒng)優(yōu)化和匯編優(yōu)化。
3.2.1 編譯優(yōu)化
屬于對代碼的全局性優(yōu)化,通過對編譯選項的設(shè)置來對編譯進(jìn)行優(yōu)化。根據(jù)達(dá)芬奇平臺的特點,采用的編譯選項包括:-o3/-pm/-ms0。以上選項中,-o3是對文件的優(yōu)化;-pm是把所有源文件合成一個模塊來進(jìn)行程序優(yōu)化,它可以過濾掉一些沒用的函數(shù);-ms0選項可以減少代碼的尺寸。
3.2.2 系統(tǒng)優(yōu)化
由于達(dá)芬奇處理器DM6446的DSP處理器采用了2級存儲器結(jié)構(gòu),這樣可以平衡2級不同大小和性能的存儲器之間的資源和性能。其中一級存儲器是靠近處理器,所以它的處理速度比較快,而二級處理器的速度就只有它的一半。在實際使用時,所有的代碼和數(shù)據(jù)是不可能全部裝入到速度最快的一級緩存中去的,所以對系統(tǒng)進(jìn)行優(yōu)化的主要目的就是解決合理的分配存儲器資源來提高代碼運行效率。
3.2.3 匯編優(yōu)化
主要是針對算法中的一些影響到整個算法效率的部分,有必要采用線性匯編來重新編寫,取代一些執(zhí)行效率不高的代碼。以DCT代碼的匯編實現(xiàn)為例:雖然使用一維快速DCT算法能提高編碼的效率,但DCT變換和運動估計的計算量還是很大。為了減少其運算量,采用了匯編來改寫快速DCT函數(shù),運動估計模塊和量化模塊。整數(shù)變換算法在DSP上的優(yōu)化,主要解決的是編碼效率問題。如何提高編碼速度、減少算法實現(xiàn)的時鐘數(shù),是對算法進(jìn)行優(yōu)化的主要目標(biāo)。為了提高速度和效率,進(jìn)行軟件開發(fā)時,采用C語言嵌入?yún)R編代碼的混合編程方式,具體的優(yōu)化方法是:將乘法運算改為移位或是加減運算,打開軟件流水,以及展開循環(huán)以減小時鐘周期數(shù),充分利用功能單元等。
通過對代碼進(jìn)行各項優(yōu)化措施后,使用代碼剖析工具Profiler或者printf函數(shù)統(tǒng)計出某段函數(shù)耗時進(jìn)行優(yōu)化效果的分析[7];將關(guān)鍵函數(shù)的運行速度在優(yōu)化前后進(jìn)行了對比,如表2所示。
表2 優(yōu)化前后關(guān)鍵函數(shù)測試結(jié)果對比
表2是對DSP優(yōu)化前后的性能進(jìn)行分析比較,通過幾個關(guān)鍵模塊在優(yōu)化前后占用的時鐘周期數(shù)的統(tǒng)計,可見在循環(huán)次數(shù)較多的情況下,采用匯編語言編程的效率比采用C語言提高10倍以上,這是由于對于視頻編解碼這樣的數(shù)據(jù)密集型應(yīng)用,伴隨著頻繁的數(shù)據(jù)訪問,對于高性能的DSP芯片來說,數(shù)據(jù)瓶頸成為制約程序效率的最主要因素。通過線性匯編,有效提高了系統(tǒng)的執(zhí)行效率。算法的運行速度和存儲器占用情況都有了比較大的改善,為視頻編碼及其他應(yīng)用留下了足夠的處理空間。
上述提出了基于TI雙核處理器DM6446為核心的應(yīng)用平臺,分析了雙核通信的原理及過程,實現(xiàn)了H.264視頻編解碼算法;并針對DM6446芯片的特點和H.264視頻編解碼算法自身的特點,對程序進(jìn)行了優(yōu)化。測試結(jié)果表明,優(yōu)化效果明顯,經(jīng)過優(yōu)化后的編碼器執(zhí)行效率更高[8],且能滿足對圖像的實時性處理要求,本設(shè)計具有較高的數(shù)據(jù)吞吐能力和處理速度,能夠滿足實時性的要求;應(yīng)用平臺經(jīng)過長時間的運行測試,視頻編碼的傳輸性能可靠,其涉及的關(guān)鍵技術(shù)可為實際工程應(yīng)用研究提供有力的技術(shù)參考。
[1]畢厚杰.新一代視頻壓縮編碼 H264/AVC[M].北京:人民郵電出版社,2005.
[2]陳 玉.TMS320系列DSP硬件開發(fā)系統(tǒng)[M].北京:清華大學(xué)出版社,2008.
[3]侯建華.基于Davinci DM6446處理器的DVS的設(shè)計與實現(xiàn)[J].中南民族大學(xué)報,2009,28(1):72 -75.
[4]彭超男,王京玲,張 勤.H.264編碼器在TMS320DM642上的優(yōu)化[J].中國傳媒大學(xué)學(xué)報(自然科學(xué)版),2007(1):8-10.
[5]劉 峰.視頻圖像編碼技術(shù)及國際標(biāo)準(zhǔn)[M].北京:北京郵電大學(xué)出版社,2005.
[6]彭啟琮.達(dá)芬奇技術(shù)—數(shù)字圖像視頻信號處理新平臺[M].北京:電子工業(yè)出版社,2008.
[7]白茂生,田裕鵬.H.264在DSP上的實現(xiàn)及優(yōu)化[J].電子測試,2008(2):21-22.
[8]周長發(fā),周建欣.多媒體編程技術(shù)與實例[M].北京:電子工業(yè)出版社,1999.