相关硬件平台环境:
DSP:TMS320C6657
CCS: 5.2.1.00018
SYS\BIOS: bios_6_33_06_50
PDK:pdk_C6657_1_1_2_5
NDK:ndk_2_21_01_38 XDC:3.23.3.53
项目实现功能: arm端通过摄像头获取图片(jpg格式)-〉通过以太网传输到dsp->dsp上解码成位图-〉dsp运行基于opencv的识别算法(dsp上的opencv算法库好象不支持jpg格式的,所以只能转换为位图,所以需要解码)
项目问题:
1.使用官方的jpeg解码库 长时间运行会出问题,基本就是运行6000多次程序就会崩溃(复现较容易)
补充jpeg库版本:C66x_jpegdec_03_01_02_02_ELF_32bit
依赖于:xdais_7_23_00_06和framework_components_3_23_02_16
请帮忙分析一下!
yongwang zhang:
相关硬件平台环境:
DSP:TMS320C6657
CCS: 5.2.1.00018
SYS\BIOS: bios_6_33_06_50
PDK:pdk_C6657_1_1_2_5
NDK:ndk_2_21_01_38 XDC:3.23.3.53
项目实现功能: arm端通过摄像头获取图片(jpg格式)-〉通过以太网传输到dsp->dsp上解码成位图-〉dsp运行基于opencv的识别算法(dsp上的opencv算法库好象不支持jpg格式的,所以只能转换为位图,所以需要解码)
项目问题:
1.使用官方的jpeg解码库 长时间运行会出问题,基本就是运行6000多次程序就会崩溃(复现较容易)
补充jpeg库版本:C66x_jpegdec_03_01_02_02_ELF_32bit
依赖于:xdais_7_23_00_06和framework_components_3_23_02_16
Marvin Liang:
回复 yongwang zhang:
Hi,
根据你提供的Log,
Case1, TI官方发布的codec, 6000次后crash,你测试是基于MCSDK Video中提供的testapp吗?如果是的话,反复多次初始化codec实例,最后有没有正常释放呢?从log看起来,crash的最直接问题是ALG_create失败后还继续进行其他的操作,在实例未创建成功的时候还继续进行解码任务当然会造成crash.直接的办法是ALG_create失败后报错并返回。而ALG_create失败最有可能的原因是内存问题,比如内存不足等,建议单步调试,查找失败的原因。
Case2,我们不清楚第三方的软件,不过从log看来出错的时候PC=0,应该可以单步跟踪找到原因.
Marvin
yongwang zhang:
回复 Marvin Liang:
Marvin Liang 您好:
第一:开发包MCSDK中有提供相关JPEG解码的例程吗?
第二:我的工程是基于http://software-dl.ti.com/dsps/dsps_public_sw/codecs/C6678/JPEG_D/latest/index_FDS.html这个TI提供的官方库。
我有单步调试过,程序挂在 TestAppDecode.c第528行
retVal = IIMGDEC1Fxns->process((IIMGDEC1_Handle)handle,
(XDM1_BufDesc *)&inputBufDesc, (XDM1_BufDesc *)&outputBufDesc, (IIMGDEC1_InArgs *)inArgs, (IIMGDEC1_OutArgs *)outArgs);
执行这个库函数的时候。挂的时候没有任何消息打印。
并且程序挂的时候ALG_create这个是执行成功了的。
项目很急。附件中我把我的工程上传一下,大家有空的话帮忙看看。
Marvin Liang:
回复 yongwang zhang:
你提供的信息前后矛盾:
你前面给的附件中显示
[C66xx_0] Failed to Create Instance… Exiting for this configuration..
而且也有BIOS输出的异常信息。
而你后面又说“挂的时候没有任何消息打印。
并且程序挂的时候ALG_create这个是执行成功了的”,能否提供准确的信息呢?
yongwang zhang:
回复 Marvin Liang:
Marvin Liang:
不好意思,最开始我发的那个是把JPEG解码移植到我们自己项目中报的错。后面这个是我从官网上下载的JPEG解码库在运行的时候出现的问题。这两个工程.cfg配置文件是不一样的,不知道会不会影响报错信息的打印。
Marvin Liang:
回复 yongwang zhang:
Hi,
请先澄清,是否用TI的代码遇到了问题?也就是官网下载的jpeg decoder TestAppDecoder来解码你输入的jpeg文件是否有问题,如果有问题的话,问题是什么?而且请把你的测试CCS工程,包括测试用的jpeg文件和decoder配置文件Testparams.cfg发给我们,我们看看是否是TI的库的问题。
从你附上的代码来看,我们看不到任何调用TI codec库的地方。这个问题是否是您自己集成遇到的困难呢?如TI的jpeg decoder已经正常输出raw RGB,您需要自己做bmp封装,或者是jpeg decoder正常输出了YUV,您需要自己转RGB并封装bmp,结果在这个过程中导致整个工程有问题?
Marvin
yongwang zhang:
回复 Marvin Liang:
Marvin,你好:
做bmp封装只是为了验证JPEG解码库解码JPEG图片生成RGB数据是否正确。你可以看TestAppDecode.c中主函数void main(void)中使用Task_create创建的任务XDAS_Int32 DecodeTask()中并没有调用转bmp的函数。我只是在读取完相关配置文件、读取完相关输入JPEG图片的数据后使用了一个while(1)循环(TestAppDecode.c第302行直到665行结束)在这个while循环中一直调用解码库进行解码操作,执行到876次的时候还是正常的,但是第877次就会跑飞掉。
TestAppDecode.c中第571行中,我在执行到876次加一个断点,再单步调试就会执行到如上一贴中retVal = IIMGDEC1Fxns->process函数而跑飞。
if(ScanCount == 876) { printf("for debug"); }
Marvin Liang:
回复 yongwang zhang:
麻烦你讲CCS工程附上,你上次附上的代码中没有你说的TestAppDecode部分,需要提醒你的是一次解码任务的结束应该有:
handle->fxns->algDeactivate(handle);
ALG_delete (handle);
yongwang zhang:
回复 Marvin Liang:
你好,Marvin Liang:
yongwang zhang:
回复 Marvin Liang:
你好,Marvin Liang:
我现在重新上传代码,见附件。