編解碼服務(wù)器(CS)就是一個(gè)二進(jìn)制文件,它集成了編解碼器,框架組件和一些系統(tǒng)代碼,當(dāng)CS運(yùn)行在DSP上時(shí),它使用了DSP/BIOS作為其內(nèi)核。CS同時(shí)包括了對(duì)客戶請(qǐng)求的相關(guān)DSP/BIOS線程。CS可以代表實(shí)際的DSP硬件、導(dǎo)入到DSP上的鏡像文件以及正在運(yùn)行的任務(wù),其配置需要兩個(gè)步驟: >通過(guò)TCF腳本語(yǔ)言配置DSP/BIOS; >通過(guò)XDC配置剩下的組件,比如:FC組件、DSP/BIOS Link、Codec Engine等。 配置完成的服務(wù)器鏡像文件是在引擎配置文件(ceapp.cfg)中使用的,如前所述的demoEngine.server = "./encodeCombo.x64P";
a. 編譯一個(gè)編解碼服務(wù)器 CS鏡像文件的創(chuàng)建過(guò)程是通過(guò)前面介紹的XDC工具來(lái)完成的,所不同的是,CS在創(chuàng)建時(shí)需要一個(gè)main.c和相關(guān)的BIOS配置腳本.tcf文件. >tcf: 腳本文件主要是對(duì)DSP/BIOS內(nèi)核進(jìn)行配置,如: 定義DSP的內(nèi)存映射,設(shè)置DSP的中斷向量表,創(chuàng)建和初始化其他DSP/BIOS數(shù)據(jù)對(duì)象等,具體可參見(jiàn)video_copy.tcf,注意我在里面添了一個(gè)關(guān)于trace的參數(shù)配置是原來(lái)沒(méi)有的。
>main.c: 只要你的算法實(shí)現(xiàn)了XDM接口,就需要一個(gè)main.c的程序去初始化CE,然后用其他配置腳本來(lái)創(chuàng)建一個(gè)服務(wù)器鏡像*.x64P. 在main.c里面除了調(diào)用CERuntime_init()初始化CE外,就是對(duì)于trace相關(guān)函數(shù)的初始化和處理,這部分暫時(shí)沒(méi)有細(xì)究。另有一點(diǎn)值得注意,在這里可以實(shí)現(xiàn)對(duì)cache的重新配置,因?yàn)樵?SPAN lang=EN-US>tcf文件里面對(duì)cache的配置可能會(huì)不起作用,這是可以在這里以函數(shù)代碼的方式來(lái)配,這點(diǎn)以前沒(méi)有注意過(guò)。這里有點(diǎn)不明白的是,在ceapp_init()中已經(jīng)做了一次CERuntime_init(),為何在CS處還要做一次?(我覺(jué)得是因?yàn)橄染幾gCS,生成*.x64P,然后才編譯app端,這樣就可以理解成: 只要你的算法實(shí)現(xiàn)了XDM接口,就需要對(duì)CE做初始化CERuntime_init(),而CS的編譯是調(diào)用了經(jīng)XDM封裝后的codec生成的*.a64P的)
>XDC相關(guān)文件: >>>package.xdc /*--------------聲明包名-----------------*/ package server{} (我們目前的.xdc是: package server.video.copy, 此即\server\video_copy\..xdc,應(yīng)該無(wú)需改動(dòng))
>>>package.bld: 聲明所必須包含的包,鏈接命令腳本,tcf文件和一些源文件,定義編譯屬性、平臺(tái)和對(duì)象等。
>>>server.cfg: 這是CS配置的重點(diǎn),說(shuō)明如下。 /*第一部分: 聲明運(yùn)行環(huán)境和各種編解碼模塊, 與CE.cfg類似*/ /*--------------set up OSAL----------------*/ var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global'); osalGlobal.runtimeEnv = osalGlobal.DSPLINK_BIOS; 注:這兩句是設(shè)置全局的模塊使配置腳本生效,然后是設(shè)置引擎的運(yùn)行環(huán)境,即需要用的DSP/BIOS Link,與CE.cfg有點(diǎn)區(qū)別).
/*---------------server Cofiguation---------------*/ var Server = xdc.useModule('tisdo.ce.Server'); Server.threadAttrs.stackSize = 16384; Server.threadAttrs.priority = Server.MINPRI;
/*--------------get codec modules;i.e.implementation of codecs-------*/ var H264DEC = xdc.useModule('codecs.h264dec.H264DEC'); //與CE.cfg同,注意H264DEC標(biāo)識(shí)的使用。
Server.algs = [ {name:"h264dec", mod:H264DEC,threadAttrs:{stackSize:4096,stackMemId:0,priority:Server.MINPRI+1} }, {...if have..}, ];
/*第二部分: DSKT2 and DMAN3的配置:XDAIS算法內(nèi)存和DMA的分配,參考配置文件*/
|