您的位置:首页 > 编程语言

codec engine代码阅读五---CE_DIR/examples/ti/sdo/ce/examles/servers/video_copy

2012-11-09 12:40 411 查看
主要介绍CE_DIR/examples/ti/sdo/ce/examles/servers文件夹

上一篇看了codecs的代码,了解到codecs提供了一个实现了IVIDENC接口的视频编码器。与他并行的还有一个viddec_copy文件夹里 面实现的是视频解码器。这里的servers/video_copy文件夹里面的代码,是将编码器和解码器集成在一起组成一个视频的codec server.

实际为dm6446编译的代码实际上是存在于evmDM6446文件夹下的:

j@j-desktop:/..../examples/servers/video_copy$ ls

evm2530 evm3530 evmDM6446 evmDM6467 evmOMAPL137 makefile package package.xdc

j@j-desktop:/..../examples/ti/sdo/ce/examples/servers/video_copy$ cd evmDM6446/

j@j-desktop:/..../examples/ti/sdo/ce/examples/servers/video_copy/evmDM6446$ ls

link.cmd main.c makefile video_copy.cfg video_copy.tcf

做成服务器的代码很简单,总共五个文件。这里我们还得把父目录server/video_copy中的文件package.xdc和makefile算上,总共七个文件。我们先看package.xdc,它简单的要命,只是声明了一个包:

/*!

package ti.sdo.ce.examples.servers.video_copy [1, 0, 0] {

}

然后是与它同级的makefile,它仅仅是根据目标设备的不同选不同的文件夹编译:

all:

%::

ifneq (,$(findstring OMAP2530,$(DEVICES)))

$(MAKE) -C evm2530 $@

endif

ifneq (,$(findstring OMAP3530,$(DEVICES)))

$(MAKE) -C evm3530 $@

endif

ifneq (,$(findstring DM6446,$(DEVICES)))

$(MAKE) -C evmDM6446 $@

endif

ifneq (,$(findstring DM6467,$(DEVICES)))

$(MAKE) -C evmDM6467 $@

endif

ifneq (,$(findstring OMAPL137,$(DEVICES)))

$(MAKE) -C evmOMAPL137 $@

endif

然后我们进入evmDM6446文件夹下,它的makefile控制编译流程,XDC工具使用示例里面有讲,这里就不多讲了,接着我们看video_copy.cfg文件,这里面:

1,声明了server所需要的模块:

var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global');

osalGlobal.runtimeEnv = osalGlobal.DSPLINK_BIOS;

osalGlobal.defaultMemSegId = "DDR2";

var LogServer = xdc.useModule('ti.sdo.ce.bioslog.LogServer');

var VIDDEC_COPY =

xdc.useModule('ti.sdo.ce.examples.codecs.viddec_copy.VIDDEC_COPY');

var VIDENC_COPY =

xdc.useModule('ti.sdo.ce.examples.codecs.videnc_copy.VIDENC_COPY');

var Server = xdc.useModule('ti.sdo.ce.Server');

需要的模块包括VIDDEC_COPY和VIDENC_COPY,这两个模块是在codecs里的那两个。

还有Server模块,用于使用一个Server.然后对Server进行配置:

Server.threadAttrs.stackSize = 2048;

Server.threadAttrs.priority = Server.MINPRI;

Server.algs = [

{

name: "viddec_copy", // 解码器的C语言明子。

mod: VIDDEC_COPY, // 上面定义的var VIDDEC_COPY模块

threadAttrs: {

stackMemId: 0, // 任务栈的ID

priority: Server.MINPRI + 1 // 任务优先级

},

groupId : 0, //组ID

},

{

name: "videnc_copy", //下同理

mod: VIDENC_COPY,

threadAttrs: {

stackMemId: 0,

priority: Server.MINPRI + 1

},

groupId : 0,

},

];

另外还有一些其他的东西配制,这里不说了。只在知道,这里包含了codecs里面的两个自建的模块和Server模块就可以了。

然后是main.c里面只有一个main函数:

Void main(Int argc, Char *argv[])

{

/* init Codec Engine */

CERuntime_init(); //这句初始化Codec Engine.下面的语句都没有太大意思,是用于代码trace的。

/* init trace */

GT_init();

/* create a mask to allow a trace-print welcome message below */

GT_create(>Mask, "servers.video_copy.evmDM6446");

/* ...and initialize all masks in this module to "on" */

GT_set("servers.video_copy.evmDM6446=01234567");

GT_0trace(gtMask, GT_4CLASS, "main> Welcome to DSP server's main().\n");

}

也就是说main.c只要一句CERuntime_init就可以了。这就使所含了两个codecs算法的server跑起来了。

link.cmd是空,我们知道,它应该是在configuro运行时产生的,不知为什么make clean没去掉。

好了,server也说完了。下篇说app.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐