Toybrick

标题: ARGB32转NV12会,再编码会卡死 [打印本页]

作者: hz2580    时间: 2020-11-18 09:19
标题: ARGB32转NV12会,再编码会卡死
本帖最后由 hz2580 于 2020-11-18 23:48 编辑

ARGB32转NV12会卡死,怀疑是ARGB32的问题。mRga->ops->setSrcFormat(mRga, V4L2_PIX_FMT_ARGB32, width, height);
mRga->ops->setDstFormat(mRga, V4L2_PIX_FMT_NV12, width, height);
mRga->ops->setSrcBufferPtr(mRga, srcBuf);
mRga->ops->setDstBufferPtr(mRga, dstBuf);
mRga->ops->go(mRga);


NV12拷贝去编码器可以
mRga->ops->setSrcFormat(mRga, V4L2_PIX_FMT_NV12, width, height);
mRga->ops->setDstFormat(mRga, V4L2_PIX_FMT_NV12, width, height);
mRga->ops->setSrcBufferPtr(mRga, srcBuf);
mRga->ops->setDstBufferPtr(mRga, dstBuf);
mRga->ops->go(mRga);



作者: hz2580    时间: 2020-11-18 23:43
本帖最后由 hz2580 于 2020-11-18 23:47 编辑

    mRga->ops->setSrcFormat(mRga, V4L2_PIX_FMT_ARGB32, srcBuf_width, srcBuf_height);
    mRga->ops->setDstFormat(mRga, V4L2_PIX_FMT_NV12, dstBuf_width, dstBuf_height);
    mRga->ops->setSrcBufferPtr(mRga, srcBuf);
    mRga->ops->setDstBufferPtr(mRga, dstBuf);
    mRga->ops->setSrcCrop(mRga, srcX, srcY, srcW,srcH);
    mRga->ops->setDstCrop(mRga, dstX, dstY, dstW,dstH);
    mRga->ops->go(mRga);

感觉只要有V4L2_PIX_FMT_ARGB32就会出错,是不是内核驱动里面这个作为源不支持?

内核的错误提示:
[ 5543.470382] rk_vcodec: vpu_service_ioctl:1890: error: unknown vpu service ioctl cmd 40086c01
[ 5548.857117] Unable to handle kernel paging request at virtual address ffffffc000000000
[ 5548.857834] pgd = ffffffc0f1398000
[ 5548.858139] [ffffffc000000000] *pgd=0000000000000000, *pud=0000000000000000
[ 5548.858825] Internal error: Oops: 96000146 [#1] SMP
[ 5548.859258] Modules linked in:
[ 5548.859547] CPU: 4 PID: 2142 Comm: rk3399pro_vdec Not tainted 4.4.167 #78
[ 5548.860150] Hardware name: rockchip,rk3399pro-toybrick-prod-linux (DT)
[ 5548.860731] task: ffffffc0ed035e80 task.stack: ffffffc0efdd0000
[ 5548.861263] PC is at __dma_flush_range+0x18/0x30
[ 5548.861674] LR is at rga_dma_flush_page+0x50/0x5c
[ 5548.862093] pc : [<ffffff8008094b98>] lr : [<ffffff8008429284>] pstate: 60000145
[ 5548.862739] sp : ffffffc0efdd35f0

内核版本:
[toybrick@toybrick MyProjects]$ cat /proc/version
Linux version 4.4.167 (kfx@inno) (gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05) ) #78 SMP Wed Aug 21 09:15:51 CST 2019
[toybrick@toybrick MyProjects]$ uname -a
Linux toybrick.fc28 4.4.167 #78 SMP Wed Aug 21 09:15:51 CST 2019 aarch64 aarch64 aarch64 GNU/Linux

作者: jefferyzhang    时间: 2020-11-19 08:45
这LOG显示你自己内存越界了。
玩嵌入式都要注意硬件宽高都有16对齐,buffer都要按对齐的开
作者: hz2580    时间: 2020-11-19 09:18
srcBuf_width, srcBuf_height,需要16进对齐是吧





欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3