当前位置: 首页 > 工具软件 > xdm > 使用案例 >

XDM封装小结

黄昊英
2023-12-01

某个算法终于做出来了!然后就是XDM封装,app应用程序调用。虽然以前做过XDM封装,但是这次和以前的有些不同,小结一下吧。

    首先是编译成库文件。以前是在CCS下编译成.l64p的。这样还是比较麻烦的。现在的方法是在linux下编译成.a64p文件。编译的方法是找到TI提供的videnc_copy例程,videnc_copy_ti.h和videnc_copy_ti_priv.h都不用改(如果懒到不想改调用接口函数名称的话)。只把算法套在videnc_copy.c文件中即可。这个文件,也基本只改VIDENCCOPY_TI_initObj和VIDENCCOPY_TI_process函数。算法加进来很简单,注意不需要以前在CCS下编译.l64p时繁琐的TI头文件,算法只要在VC下可以运行即可。

    第二个修改的是内存分配。以前的内存分配方法是通过#gragma DATA_SECTION指定段,然后在codec engine server中指定段的地址,麻烦。其实还可以不指定段,直接定义全局变量,这样只要堆足够就可以啦。现在的方法是通过函数MEM_alloc(1,EXT_HEAP_SIZE,1)或者MEM_alloc(1,INT_HEAP_SIZE,1)来分配内存,类似于malloc函数。MEM_alloc是DSP/BIOS函数。——竟然还有DSP/BIOS?!

    三是注意刷CACHE。不刷不一定不对,刷了肯定对。函数是BCACHE_wbAll()和BCACHE_wbInvAll(),它们也是DSP/BIOS的API函数。

    四是小心VC和CCS下常用的标准C函数,如math.h里面的。不知道为啥它们跑到linux或者codec engine server里就不听话了。有个bug找了几天,才发现时cos()和sin()函数在linux的结果错了。不知道为啥。所以就不调用了,自己定义。比如sin()定义成:#define _sin(x) ((((((a6*(x) + a5)*(x) + a4)*(x) + a3)*(x) + a2)*(x) + a1)*(x) + a0)

    好。这个算法目前告一段落,机器视觉and分类器,我来了。

 类似资料: