德州儀器(TI)的第一顆達(dá)芬奇(DaVinci)芯片(處理器)DM6446已經(jīng)問世快三年了。繼DM644x之后,TI又陸續(xù)推出了DM643x,DM35x,DM6467,OMAP353x等一系列ARM+DSP或ARM+視頻協(xié)處理器的多媒體處理器平臺(tái)。很多有很強(qiáng)DSP開發(fā)經(jīng)驗(yàn)或ARM開發(fā)經(jīng)驗(yàn)的工程師都轉(zhuǎn)到達(dá)芬奇或通用OMAP(OMAP353x)平臺(tái)上開發(fā)視頻監(jiān)控、視頻會(huì)議及便攜式多媒體終端等產(chǎn)品。大家都面臨著同一個(gè)問題,那就是如何實(shí)現(xiàn)ARM和DSP或協(xié)處理器的通信和協(xié)同工作?TI的數(shù)字視頻軟件開發(fā)包(DVSDK)提供了Codec Engine這樣一個(gè)軟件模塊來實(shí)現(xiàn)ARM和DSP或協(xié)處理器的協(xié)同工作。有很多工程師反饋這個(gè)軟件模塊非常好用,節(jié)省了很多開發(fā)時(shí)間,也有工程師認(rèn)為TI提供的資料太多,不知如何快速上手。本文將從一個(gè)第一次接觸Codec Engine的工程師角度出發(fā),歸納TI提供的相關(guān)資源(文檔,例程和網(wǎng)絡(luò)資源)并介紹相關(guān)開發(fā)調(diào)試方法幫您快速入門Codec Engine。
如圖1所示,Codec Engine是連接ARM和DSP或協(xié)處理器的橋梁,是介于應(yīng)用層(ARM側(cè)的應(yīng)用程序)和信號(hào)處理層(DSP側(cè)的算法)之間的軟件模塊。ARM應(yīng)用程序調(diào)用Codec Engine的VISA (Video, Image, Speech, Audio)API,如圖1中VIDENC_process(a, b, c )。Codec Engine的stub (ARM側(cè))會(huì)把參數(shù)a, b, c以及要調(diào)用DSP側(cè)process這個(gè)信息打包,通過消息隊(duì)列(message queue)傳遞到DSP。Codec Engine的skeleton(DSP側(cè))會(huì)解開這個(gè)參數(shù)包,把參數(shù)a, b, c轉(zhuǎn)換成DSP側(cè)對(duì)應(yīng)的參數(shù)x, y, z(比如ARM側(cè)傳遞的是虛擬地址,而DSP只能認(rèn)物理地址),DSP側(cè)的server(優(yōu)先級(jí)較低,負(fù)責(zé)和ARM通信的任務(wù))會(huì)根據(jù)process這一信息創(chuàng)建一個(gè)DSP側(cè)的process(x, y, x)任務(wù)最終實(shí)現(xiàn)VIDENC_process(a, b, c)的操作。
圖1 達(dá)芬奇軟件結(jié)構(gòu)框圖
圖2 Codec Engine 1.20 Release Notes截圖
點(diǎn)擊Codec Engine的發(fā)布說明文檔 (如圖2)的Validation Info,我們可以知道Codec Engine 1.20需要和以下軟件模塊和工具配合使用:
因此,我們需要在該Codec Engine安裝的DVSDK文件包下面檢查上面提到的軟件模塊和工具是否安裝,版本是否正確。否則,可能會(huì)編譯不過 Codec Engine的例子。那么,什么是 Framework Components,什么是xDAIS,什么又是XDC Tools呢?你可以分別到它們的根目錄下瀏覽它們各自的發(fā)布說明文檔,做一個(gè)總體的了解。
這里我們簡(jiǎn)單介紹一下,可以幫助大家盡快找到和自己相關(guān)的重點(diǎn)及資源。
1) Framework Components是TI提供的一個(gè)軟件模塊,負(fù)責(zé)DSP側(cè)的memory 和DMA資源管理。因此,DSP算法工程師需要了解這個(gè)軟件模塊。
http://tiexpressdsp.com/wiki/index.php?title=Framework_Components_FAQ
開發(fā)ARM+DSP平臺(tái)需要三類工程師:ARM應(yīng)用程序工程師、DSP算法工程師和DSP系統(tǒng)工程師。而開發(fā)ARM+協(xié)處理器平臺(tái)只需要ARM應(yīng)用程序工程師。下面就讓我們針對(duì)這三類工程師做分別介紹。如果您使用的是TI或TI第三方的編解碼算法,就不需要關(guān)注DSP算法工程師的部分。如果使用ARM+協(xié)處理器平臺(tái),就只需關(guān)心ARM應(yīng)用工程師的部分。
4.1 DSP算法工程師應(yīng)該如何著手?
這里我們不討論如何開發(fā)DSP算法,只討論DSP算法工程師怎樣讓自己的算法可以被ARM通過Codec Engine調(diào)用。(參考http://www.ti.com/litv/pdf/sprued6c,這個(gè)文檔會(huì)講到codec package及相關(guān)的.xs和.xdc文件,Codec Engine1.20及以上版本的用戶可以先不細(xì)究這些內(nèi)容,后面會(huì)介紹工具幫您自動(dòng)生成這些文件。)
1) 熟悉xDAIS和xDM標(biāo)準(zhǔn)。
xDM只是xDAIS的擴(kuò)展,因此,需要先了解xDAIS。在xDAIS 軟件包根目錄下的發(fā)布說明文檔里,可以很快找到關(guān)于xDAIS和xDM的文檔鏈接。
http://focus.ti.com/lit/ug/spruec8b/spruec8b.pdf
在xDAIS安裝路徑下的examples/ti/xdais/dm/examples/g711有一個(gè)g711_sun_internal.c,這個(gè)算法不符合xDAIS標(biāo)準(zhǔn)。在同一個(gè)路徑下的g711dec_sun_ialg.c (decoder)和g711enc_sun_ialg.c (encoder)是封裝成符合xDM標(biāo)準(zhǔn)之后的編解碼算法。可以通過這個(gè)例子學(xué)習(xí)和了解如何把自己算法封裝成符合xDM標(biāo)準(zhǔn)的算法。
xDAIS 6.10及其以后的版本,包含了一個(gè)工具QualiTI,可以檢查您的DSP算法是否滿足xDAIS標(biāo)準(zhǔn)(但不會(huì)檢查是否滿足xDM)。具體請(qǐng)參考:
4.2 DSP系統(tǒng)工程師應(yīng)該如何著手?
通常DSP算法工程師都會(huì)把自己的符合xDM標(biāo)準(zhǔn)算法編成一個(gè).lib文件(或 .a64P),供DSP系統(tǒng)工程師調(diào)用。DSP系統(tǒng)工程師最終build出一個(gè)DSP Server(也就是DSP的可執(zhí)行程序.x64P,和CCS下編譯生成的.out類似)。(參考http://focus.ti.com/lit/ug/sprued5b/sprued5b.pdf,這個(gè)文檔會(huì)講到.xdc和.bld等文件,Codec Engine1.20及以上版本的用戶可以先不細(xì)究,后面介紹工具幫您自動(dòng)生成這些文件。)
1) 如果現(xiàn)在有一個(gè).lib文件(或 .a64P)(算法必須符合xDM標(biāo)準(zhǔn)),如何生成自己的DSP Server呢?下面URL有詳細(xì)的關(guān)于RTSC Codec and Server Package Wizard工具介紹,教您如何把一個(gè).lib文件封裝成RTSC Codec 包和RTSC DSP Server包,并最終build出DSP的可執(zhí)行程序.x64P。
4.3 ARM應(yīng)用程序工程師應(yīng)該如何著手?
ARM應(yīng)用工程師需要調(diào)用Codec Engine的VISA API,最終編出ARM側(cè)的可執(zhí)行程序,因此,必須根據(jù)自己的應(yīng)用學(xué)習(xí)相關(guān)的VISA API、如何創(chuàng)建應(yīng)用側(cè)Codec Engine的package及配置文件。(參考http://focus.ti.com/lit/ug/sprue67d/sprue67d.pdf,這個(gè)文檔也涉及到如何調(diào)試Codec Engine的內(nèi)容)。
1)了解ARM應(yīng)用程序調(diào)用Codec Engine的流程、VISA API和其他Codec Engine API??梢詤⒖糃odec Engine安裝路徑下examples/apps/video_copy的例子(較簡(jiǎn)單)或者DVSDK安裝路徑下demos里的encode/decode/encodedecode例子(較復(fù)雜)。
http://wiki.davincidsp.com/index.php?title=Configuring_Codec_Engine_in_Arm_apps_with_createFromServer
1)如果遇到問題可以先訪問 http://wiki.davincidsp.com/index.php?title=Codec_Engine_FAQ。
a) Codec Engine 2.0及以上版本,請(qǐng)參考: http://wiki.davincidsp.com/index.php?title=Easy_CE_Debugging_Feature_in_CE_2.0
b) Codec Engine 1.x版本,請(qǐng)參考: http://wiki.davincidsp.com/index.php?title=TraceUtil
C. 用Soc Analyzer可以做系統(tǒng)調(diào)試之外,還可以統(tǒng)計(jì)具體函數(shù)運(yùn)行(ARM和DSP側(cè))時(shí)間(benchmark)。請(qǐng)參考: http://tiexpressdsp.com/wiki/index.php?title=SoC_Analyzer
以上針對(duì)如何上手TI的Codec Engine做了簡(jiǎn)單的歸納,還有很多具體細(xì)節(jié)的問題沒有涉及到。還請(qǐng)各位工程師從自己要用的軟件模塊發(fā)布說明文檔開始找到相關(guān)的文檔并研究。經(jīng)常訪問TI的網(wǎng)頁,http://wiki.davincidsp.com和http://tiexpressdsp.com/wiki找到最新的信息和資料。也非常歡迎您在wiki上提問。
聯(lián)系客服