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 中的框架組件文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章