馮柯,楊斌
(西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都610031)
視頻監(jiān)控作為嵌入式系統(tǒng)應(yīng)用的重要方面,在安防、智能視頻處理、視頻采集等領(lǐng)域有著廣泛的應(yīng)用。TI公司結(jié)合ARM 和DSP 的性能,創(chuàng)造性地設(shè)計出ARM+DSP體系的異構(gòu)雙核處理器,使其同時具有ARM 的控制和DSP的高速數(shù)據(jù)處理能力。在新應(yīng)用平臺推出的同時,TI公司結(jié)合DSP和ARM 的特點開發(fā)出一整套軟件組件和框架標(biāo)準(zhǔn),使ARM 和DSP能夠?qū)崟r通信和協(xié)調(diào)工作。本文在研究DSP和ARM 底層通信機制的基礎(chǔ)上,基于xDM 多媒體算法標(biāo)準(zhǔn),完成視頻監(jiān)控系統(tǒng)的設(shè)計。
監(jiān)控系統(tǒng)的核心在于嵌入式處理器,本文選用TI公司的OMAP3730處理器,其集成了一枚核心頻率達1000 MHz的ARM Coretex-A8處理器和核心頻率達800 MHz的TMS320CC64的DSP處理器,并且?guī)в蠳EON SIMD協(xié)處理器和POWERVR SG 2D/3D 圖形加速處理引擎。開發(fā)板還提供512 MB 的SDRAM 和512 MB 的NAND Flash,以及豐富的外設(shè)接口資源。
OMAP3730硬件平臺集成了ARM 和DSP,硬件資源的管理通過DMSoC(達芬奇數(shù)字媒體片上系統(tǒng))實現(xiàn),DMSoC結(jié)構(gòu)如圖1所示。DMSoC 負(fù)責(zé)雙核系統(tǒng)資源分配、硬件通信、資源共享等。ARM 芯片能夠訪問DSP 芯片中的L2RAM 和L1程序中Cache和數(shù)據(jù)Cache。LPDDR2內(nèi)存資源和AMIF接口為雙核所共享,同時DSP也能訪問ARM 存儲器。ARM 處理器與DSP 處理器通過終端機制相互通信,ARM 處理器的電源休眠控制器PSC可以實現(xiàn)控制DSP芯片的時鐘、電源和復(fù)位等。
圖1 達芬奇數(shù)字媒體片上系統(tǒng)
OMAP3730使用具體的軟件機制來管理系統(tǒng)資源的使用和通信,其軟件架構(gòu)如圖2所示。使用TI公司提供的軟件開發(fā)工具,其包括了AMR端驅(qū)動的Bootloader、嵌入式操作系統(tǒng)內(nèi)核、ARM 軟件開發(fā)工具等,也包括DSP端的DSP/BIOS內(nèi)核、DSP 硬件驅(qū)動、CCS 軟件環(huán)境等。其中ARM 處理器和DSP處理器的通信與協(xié)同工作是本文所涉及的視頻監(jiān)控的核心之一,其具體實現(xiàn)通過編解碼引擎和DSPlink。
圖2 OMAP3730軟件架構(gòu)圖
傳統(tǒng)的DSP軟件開發(fā)通常使用C語言和匯編語言混合編程來完成。其主要針對單一的、特定的DSP處理器。對于DSP應(yīng)用軟件的廣泛使用有著極大限制。隨著眾多DSP算法的大量使用,對于DSP 算法的通用性提出了急切的需求。在此基礎(chǔ)上,制定DSP 算法標(biāo)準(zhǔn)成為解決問題的關(guān)鍵。DSP算法標(biāo)準(zhǔn)的制定,可以降低開發(fā)的難度,增加代碼的可移植性,完善算法的通用性。
本文主要涉及xDAIS算法標(biāo)準(zhǔn)和xDM 算法標(biāo)準(zhǔn),是TI公司針對DSP算法開發(fā)制定的一套算法標(biāo)準(zhǔn),遵循這一算法規(guī)范,系統(tǒng)開發(fā)者就能快速高效地完成DSP 算法實現(xiàn),縮短DSP產(chǎn)品周期。xDM 算法標(biāo)準(zhǔn)是xDAIS算法標(biāo)準(zhǔn)的擴展,專用于多媒體應(yīng)用。本文所采用的H.264編碼就是基于xDM 算法標(biāo)準(zhǔn)的,具有一定的通用性。xDM 算法標(biāo)準(zhǔn)完全符合xDAIS標(biāo)準(zhǔn),xDM 標(biāo)準(zhǔn)在xDAIS標(biāo)準(zhǔn)的基礎(chǔ)上擴展了數(shù)字多媒體接口。xDAIS算法框架提供了IMOD和IALG 兩種接口,其中IALG 接口負(fù)責(zé)內(nèi)存管理,IMOD負(fù)責(zé)算法應(yīng)用,通過IMOD接口從編解碼庫中調(diào)用編解碼器。本文的編解碼器是指H.264編解碼器。
xDM 標(biāo)準(zhǔn)擴展定義了8 個特有的接口函數(shù):VIDENC(專用視頻編碼器接口)、VIDDEC(專用視頻解碼器接口)、AUDENC(專用音頻編碼器接口)、AUDDEC(專用音頻解碼器接口)、SPHENC(專用語音編碼器接口)、SPHDEC(專用語音解碼器接口)、IMGENC(專用圖像編碼器接口)、IMGDEC(專用圖像解碼器接口)。本文使用VIDENC和VIDDEC完成H.264的編解碼工作。
IALG接口的主要用途是管理存儲器資源,提高片內(nèi)存儲器的使用率。其中關(guān)鍵的接口函數(shù)和對應(yīng)功能如下:algAlloc()完成存儲器資源的請求,algInit()用來初始化存儲器,algFree()用來釋放存儲器資源,algControl()用來控制和獲取算法實例屬性,algMoved()完成算法在存儲器中的移動。IALG 接口的核心是process()算法處理函數(shù),它完成算法封裝。xDM 算法封裝和執(zhí)行流程圖如圖3所示。
圖3 xDM 算法封裝和執(zhí)行流程圖
本文使用TI公司提供的H.264Baseline編碼器,符合xDAIS算法標(biāo)準(zhǔn)和xDM 算法標(biāo)準(zhǔn)。
H.264的數(shù)據(jù)處理流程基于混合編碼框架,即基于像素塊的運動補償、變換、量化和熵編碼的處理模塊。其編碼流程圖如圖4所示,可以看出H.264編碼分為兩條路徑,即前向路徑和重建路徑。
圖4 H.264編碼流程圖
OMAP3730上的視頻監(jiān)控系統(tǒng)軟件的開發(fā)大致可分為H.264算法開發(fā)、編解碼服務(wù)器集成、編解碼引擎集成和上層應(yīng)用軟件開發(fā)等多個步驟,這幾個步驟也是達芬奇系統(tǒng)軟件開發(fā)的基本步驟。
①算法開發(fā)。完成xDAIS和xDM 標(biāo)準(zhǔn)的算法并將其封裝打包,以供編解碼引擎使用。
②編解碼服務(wù)器集成。構(gòu)建編解碼服務(wù)器的作用是使編解碼引擎能夠遠程調(diào)用DSP端的編解碼器。它集成并配置了編解碼器所需要的所有組件,如DSP/BIOS、框架組件、DSP/BIOS連接驅(qū)動和編解碼器等,最終生成可執(zhí)行文件。
③編解碼引擎集成。編解碼引擎集成主要是完成引擎的所有配置,其中包括定義每個引擎的名字,定義與引擎相對應(yīng)的編解碼器的名字,確定編解碼器是位于本地還是遠端調(diào)用等。上述描述都是通過XDC 配置腳本*.cfg來完成。
④應(yīng)用開發(fā)。應(yīng)用開發(fā)是基于以上三點的基礎(chǔ)上完成的。主要使用到編解碼引擎提供的豐富的API接口函數(shù),如以Engine_開頭的引擎接口函數(shù)、xDM 算法接口函數(shù)中的VISA 類接口等。其中引擎接口函數(shù)并不負(fù)責(zé)控制設(shè)備I/O 操作,I/O 操作根據(jù)上層軟件開發(fā)的具體要求編寫程序完成。文件讀取可以通過open、read、write、seek和close完成。設(shè)備驅(qū)動需要使用open、close、ioctl和緩存管理等操作來實現(xiàn)。本文所需要的驅(qū)動有基于V4L的視頻驅(qū)動、網(wǎng)絡(luò)驅(qū)動、硬盤驅(qū)動、NOR Flash驅(qū)動。圖5是系統(tǒng)軟件開發(fā)流程框圖。
圖5 OMAP3730系統(tǒng)軟件開發(fā)流程框圖
3.2.1 軟件層次
從系統(tǒng)軟件層次來說,OMAP3730 系統(tǒng)可劃分為用戶應(yīng)用層、信號處理層和I/O 層。用戶應(yīng)用層主要基于Linux系統(tǒng)提供的豐富的軟件資源和強大的系統(tǒng)機制來完成系統(tǒng)應(yīng)用軟件的開發(fā)。信號處理層主要涉及DSP高速信號處理,由編解碼器、編解碼引擎、DSP/BIOS內(nèi)核和處理器間通信機制組成,負(fù)責(zé)H.264 視頻的編碼。I/O層主要負(fù)責(zé)操作系統(tǒng)設(shè)備驅(qū)動,例如攝像頭、存儲器、網(wǎng)絡(luò)設(shè)備等。系統(tǒng)通過視頻采集驅(qū)動獲取攝像頭采集到的原始視頻數(shù)據(jù),信號處理層的DSP 芯片將原始視頻數(shù)據(jù)壓縮為H.264視頻碼流,H.264視頻碼流經(jīng)I/O 層網(wǎng)絡(luò)設(shè)備發(fā)送到視頻監(jiān)控端。系統(tǒng)軟件層次如圖6所示。
圖6 視頻監(jiān)控系統(tǒng)軟件層次
3.2.2 軟件設(shè)計
系統(tǒng)軟件在Linux系統(tǒng)上完成,使用線程來安排系統(tǒng)任務(wù)的調(diào)度。核心是創(chuàng)建和使用視頻線程video_thread_fxn,它實現(xiàn)視頻采集、編碼、傳輸和存儲的功能。其流程如圖7所示。
圖7 視頻線程流程
視頻線程的執(zhí)行:編解碼引擎提供引擎接口函數(shù)和VISA 接口函數(shù),供上層應(yīng)用調(diào)用編解碼器。引擎句柄作為引擎的唯一標(biāo)識,每個線程使用自己的引擎時都需要使用Engine_open函數(shù)打開和獲得引擎句柄,以此來防止在多線程環(huán)境下干擾對方的實例。
在打開引擎獲得引擎句柄后,使用VIDENC_creat函數(shù)創(chuàng)建視頻編解碼器實例應(yīng)用,同時返回實例句柄。VIDENC_creat函數(shù)的第一個參數(shù)為引擎句柄,第二個函數(shù)為編碼器名稱,第三個參數(shù)為編解碼器屬性參數(shù)。
編解碼器屬性參數(shù)在VISA 實例創(chuàng)建之初就被復(fù)制,如需修改,可以通過VIDENC_control動態(tài)設(shè)置實例參數(shù)。如幀高、幀寬、幀率、比特率等。
最重要的部分是編解碼引擎算法處理函數(shù)VIDENC_process,此函數(shù)通過編解碼引擎調(diào)用遠端DSP 的資源進行H.264編碼運算。它將inButDesc緩存中的視頻數(shù)據(jù)編碼后存放在outButfDesc緩存中。
運算完成后,調(diào)用VIDENC_delete和Engine_close函數(shù)刪除VISA 算法實例和關(guān)閉引擎。
整個系統(tǒng)運行時,攝像頭采集數(shù)據(jù)發(fā)送給ARM 端,ARM 端通過編解碼引擎調(diào)用底層通信機制DSPlink將原始數(shù)據(jù)一幀一幀地發(fā)送給DSP進行H.264編碼,同時也通過視頻驅(qū)動將原始數(shù)據(jù)在LCD端顯示。一幀視頻數(shù)據(jù)編碼完成后,DSP 將壓縮的幀返還給ARM,寫入到本地存儲器中。
在掌握編解碼引擎技術(shù)的基礎(chǔ)上,選擇OMAP3730平臺,利用DSP和ARM 的各自優(yōu)勢進行應(yīng)用開發(fā),對提高應(yīng)用性能和用戶體驗有很好的幫助。同時,達芬奇開發(fā)套件提供了豐富的應(yīng)用接口函數(shù)和完善的底層通信機制,能夠有效地縮短應(yīng)用的開發(fā)周期。
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。
[1]Texas Instruments Incorporated.xDAIS-DM User Guide,2007.
[2]Texas Instruments Incorporated.Codec Engine Application Developer User's Guide(sprue67d),2007.
[3]Texas Instruments Incorporated. Codec Engine Server Integrator's Guide,2006.
[4]畢厚杰.新一代視頻壓縮編碼標(biāo)準(zhǔn)—H.264/AVC[M].北京:人民郵電出版社,2005.
[5]Texas Instruments Incorporated.H.264Baseline Profile Encoder on DM6446,2006.