This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

jpeg解码库运行崩溃的问题

Other Parts Discussed in Thread: TMS320C6657

相关硬件平台环境:

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

 

 

请帮忙分析一下!

 

 

 

 

  • 相关硬件平台环境:

    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

    Dsp程序问题.docx
  • 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

  • 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这个是执行成功了的。

    项目很急。附件中我把我的工程上传一下,大家有空的话帮忙看看。

              

    jpegdecode.rar
  • 你提供的信息前后矛盾:

    你前面给的附件中显示

    [C66xx_0] Failed to Create Instance... Exiting for this configuration..

    而且也有BIOS输出的异常信息。

    而你后面又说“挂的时候没有任何消息打印。

    并且程序挂的时候ALG_create这个是执行成功了的”,能否提供准确的信息呢?

  • Marvin Liang:

                            不好意思,最开始我发的那个是把JPEG解码移植到我们自己项目中报的错。后面这个是我从官网上下载的JPEG解码库在运行的时候出现的问题。这两个工程.cfg配置文件是不一样的,不知道会不会影响报错信息的打印。

  • 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

  • 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");
    }

  • 麻烦你讲CCS工程附上,你上次附上的代码中没有你说的TestAppDecode部分,需要提醒你的是一次解码任务的结束应该有:

     handle->fxns->algDeactivate(handle);

     ALG_delete (handle);

  • 你好,Marvin Liang:

                   我现在重新上传代码,见附件。

    packages.rar
  • 修改了你的代码,你可以再试试吗?

  • Marvin Liang:

                    你好!你发我的代码我测试到目前好几万次都没有问题,你跟我原来代码的区别就是:我的代码ALG_create和ALG_delete是在while循环里的,而你把ALG_create和ALG_delete放在了while循环外面。我们这样测试只使用了一幅图片,长度宽度参数都是死的,ALG_create调用的时候只需要传递一次参数就ok了。但是我们实际应用的场景每次传进来的图片是不一样的,长度宽度参数不确定,所以是需要根据图片对应长宽参数来ALG_create后才可以JPEG解码。这样就会是有问题的。麻烦您再帮忙确认一下,3Q

  • Hi,

       按你的要求做了更新,请参考附件。需要强调的是,codec库本身是TI经过充分测试的发布产品,而伴随的TestApp只是简单的功能示例,方便大家能够容易的进行codec测试,所以TestApp并不要求经过充分的测试。如果你要完全复用TestApp到你的产品中,这些代码即是你的软件,你需要自主掌握。

    Best Regards.

       Marvin

    TestAppDecoder.zip
  • Marvin,你好:

    感谢您及时的回复,可以说解了我们一个燃眉之急,JPEG解码部分代码经测试运行很稳定。

    还有一些问题请教您:dsp程序烧写到Flash中,长期运行跑稳定性程序或者系统崩溃了的话,有什么好的方式可以跟踪调试定位问题所在?

    还有工程运行过程中碰到这么个问题:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/64378.aspx,麻烦您帮忙看一下!

  • 你好,Marvin Liang :

                 官方网站上下载您帮忙修改的JPEG源码库解码函数是作为bios里的一个任务运行的,其中还调用了Ipc_start();这个进程间通信的函数。DecodeTask()作为任务,通过配置文件设置好相关参数进行解码操作。

               但是我们工程对DecodeTask()进行了相关的封装,XDAS_Int32 DecodeTask (char *InputDatazls,unsigned long Width,unsigned long Height,unsigned long DataSize,char *OutputDatazls),进行相关参数的传入和传出。在工程中当做一个方法进行调用。这样使用有什么隐患吗,在测试过程中发现jpeg解码方法稳定性不太好。调用详情见附件。

             我的工程是基于ti\mcsdk_2_01_02_05\examples\ndk\helloWorld\evmc6657l这个工程。通过网络接收jpeg图片数据后调用DecodeTask进行解码后再调用相关算法进行处理。

    jpeg解码函数调用.rar