调试经验--使用TI提供的jpeg解码codec
codec engine机制可以让我们方便的实现在arm端调用dsp端的算法。TI免费提供了几种dsp上运行的编解码codec,可以在TI的网站上下载。
网址如下:
http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C64XPlus_Video/index_FDS.html
可是,这些codec对我们而言都是一个黑盒,里面代码如何实现的,我们是看不见的。所以,一个TI的codec如何调用,对于刚接触codec engine机制的同学,应该是一个比较棘手的问题。
下面我分享一下我的codec使用心得:
一、简要说明一下codec engine的例程
通常在dvsdk的codec engine目录下的examples里面,该目录下应该就有使用帮助文档。
主要关注3个目录:codec,server,app。
分别对应Codec Engine的 Algorithm、Server及Application:
1)在Algorithm部分,写自己的算法,用VISA的API例如IVIDDEC_Fxns包装起来,并进行包配置,如包名、模块名及依赖包,模块的继承关系等,然后生成库文件及相应的包。
2)在server部分,进行内存配置,对各个段指定内存位置,用一个main()函数初始化DSP,并在cfg文件中指定需要的模块,是否使用DMA等,生成x64P。
3)在Application部分,在cfg文件中指定所使用的server及需要的模块,并与引擎关联,在C文件中使用函数Engine_open()中调用server名,VIDENC_create()中调用模块名,从而与算法关联起来,然后传递参数,运行算法。
二、编译TI提供的jpeg codec,在CCS下运行
(1),从TI网站上下载,分linux下及windows下,其实内容基本一致的。
(2),安装,安装完成后,整个目录copy到ccs的my docoment目录下。
(3),认真阅读 packages isdocodecsjpegenc(或jpegdec)docs 下的 UserGuide 文档。
(4),安装需要的组件,然后用CCS打开packages isdocodecsjpegencappClientBuild 下的pjt工程文件;
(5),根据板卡型号,copy一个同型号的cmd文件过来,改名为JPEGDecApp_DM6446.cmd,注意heap与stack不能太小; 工程中所使用的段都要分配地址。
(6),连接仿真器,注意要将ARM与DSP都连接上,否则DDR的使用会有问题。连dm6467时,在CCS setup中clk设置为10M时比较稳定。
(7),编译程序,运行。由于jpeg编解码涉及到的YUV文件较大,读写时仿真器容易异常,最好是改动程序分多次读写。
(8),查看结果。
三、jpeg的解码codec,由ARM端调用运行
(1)简化ccs的jpeg解码程序
由于实际运行时,dsp算法不能直接访问到文件,输入输出文件都由arm接口进行,在初期的调试过程中使用固定配置即可。
去掉四个文件及相关使用代码: FILE *fConfigFile, *ftestFile, *finFile, *fparamsFile;
指定解码图片的分辨率为720X480;
段的指定呢?在dvsdk的server的tcf及cfg文件中指定。
(2)建立imgdec调用框架
在dvsdk的codec engine例程中,image1_copy的codec中,没有看见执行copy的源代码?
原来是在package.xdc中指向的,是在examples ixdaisdmexamplesimgdec1_copy,其中有c文件,也有CCS工程文件,可以编译出imgdec1_copy.a64P
(3)将jpeg解码程序放入imgdec框架中
此时需要注意:codec不能直接操作硬件:例如定时器、中断等。
我们之前测试jpeg解码耗时,由于使用了定时器,就导致出问题。
(4)ARM端提供jpeg文件,调用codec,输出yuv。