首页 > 代码库 > Codec Engine 的集成(完结)

Codec Engine 的集成(完结)

 本文翻译自TI的手册,该手册是学习GPP+DSP开发的金典文档,希望对各位入门有所帮助,有理解不当之处望请赐教。

 Codec Engine Application Developer User‘s Guide.pdf (Literature Number: SPRUE67D)

《Codec Engine 应用开发使用手册》              http://blog.csdn.net/dyzok88/article/details/42154487

《第一章 Codec Engine 概要》                   http://blog.csdn.net/dyzok88/article/details/42214813

《第二章 Codec Engine 安装和设置》             http://blog.csdn.net/dyzok88/article/details/42278109

《第三章 使用 Codec Engine 的示例应用程序》    http://blog.csdn.net/dyzok88/article/details/42302793

《第四章 使用 Codec Engine 的 API 函数 (一)》http://blog.csdn.net/dyzok88/article/details/42323123

《第四章 使用 Codec Engine 的 API 函数 (二)》http://blog.csdn.net/dyzok88/article/details/42324061

《第四章 使用 Codec Engine 的 API 函数 (三)》http://blog.csdn.net/dyzok88/article/details/42344661

《第四章 使用 Codec Engine 的 API 函数 (四)》http://blog.csdn.net/dyzok88/article/details/42353141

《第四章 使用 Codec Engine 的 API 函数 (五)》http://blog.csdn.net/dyzok88/article/details/42374715

《第四章 使用 Codec Engine 的 API 函数 (六)》http://blog.csdn.net/dyzok88/article/details/42342539

《第四章 使用 Codec Engine 的 API 函数 (七)》http://blog.csdn.net/dyzok88/article/details/42583837

《第四章 使用 Codec Engine 的 API 函数 (八)》http://blog.csdn.net/dyzok88/article/details/42611221


// 正文


第五章 集成一个 Codec 引擎

本章介绍了引擎集成工程师应该如何配置一个被应用程序开发人员使用的引擎。

5.1 综述

5.2 可重复使用的示例

5.3 了解引擎配置的语法


5.1 综述

如第1.4.3所述,引擎集成工程师,应用程序工程师会从引擎集成工程师那儿得到引擎配置文件。在实践中,这些角色可以由一个人共享。

引擎配置信息存储在一个 XDC *.cfg 文件中,使用 makefile 文件处理, makefile 使用 package.xdc 生成 *.c 文件和来自 *.cfg 文件的链接命令文件( *.xdl )。对于编译说明,请参阅 CE_INSTALL_DIR/examples/build_instructions.html。

编解码器引擎的应用实例通常支持 GPP+DSP,单 GPP 和单 DSP 使用。对于 GPP+DSP 的使用,引擎配置往往定义在名为 remote.cfg 的文件中,指定编解码程序在 DSP 服务器上远程运行。对于单 GPP 或单 DSP 的使用,配置信息通常位于一个名为“ local.cfg ”的文件,指定编解码程序在本地(作为主应用程序的 CPU )运行。

一个引擎的配置包括:引擎的名称,以及每个引擎内的编解码器和它们的名称,每个编解码器是本地的还是远程的(相对于应用程序),每个编解码器应纳入哪一组(用于支持资源共享的环境),如果某个引擎包含远程编解码器的服务器映像的名称,等等。

但是,在其最简单的形式,引擎配置脚本可以简单地命名 DSP 服务器软件包及相应服务器的可执行程序,并自动导入所有服务器的编解码器定义。这使得来自远程编解码器的应用程序的编解码器能够使用。

对于后一种形式的配置工作,你的包中收到你的DSP服务器是很重要的,这是 CE 2.00 默认的服务器交付方法,而不只是一个 DSP 服务器的二进制可执行文件。


5.2 可重复使用的示例

video_copy 示例使用以下 ceapp.cfg 配置文件:

/*   ======== ceapp.cfg ======== */
/* use the tracing utility module */
var TraceUtil = xdc.useModule('ti.sdo.ce.utils.trace.TraceUtil');
//TraceUtil.attrs = TraceUtil.SOCRATES_TRACING;

/* set up OSAL */
var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global');
osalGlobal.runtimeEnv = osalGlobal.DSPLINK_LINUX;

/* ======== Engine Configuration ======== */
var Engine = xdc.useModule('ti.sdo.ce.Engine');
var myEngine = Engine.createFromServer(
    "video_copy",        // Engine name (as referred to in the C app)
    "./video_copy.x64P", // path to server exe, relative to its package dir
    "ti.sdo.ce.examples.servers.video_copy.evmDM6446" // server package
);

大部分此配置文件可以被引用。对于您的应用程序,您应该修改以粗体显示的部分:您引擎的名称(你的选择),服务器可执行文件的名称,和服务器可执行文件包的名称。

包括在服务器中的编解码器将用其原始名称提供给该应用程序,为方便起见示出应用程序的编译,正如摘录所示:

configuring ceapp.x470MV from package/cfg/ceapp_x470MV.cfg ...
Info: Configuring engine named 'video_copy' from the info file for DSP server 
'./video_copy.x64P', located in package 
'ti.sdo.ce.examples.servers.video_copy.evmDM6467':
      Target app will look for the DSP server image 'video_copy.x64P' in its current 
directory.
      Adding codec 'viddec_copy' 
(ti.sdo.ce.examples.codecs.viddec_copy.VIDDEC_COPY), scratch groupId=0
      Adding codec 'videnc_copy' 
(ti.sdo.ce.examples.codecs.videnc_copy.VIDENC_COPY), scratch groupId=0

Info: Reading DSP memory map from the info file for DSP server './video_copy.x64P', 
located in package 'ti.sdo.ce.examples.servers.video_copy.evmDM6467':
...

这是很好的做法,以验证在编译日志(服务器可执行文件/包的名称,编解码器的名称,scratch groups)的信息,符合您的期望。

即使该引擎是由存储在服务器软件包中的信息配置生成的,你还必须在你的软件包路径中,包含服务器中所有的编解码器。如果没有需要的编解码器软件包,编译将失败。如果你有一个与用来编译服务器不同版本的编解码器软件包,你会得到警告信息。


5.2.1 高级引擎创建

在前面配置示例的 Engine.createFromServer() 方法适用于 Codec Engine 2.00,它取代了较低级别的,用于最常见用例的 Engine.create() 方法。

较低级别的引擎的创建方法允许你添加非本地编解码器,为远程编解码器使用不同的名称,省略你没有的编解码器,等等。你可能在一些高级用例中需要它。下面的示例使用较低级别 Engine.create() 方法:

/* get various codec modules; i.e., implementation of codecs */
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');

/*  ======== Engine Configuration ========  */
var Engine = xdc.useModule('ti.sdo.ce.Engine');
var myEngine = Engine.create("video_copy", [
    {name: "videnc_copy", mod: VIDENC_COPY, local: false},
    {name: "viddec_copy", mod: VIDDEC_COPY, local: false}
]);

myEngine.server = "./video_copy.x64P";

/*  ======== Server memory map (DSPLINK) configuration ========
 *  This table must match exactly the addresses and sizes of segments in the Server’s
 *  BIOS configuration (.tcf) script. There is exactly one "main", one "link", and
 *  one "reset" segment type, and zero or more of "other" types. */
myEngine.armDspLinkConfig = {
    memTable: [
        ["DDRALGHEAP", {addr: 0x88000000, size: 0x07A00000, type: "other"}],
        ["DDR2",       {addr: 0x8FA00000, size: 0x00400000, type: "main" }],
        ["DSPLINKMEM", {addr: 0x8FE00000, size: 0x00100000, type: "link" }],
        ["RESETCTRL",  {addr: 0x8FF00000, size: 0x00000080, type: "reset"}],
    ],
};

另外,用粗体显示的字符是你可能需要在应用程序中改变的地方。


5.3 了解引擎配置语法

在引擎配置中使用的语法是基于JavaScript的,它也可用于用来静态配置 DSP/BIOS 的Tconf语言。(见 SPRU007 了解详细信息。)

不同于在网页中使用的 JavaScript,提供一种对象模型,以满足引擎配置的需要。这种对象模型记录在配置参考文档 CE_INSTALL_DIR/xdoc/index.html 中。

例如,下面的语句导致要为配置脚本提供 ti.sdo.ce.osal 软件包中的全局模块。然后设置全局模块 DSPLINK_LINUX 的 runtimeEnv 属性。这表明,使用该引擎的应用程序可以使用 DSP/BIOS Link 和 Linux 操作环境。

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

要看到 runtimeEnv 属性的其他选项,请按照下列步骤操作:

1) 打开 CE_INSTALL_DIR/xdoc/index.html 看配置参考。该文档依赖您的浏览器,您可能需要启用活动内容,以查看左边的节点列表。

2) 点击 ti.sdo.ce.osal package 链接。

3) 点击全局模块( Global module )链接。

4) 你可以看到 runtimeEnv 的有效设置和的 Global module 其他文档。

5) 单击窗口右上角的“返回”。请注意,浏览器中的后退按钮可能不会预期返回在线帮助系统。

设置运行时环境后,示例 ceapp.cfg 配置文件就获得访问它将需要的编解码模块的权限。例如:

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

该语句“使用” "ti.sdo.ce.examples.codecs.viddec_copy "软件包中的VIDDEC_COPY 模块,并用一个名为 VIDDEC_COPY 的变量存储该句柄。类似的语句就可以得到相应的视频编码器。您可以修改这些语句,引用到 Codec Engine 的任何编解码器。

本文出处原文链接http://blog.csdn.net/dyzok88/article/category/2786543, 转载请注明出处!

ti.sdo.ce.examples.codecs.viddec_copy 软件包对应于 CE_INSTALL_DIR/examples/ti/sdo/ce/examples/codecs/viddec_copy,并且 VIDDEC_COPY匹配该目录中的 VIDDEC_COPY.xdc 文件名。

下一组语句声明引擎的内容。

var Engine = xdc.useModule('ti.sdo.ce.Engine');
var vcr = Engine.create("video_copy", [
    {name: "videnc_copy", mod: VIDENC_COPY, local: false},
    {name: "viddec_copy", mod: VIDDEC_COPY, local: false}
]);

首先,把在 ti.sdo.ce 软件包中的引擎模块提供给脚本。然后,使用引擎模块的 create() 方法创建一个引擎。正如在 ti.sdo.ce.osal 软件包中全局模块,您可以使用配置参考联机帮助,以获取有关在 ti.sdo.ce 软件包引擎模块的详细信息。

每个引擎有一个名称,用于被应用工程师使用 Engine_open() API 调用。那么,该引擎的名称是“ video_copy ”。

create 方法预计算法描述的数组每个算法描述包含以下成员

1. name. 此字符串指定被应用程序工程师使用的“本地”名字,该名字用来识别使用 VIDENC_create 和 VIDDEC_create VISA API 函数实例化的算法。

2. mod. 该成员是一个参考,标识实际的模块实现的算法实例。这是和之前语句一样声明的变量名,该变量调用 xdc.useModule 得到 ti.sdo.ce.examples.codecs.viddec_copy.VIDDEC_COPY 模块。

3. local. 如果为 true,则该算法被实例化到“本地” CPU。否则,该编解码器服务器创建远程算法(使用 mod 确定)实例。


5.3.1 框架组件配置

示例配置文件-remote.cfg (针对 GPP+DSP )和 local.cfg (针对 GPP-only 和 DSP-only )-通常配置ti.sdo.fc.dskt2.DSKT2 和 ti.sdo.fc.dman3.DMAN3 模块,他们都是框架组件的一部分。DSKT2 是 xDAIS 算法的内存分配管理器,而 DMAN3 是 DMA 的管理器。有关配置这些模块的详细信息,参考 CE_INSTALL_DIR/xdoc/index.html 中的框架组件文件。

Codec Engine 的集成(完结)