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.

dm3730 中 dvsdk-demos_4_02_00_01 dsp load 99%压缩很缓慢问题

Other Parts Discussed in Thread: DM3730

大家好 我在使用dvsdk中的demo但是发现录像效果很卡很迟钝,没有25帧每秒的压缩。这是怎么回事?谢谢大家帮助。

  • 附件中我上传了录像的视频。由于不能上传h264文件,所以压缩了一下,解压后会有test.h264文件,可以通过VLC播放。从录像后播放的效果来看,是录像太快了。是怎么回事?怎么可以让录像正常速度?

    各位高手帮我支支招,谢谢了。

    test.zip
  • Edward,

    请问你是在你自己的板子上测试的,还是TI的EVM?

    ARM/DSP/DDR的频率是否配置到芯片支持的最高频率?

  • 你好meng:

    我不是在ti 的 EVM板子上测试的。

    dsp平率是不是设置的太高了?什么参数可以设置?我记得以前dm368的时候dsp的下利率没有用到99%这么高,好像是30%左右?

    另外我用vlc看了一下视频的信息,其实是25帧左右。300帧使用了12秒左右。我觉得是video和capture的fifoget和fifoput不对称。(我的猜想)

    但是不管怎么样dsp的使用率都太高了。

    谢谢你的回复。

  • Edward,

    DM368没有DSP只有ARM9,是利用的加速器做的编解码。

  • 你好meng DM368确实是用DSP进行编解码的。你看一下信息:

    我使用的DM368开发板是奇想达生产。

    硬件平台叫QXD-DM368。我在上面开发过DVSDKdemo的 encode和decode,DSP不知道什么型号。但是也有打印信息。DSP load 3x%,具体我忘记了。

    软件使用的平台是:

    达芬奇的EVM太贵了,而且也不知道怎么在官网上购买。即使购买了,核心板的原理图也么有办法得到,不利于开发自己产品。我们现在做的产品,其中的核心板是问别家购买,硬件软件再做二次开发的。

    这个不说了,我觉得dvsdk demos有没有在TI的evm上跑过的视频?能不能把一些log或者信息给我看看,我看看代码里面到底有什么区别。

    我现在看了一下录制的视频文件,觉得文件本身可能没有什么问题,可能问题在于送到encode的fifo没有调整好,

    比如所应按照顺序的规律该是 1 2 3 4 5 6 7 8 9

    但是其实送到encode中的帧 1 4 8 9 10 13 15

    这是我在调试时候发现的。具体我不知道,现在还在调试。

    另外:

    DSP ALG HEAP

    CMEM

    DSPLINK

    以上的模块内存分布位置我都调整过,这些调整会不会导致DSP的效率过高?

    谢谢你meng。

  • 我看了一下demo,调试的时候我把demo中的Venc1_process注释掉,demo运行cap和disp正常。但是加入了视频压缩后效果就卡住了。这是为什么,dsp的性能不够压缩?

    另外我看了一下dmai中的默认配置:

    /**********************************************************************************/
    const VIDENC1_Params Venc1_Params_DEFAULT = {
    sizeof(VIDENC1_Params), /* size */
    XDM_DEFAULT, /* encodingPreset */
    IVIDEO_LOW_DELAY, /* rateControlPreset */
    720, /* maxHeight */
    1280, /* maxWidth */
    30000, /* maxFrameRate */
    6000000, /* maxBitRate */
    XDM_BYTE, /* dataEndianness */
    0, /* maxInterFrameInterval */
    XDM_YUV_420P, /* inputChromaFormat */
    IVIDEO_PROGRESSIVE, /* inputContentType */
    XDM_CHROMA_NA /* reconChromaFormat */
    };

    const VIDENC1_DynamicParams Venc1_DynamicParams_DEFAULT = {
    sizeof(IVIDENC1_DynamicParams), /* size */
    720, /* inputHeight */
    1280, /* inputWidth */
    30000, /* refFrameRate */
    30000, /* targetFrameRate */
    6000000, /* targetBitRate */
    30, /* intraFrameInterval */
    XDM_ENCODE_AU, /* generateHeader */
    0, /* captureWidth */
    IVIDEO_NA_FRAME, /* forceFrame */
    1, /* interFrameInterval */
    0 /* mbDataFlag */
    };
    /**********************************************************************************/

    这些配置我都配置了,还有什么需要配置的吗?

    368的平台demo我看过了也是使用同样的code_engine 和 dmai。

    有没有大侠遇到过这个问题。跪求帮助了。

  • 应该不是帧同步的问题,排除了。

    调试只要把Venc1_process这个代码去掉 就可以正常从摄像头内获取视频并且显示。

    文件:video.c

    函数:Void *videoThrFxn(Void *arg)

    while (!gblGetQuit()) {
    /* Get a buffer to encode from the display thread */
    fifoRet = Fifo_get(envp->hDisplayOutFifo, &hDisplay);

    if (fifoRet < 0) {
    ERR("Failed to get buffer from video thread\n");
    cleanup(THREAD_FAILURE);
    }

    /* Did the display thread flush the fifo? */
    if (fifoRet == Dmai_EFLUSH) {
    cleanup(THREAD_SUCCESS);
    }

    /* Get a buffer to encode to from the writer thread */
    fifoRet = Fifo_get(envp->hWriterOutFifo, &hDstBuf);

    if (fifoRet < 0) {
    ERR("Failed to get buffer from video thread\n");
    cleanup(THREAD_FAILURE);
    }

    /* Did the writer thread flush the fifo? */
    if (fifoRet == Dmai_EFLUSH) {
    cleanup(THREAD_SUCCESS);
    }

    /* Make sure the whole buffer is used for input */
    BufferGfx_resetDimensions(hDisplay);

    #if 0

    /* Decode the video buffer */
    if (Venc1_process(hVe1, hDisplay, hDstBuf) < 0) {
    ERR("Failed to encode video buffer\n");
    cleanup(THREAD_FAILURE);
    }

    #endif

    /* Send encoded buffer to writer thread for filesystem output */
    if (Fifo_put(envp->hWriterInFifo, hDstBuf) < 0) {
    ERR("Failed to send buffer to display thread\n");
    cleanup(THREAD_FAILURE);
    }

    /* Return buffer to display thread */
    if (Fifo_put(envp->hDisplayInFifo, hDisplay) < 0) {
    ERR("Failed to send buffer to display thread\n");
    cleanup(THREAD_FAILURE);
    }

    /* Increment statistics for the user interface */
    gblIncVideoBytesProcessed(Buffer_getNumBytesUsed(hDstBuf));
    frameCnt++;
    }

  • 按照代码的意思就是说 1秒内 dsp应该处理25帧图片。VIDENC1_process()应该被调用25次才对。

    @0x0035bab9:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 5482 bytes
    @0x003af75a:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 8188 bytes
    @0x0040918f:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 0 outID 1 generated 31828 bytes
    @0x0045be36:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 1 outID 2 generated 18135 bytes
    @0x004aedd8:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 10945 bytes
    @0x004ff93d:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 5807 bytes
    @0x00559335:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 0 outID 1 generated 14515 bytes
    @0x005ace49:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 1 outID 2 generated 6596 bytes
    @0x00603448:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 11814 bytes
    @0x0065666b:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 6386 bytes
    @0x006ac6cf:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 0 outID 1 generated 11678 bytes
    @0x006fe87e:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 1 outID 2 generated 3404 bytes
    @0x00752374:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 5295 bytes
    @0x007a5949:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 7149 bytes
    @0x007fa100:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 0 outID 1 generated 12656 bytes
    @0x0084c3ff:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 1 outID 2 generated 4371 bytes
    @0x008a026a:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 10357 bytes
    @0x008f41c8:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 10575 bytes
    @0x0094a39a:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 0 outID 1 generated 17447 bytes
    @0x0099de34:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 1 outID 2 generated 7092 bytes
    @0x009f3458:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 10232 bytes
    @0x00a48b51:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 9369 bytes
    @0x00a9e080:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 0 outID 1 generated 10903 bytes
    @0x00b5efe7:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 1 outID 2 generated 17659 bytes
    @0x00bb0386:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 6919 bytes
    @0x00c029db:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 6571 bytes
    @0x00c56ae5:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 0 outID 1 generated 10193 bytes
    @0x00ca8fcd:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 1 outID 2 generated 5549 bytes
    @0x00cfc76c:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 10557 bytes
    @0x00d4fb59:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 8786 bytes
    @0x00da4404:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 0 outID 1 generated 16246 bytes
    @0x00df6c60:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 1 outID 2 generated 7076 bytes
    @0x00e49537:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 2 outID 3 generated 8551 bytes
    s@0x00e9bab7:[T:0x42cc0490] ti.sdo.dmai - [Venc1] VIDENC1_process() ret 0 inId 3 outID 4 generated 7783 bytes

  • meng 你好:

    我想问下

    params->inputChromaFormat = XDM_YUV_422ILE;
    params->reconChromaFormat = XDM_YUV_420SP;

    这两者的区别。应为我设置的时候XDM_YUV_422ILE然后通过电脑VLC软件解析录像后的视频文件显示是 yuv420的。demo是不是设置错了?

  • lu edward 说:

    meng 你好:

    我想问下

    params->inputChromaFormat = XDM_YUV_422ILE;
    params->reconChromaFormat = XDM_YUV_420SP;

    这两者的区别。应为我设置的时候XDM_YUV_422ILE然后通过电脑VLC软件解析录像后的视频文件显示是 yuv420的。demo是不是设置错了?

    我对DM3730不熟悉,具体请看一下DM3730的h264编码库的user guide。但是其他平台,例如DM36x,DM6467, DM81xx的的h264编码输入的数据格式都是yuv40.

  • 你好meng :

    我想问一下在DM3730的sdk包中,怎么设置DSP的工作频率或者查看DSP的工作频率?

    会不会是DSP的工作频率没有设置好,导致了DSP的性能不够?

    谢谢

  • 大家好 问题已近解决。

    对于做二次开发的我确实能理解目前做产品的苦恼。

    算法和dsp这块确实是我的弱项。