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.

dm368 resize问题



我想在encode里面做reisze ,把1280x720resize成720x576

但是我把dmai接口函数Resizer_continuous_config里面

rsz_cont_config.output2.enable = 0;改为

rsz_cont_config.output2.enable = 1;

然后就出错,最后跟踪是在dmai 里面capture_create里面的

_Dmai_v4l2DriverAlloc函数v4l ioctl 命令VIDIOC_QBUF 报错

请问是怎么回事?

  • 怎么就没有一个人知道吗????????????????????????????????????????????????????????????

  • 你仔细看一下这个

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/t/7777.aspx

    修改DMAI,可以得到两路resize后的视频,可以将一路用来显示,一路用来编码。

    需要注意的是capture_get后的buffer的大小为两个resize视频数据大小。

  • 我按照e2e里面的做了,resize出来两路流,A和B,A用作编码,B用作D1显示

    A和B的分辨率设为1280x720和704x576

    dmai里面resizeB的大小也是704x576

    cap的出来的yuv是YUV420PSEMI格式,但是B数据只能正确显示第一帧和最后一帧,其他帧都不能正确显示

     

    这是正确显示的第一帧和最后一帧

     

     

     

    这是显示的不正确的其它帧

     

    请问这是怎么回事呢????????????????????????????????????????????????????????????

  • /* Preview part */
    if (Display_get(hDisplay, &hDisBuf) < 0) {
    ERR("Failed to get display buffer\n");
    cleanup(THREAD_FAILURE);
    }

    这个之后要将hCapBuf偏移BIG SIZE后BIG SMALL的内容拷贝到hDisBuf,然后Display_put,我估计你是这个地方的原因~所以buffer没有循环起来

  • 后来我按照你所说的,进行偏移然后memcpy,是可以了,但是memcpy太耗资源,使用它arm loard 达到99%,帧率从原来的25帧下降到17帧

    然后我关注到framecopy这个函数,我试了一下好像只拷贝了BIG size里面的数据到hDisBuf里面

     

    请问怎么使用framecopy把BIG SMALL的内容拷贝到hDisBuf呢?????????????????????????????????????????????

  • memcpy耗费时间,就用地址映射呗

  • memcpy在这儿应该是足够用了,如果还是感觉效率过低了,就传递偏移地址和读取的长度,DMAI中有很多buffer操作的接口,可以利用一下~

  • 我最后就是读取偏移地址和设置长度搞定的,不过没有用dmai里面的buffer接口,dmai里面的一些接口不管用,我试过的,我是直接给地址复制和直接操作结构体

  • 我这边是一路用来编码,一路用来显示,但是针对显示这一路,当我采集图像的分辨率是CIF的时候,显示的图像是显示器中间的四分之一的小框的CIF图像,如果希望能全屏显示,需要做什么样的处理呢。希望这方面能给予一些指点,谢谢。