DM6467T移植图像算法

来源:互联网 发布:vb中ascii码 编辑:程序博客网 时间:2024/06/09 14:51

这是在DM6467T移植图像算法的点滴记录。

DM6467T移植图像算法点滴记录


编译开发步骤:

WINDOWS下:

1.将算法工程包导入到CCSV5.1


2.编译后生成.a64P文件(在工程目录C6000LIB)


LINUXdvsdk(~/dvsdk_3_10_00_19/):

3.将产生的a.64P放到BScodecs

(Bscodecs/packages/ti/sdo/codecs/bsalg/lib/release/)


4.make codecs编译生成cs.64P文件

(BScodecs/packages/ti/sdo/server/cs/bin/)


5.make dmai编译生成可执行程序video_encode_io1_dm6467.x470MV

(dmai_2_10_00_12/packages/ti/sdo/dmai/apps/video_encode_io1/linux/


6.cs.64Pvideo_encode_io1_dm6467.x470MV放置到开发板运行环境目录下(默认/nfs)


7.在板子上输入以下命令运行程序:

cd/nfs

sudochmod +x video_encode_io1_dm6467.x470MV

./video_encode_io1_dm6467.x470MV

即可看出以下运行信息:

Startingapplication...

initbsalg algorithm

openalg_instance....

DSPSide debug info(len=6096):

alg_init...ok

Readingconfiguration from ConstantsConfig.xml Reading ChannelConfig.xml.

以下是具体修改移植说明:


http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_3_10/latest/index_FDS.html

cs2dm6467_1_00_00_10_Setup.bin

CodegenTools(选择Codegen6.1.12版本下载)


  1. 安装Codegen6.1.12,安装路径选择在dvsdk/

Sudochmod +x ti_cgt_c6000_6.1.12_setup_linux_x86.bin

./ti_cgt_c6000_6.1.12_setup_linux_x86.bin

生成C6000CGT6.1.12文件夹:

  1. 安装cs2dm6467_1_00_00_10_Setup.bin编码包:

cs2dm6467_1_00_00_10_Setup.bin拷贝到dvsdk目录下,安装路径选择在dvsdk/

sudochmod +x cs2dm6467_1_00_00_10_Setup.bin

./cs2dm6467_1_00_00_10_Setup.bin

生成cs2dm6467_1_00_00_10文件夹:

cs2dm6467_1_00_00_10名称改成BScodecs

修改dvsdk/dvsdk_3_10_00_19Rules.make文件中的下面参数(开发平台包已修改好):

ifeq($(PLATFORM),dm6467)

#Where the cs2dm6467 codec server package is installed.

CODEC_INSTALL_DIR=$(DVSDK_INSTALL_DIR)/BScodecs

endif

#Where the Code Gen is installed.

CODEGEN_INSTALL_DIR=$(DVSDK_INSTALL_DIR)/../C6000CGT6.1.12

  1. BSCodecs配置修改

Bscodecs/packages/ti/sdo/codecs下其余的codecs去掉,并建立bsalg文件夹(可以将

我们的bsalg拷贝到此,其实里边的内容均从另外的codec修改而来,如h264enc),只留以下codecs算法。如下:

这样建立我们的DSP算法引擎bsalg.接下来分别修改package.bld,package.xdc, package.xs这些文件。

比如package.bld文件,修改如下:


/*

* ======== package.bld ========

*/



Pkg.attrs.exportAll= true;

varSRCS = ["bsalg.c", ];


/*

for(var i = 0; i < Build.targets.length; i++) {

vartarg = Build.targets[i];


if(targ.name == "C64P") {

Pkg.addLibrary("lib/bsalg",targ, {

}).addObjects(SRCS);

}

}

*/

Package.xdc

/*!

* ======== h264enc========

*/


packageti.sdo.codecs.bsalg [1, 0, 0] {

moduleBSALG; //模块名称BSALG

}

对于package.xs比较重要的是getLibs配置,这里是配置DSP算法库的包含及其路径,如下:

/*

* ======== package.xs ========

*

*/


/*

* ======== getLibs ========

*/

functiongetLibs(prog)

{

varlib = null;

//以下是把添加自己生成的a64P库

var

c6000lib="lib/release/dsp_alg.a64P;lib/release/xx.a64p....";

}

这样修改之后(其他可能有一些不相关的文件,可以不管),CCS产生的LIB,改成后缀*.a64P后直接放在这里Bscodecs/packages/ti/sdo/codecs/bsalg/lib/release/下既可以了。

接着修改server集成文件(Bscodecs/packages/ti/sdo/server),需要修改的是codec.cfgmemmap.tci,package.xs, sever.tcf文件,作用主要是配置我们的BSCodecs算法。

对于codec.cfg文件,详细注释说明见codec.cfg文件。

对于memmap.tci文件,修改如下:

varmem_ext = [

{

comment: "DDRALGHEAP: off-chip memory for dynamic algmem allocation",

name: "DDRALGHEAP",

base: 0x88000000, // 128MB

//len: 0x07A00000, // 122MB

len: 0x03C00000, //60M for dynamic algmem(add by WSN)

space: "code/data"

},

{

comment: "DDR2: off-chip memory for application code and data",

name: "DDR2",

//base: 0x8F00000, // 250MB

base: 0x8BC00000,

//len: 0x00400000, // 4MB

len: 0x04200000, //66MB for ALG code(add by WSN)

space: "code/data"

},

]

关于Package.xs文件,修改如下:

functionvalidate() {


//Each codec is validated with the following call:

// validate_one_codec(<package name>, <module name>);


//validate_one_codec( "ti.sdo.codecs.aachedec", "AACHEDEC");

//validate_one_codec("ti.sdo.codecs.g711dec", "G711DEC" );

//validate_one_codec("ti.sdo.codecs.g711enc", "G711ENC" );

//validate_one_codec( "ti.sdo.codecs.h264dec", "H264DEC");

//validate_one_codec( "ti.sdo.codecs.h2641080p60vdec","H2641080P60VDEC" );

validate_one_codec("ti.sdo.codecs.h264enc", "H264ENC" );

validate_one_codec("ti.sdo.codecs.h264fhdvenc", "H264FHDVENC" );

validate_one_codec( "ti.sdo.codecs.bsalg", "BSALG");

//validate_one_codec("ti.sdo.codecs.jpegdec", "JPEGDEC" );

//validate_one_codec( "ti.sdo.codecs.jpegenc", "JPEGENC");

//validate_one_codec("ti.sdo.codecs.mpeg2dec", "MPEG2DEC" );

//validate_one_codec( "ti.sdo.codecs.mpeg4dec", "MPEG4DEC");

//validate_one_codec( "ti.sdo.codecs.mpeg4enc", "MPEG4ENC");

}

对于server.tcf文件,修改如下

//bios.DDR2.createHeap= true;

//bios.DDR2.heapSize = 0x00040000; // 256K


//addby wsn

bios.DDR2.createHeap= true;

bios.DDR2.heapSize = (0x100000 * 32); //32M


bios.MEM.instance("DDR2").enableHeapLabel= true;

bios.MEM.instance("DDR2").heapLabel= prog.extern("_DDR2_HEAP", "asm");


bios.DDRALGHEAP.createHeap= true;

bios.DDRALGHEAP.heapSize = bios.DDRALGHEAP.len;


//这个配置可以使得CLK_getltime()正常工作了

bios.CLK.TIMERSELECT= "Timer 0";

//bios.CLK.PRD= 33250;


//bios.CLK.INPUTCLK= 594;

bios.CLK.MICROSECONDS= 1000;


这样修改server完成,整个codecs可以用了。

剩下的就是编写算法接口c文件(详见xdm_alg.c示例)放置于

dmai_2_10_00_12/packages/ti/sdo/dmai/apps/video_encode_io1/

最后,依据前面所说编译开发步骤,编译运行即可。