封装a.64p成.x64p达芬奇工具链的建立(工程编译步骤)

(参考:http://blog.163.com/laorenyuhai126@126/blog/static/193507792011019238152/);

工具链是指的Linux下对程序的编译环境。在这里通过 codec_engine_1_02\examples\codecs 下的videnc_copy工程封装CCS下调试好的程序并生成videnc_copy.a64P,再通过codec_engine_1_02\examples\servers\video_copy工程把videnc_copy.a64P封装成all.x64P

编译步骤如下:

1、把ccs下编写好的文件复制到Linux codec_engine_1_02\examples\codecs 下的videnc_copy工程中。

2.修改该工程中的package.bld文件

修改var SRCS = ["videnc_copy","test"];括号里只选择工程下的C文件

修改该文件中的for (var i = 0; i <1 ; i++) { 选择DSP端只用cgtool来编译(在config.bld中C64P排第一个)

3. 由于输入输出参数由IVIDENC_InArgs,IVIDENC_OutArgs结构体来决定,所以为了增加输出输入参数,应该修改这两个结构体。为此修改xdais_6_25_02_11/packages/ti/xdais/dm中的ividenc.h。

//要添加在结构体的后头

typedef struct IVIDENC_InArgs {

XDAS_Int32 size;

int num1;

int num2;

} IVIDENC_InArgs;

typedef struct IVIDENC_OutArgs {

XDAS_Int32 size;

XDAS_Int32 extendedError;

XDAS_Int32 bytesGenerated;

XDAS_Int32 encodedFrameType;

XDAS_Int32 inputFrameSkip;

IVIDEO_BufDesc reconBufs;

int out;

} IVIDENC_OutArgs;

4.在videnc_copy中调用算法:在VIDENCCOPY_TI_process函数中添加(替换原来处理输入输出buf的地方):

outArgs->out=test(inBufs->bufs[0],outBufs->bufs[0],inBufs->bufSizes[0],inArgs->num1,inArgs->num2);

由于使用了#ifdef USE_ACPY3 宏,故而要选择是否使用DMA,为了避免Cache和DMA的冲突,选择不使用DMA。修改odec_engine_2_25_05_16/examples/ti/sdo/ce/examples/servers/all_codecs下的all.cfg:

VIDENC_COPY.useDMA = false;

5.编译videnc_copy生成videnc_copy.a64P

6.修改server,编译生成all.x64P

使用:

1.修改encode下的Makefile文件,让encode包含server及codec工程:

XDC_PATH = $(USER_XDC_PATH);../../packages;$(DMAI_INSTALL_DIR)/packages;$(CE_INSTALL_DIR)/packages;$(FC_INSTALL_DIR)/packages;$(LINK_INSTALL_DIR)/packages;$(LINK_INSTALL_DIR);$(XDAIS_INSTALL_DIR)/packages;$(CMEM_INSTALL_DIR)/packages;$(CODEC_INSTALL_DIR)/packages;$(CE_INSTALL_DIR)/examples

2.修改encode下的encode.cfg:

var demoEngine = Engine.createFromServer(

"test", //引擎句柄

"./bin/ti_platforms_evmDM6467/all.x64P", //以bin开头

"ti.sdo.ce.examples.servers.all_codecs" //路径

);

3.文件中调用(例子):

CERuntime_init();

Dmai_init();

VIDENC_Handle           hVen                = NULL;

Engine_Handle           hEngine             = NULL;

hEngine = Engine_open("test", NULL, NULL);

if (hEngine == NULL) {

ERR("Failed to open codec engine:test\n");

}

hVen = VIDENC_create(hEngine,"videnc_copy",NULL);

if (hVen == NULL) {

ERR("Failed to create video encoder: videnc_copy");

}

XDM_BufDesc inBufs;

XDM_BufDesc outBufs;

VIDENC_InArgs inArgs;

VIDENC_OutArgs outArgs;

char *JpgBuffer;

char *JpgBuffer1;

JpgBuffer=(char *)Memory_contigAlloc(1024*1024,Memory_DEFAULTALIGNMENT); //在loadmoudle.sh脚本里面要添加相应大小的(arm与dsp)共享内存大小块

JpgBuffer1=(char *)Memory_contigAlloc(1024*1024,Memory_DEFAULTALIGNMENT);

int JpgSize;

FILE *fp=fopen("test.jpg","rb");

fseek(fp,0,SEEK_END);

JpgSize=ftell(fp);

fseek(fp,0,SEEK_SET);

fread(JpgBuffer,1,JpgSize,fp);

fclose(fp);

inBufs.numBufs       = 1;

inBufs.bufs          = &JpgBuffer;

inBufs.bufSizes      = &JpgSize;

outBufs.numBufs  = 1;

outBufs.bufs     = &JpgBuffer1;

outBufs.bufSizes = &JpgSize;

int num1=1;

int num2=1;

inArgs.num1=num1;

inArgs.num2=num2;

inArgs.size=sizeof(VIDENC_InArgs);

outArgs.size=sizeof(VIDENC_OutArgs);

VIDENC_process (hVen,&inBufs,&outBufs,&inArgs,&outArgs);

if(outArgs.out!=0)

{

printf("copy failed\n");

return -1;

}

FILE *fp1=fopen("out.jpg","wb");

fwrite(JpgBuffer1,1,JpgSize,fp1);

fclose(fp1);

附录(算法例子(在Dsp完成简单的图片复制):

int test(char *inbuf,char *outbuf,int size,int num1,int num2)

{

int flag1=num1;

int flag2=num2;

int flag3=-1;

int jpgsize=size;

if(1==flag1&&1==flag2)

{

memcpy(outbuf,inbuf,jpgsize);

flag3=0;

}

return flag3;

}

基于davinci6467的DSP算法移植相关推荐

  1. 基于STM32单片机的差分升级(增量升级)算法移植手册V.3 STM32+BSDiff+LZ77

    基于STM32单片机的差分升级算法移植手册V.3 STM32+BSDiff+LZ77 更新时间:2022-03-10 版本V1.3 同步更新如下: 基于STM32单片机的差分升级(增量升级)算法V1. ...

  2. 基于LPRNet的车牌识别算法移植与测试

    课程全程将在[SOPHGO(算能)云平台上进行. 本次课程将介绍: (1)SOPHGO(算能)云平台环境搭建 (2)LPRNet算法 (3)通过BMNNSDK 2.7.0进行LPRNet模型转换和量化 ...

  3. CEVA-DSP算法移植--1

    一.项目需求 简单说下项目需求,首先基于CNN(卷积神经网络)框架的人脸识别和人脸追踪的算法能在Linux环境下单独地编译,能实现功能:其次把这两个算法移植到CEVA-DSP上:然后对算法进行优化,其 ...

  4. 嵌入式算法移植优化学习笔记5——CPU,GPU,TPU,NPU都是什么

    嵌入式算法移植优化学习笔记5--CPU,GPU,TPU,NPU都是什么 一.什么是CPU? 二.什么是GPU? 三.什么是NPU? 四.什么是TPU? 附: 随着AI的广泛应用,深度学习已成为当前AI ...

  5. 【嵌入式底层知识修炼】基于通用消抖算法,拓展通用非阻塞Key按键识别算法

    文章目录 01 - 通用消抖算法 02 - Key按键识别需求 03 - 拓展通用非阻塞Key按键算法 04 - 实际使用方法 05 - 总结 首先学习别人的东西,然后吸收别人的东西,接着应用并改造别 ...

  6. matlab的多变量dmc源程序,基于MATLAB多变量DMC算法的仿真技术研究

    基于MATLAB多变量DMC算法的仿真技术研究 基于MATLAB多变量DMC算法的仿真技术研究 作者:李凤霞 于佐军 来源:<科技创新导报>2011年第17期 摘 要:利用MATLAB开发 ...

  7. 基于matlab和FFT算法实现信号频谱分析

    系列文章目录 数字信号处理(DSP:Digital Signal Process)是电子通信领域非常重要的研究方向,博主汇总了数字信号处理(DSP)中常用的经典案例分析,主要基于算法分析.MATLAB ...

  8. 首届全球RTB(实时竞价)广告DSP算法大赛

    首届全球RTB(实时竞价)广告DSP算法大赛 首届全球RTB(实时竞价)广告DSP算法大赛 竞赛指南     RTB (Real Time Bidding, 实时竞价) 是近年来计算广告领域最激动人心 ...

  9. 0.基于C++的图像处理算法实现、INTEL CPU上SSE加速、ARM CPU上NEON加速

    基于C++的图像处理算法实现.INTEL CPU上SSE加速.ARM CPU上NEON加速 基于C++的图像处理算法在INTEL CPU上SSE加速实现 基于C++的图像处理算法在ARM CPU上NE ...

最新文章

  1. Spring Boot 集成 Swagger-Bootstrap-UI,非常棒的解决方案
  2. WinForm中给DataGridView添加 自动编号
  3. 【天池赛事】零基础入门语义分割-地表建筑物识别 Task2:数据扩增方法
  4. flag -- 诡异的memcache标记
  5. Effective C++ .07 virtual析构函数的提供
  6. PATH和path,傻傻分不清
  7. Python工作笔记001---python3的print加括号_Python3中不存在raw_input( )了
  8. 数据:Purpose以太坊ETF的持仓量达到4万枚ETH
  9. 从“谈芯”走向“用芯” RISC-V 未来前景光明?
  10. 一款开源且功能强大的C#甘特图控件.NET Winforms Gantt Chart Control
  11. python3 unicodedecodeerror_Python3 UnicodeDecodeError
  12. 20191216每日一句
  13. linux 最常用的指令- [readelf][objdump] 读取elf 文件系列
  14. 网络协议学习---LLDP协议学习
  15. Ubuntu安装配置sougou输入法
  16. 松花江等三流域禁渔效果不理想 跨界水域成管理盲区
  17. 仿百度文库解决方案(三)- 利用JODConverter把文档转换成pdf格式
  18. 租住南山的互联网大厂人:年入70万,睡城中村单间
  19. D. Dirty Deeds Done Dirt Cheap
  20. 蒟蒻的控制台贪吃蛇(新手实验)

热门文章

  1. 5ecsgo正在发送客户端_如何评价Valve今天在CSGO官方账号,发推文明确因为平台绕过了信任模式而导致使用5E用户被VAC?...
  2. c语言中a的小写字母,a小写字母【a小写字母英语头条】- a小写字母知识点 - 中企动力...
  3. 在KVM上的Windows中安装Virtio驱动程序
  4. SQL RDBMS 概念
  5. 光线追踪(ray tracing)介绍与细节推导
  6. 腾讯 tiny os shell移植
  7. Android - 直播上下滑动布局(2)
  8. C#与欧姆龙NX系列PLC通讯
  9. bzoj1191[HNOI2006]超级英雄Hero
  10. 手把手带你学SQL—牛客网SQL SQL11 高级操作符练习(1)