这是在DM6467T移植图像算法的点滴记录。
DM6467T移植图像算法点滴记录
编译开发步骤:
在WINDOWS下:
1.将算法工程包导入到CCSV5.1
2.编译后生成.a64P文件(在工程目录C6000LIB下)
在LINUX的dvsdk(~/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.64P和video_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版本下载)
安装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文件夹:
安装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_19下Rules.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
…
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.cfg,memmap.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/下
最后,依据前面所说编译开发步骤,编译运行即可。