工具/软件:Linux
您好!
我正在使用 AM 5728 PSDK 04.00.04。
目前、我将 UYVY 格式与带 WrietBack 的3D GPU 配合使用、但我将更改为 NV12。
在使用 WB 处理 NV12格式单平面时、
创建缓冲区没有问题、但 ioctl "VIDIOC_QBUF"中出现 Ivalue 参数错误。
发送我们使用的测试代码。
========================================================================================
void Writeb回 写_描述格式()
{
(笑声)
DRM_FORMAT_NV12案例:
image->fourcc = V4L2_PI_FMT_NV12;
image->size = image->height * image->width * 1.5;
image->coplanar = 0;
image->colorspace = V4L2_colorspace_SMPTE170M;
(笑声)
}
int Writeback_OutputQbuf( int index )
{
Int ret、I;
struct v4l2_buffer buf;
struct v4l2_plane planes[2];
memset (&buf、0、sizeof buf);
memset (&planes、0、sizeof planes);
buf.type = V4L2_BUF_TYPE_视频_捕捉_MPLANE;
buf.memory = V4L2_MEMORY_DMABUF;
buf.index =索引;
buf.m.planes =基准面[0];
buf.length = 1;
buf.m.planes[0].m.fd = m_wbparams.output_buf_dmafd[index];
RET = ioctl (m_wbparams.fd、VIDIOC_QBUF、&buf);
>>> 错误:WB o/p:QBUF 失败:参数无效,索引= 0
返回0;
}
MAIN ()
{
struct v4l2_format fmt;
struct v4l2_requestbuffers rqbufs;
fmt.fmt.pix_mp.height = m_wbparams.dst.height;
fmt.fmt.pix_mp.pixelformat = m_wbparams.dst.fourcc;
fmt.fmt.pix_mp.field = V4L2_field_any;
fmt.fmt.pix_mp.colorspace = m_wbparams.dst.colorspace;
fmt.fmt.pix_mp.num_planes = 1;
ioctl (m_wbparams.fd、VIDIOC_S_FMT、&fmt);
ioctl (m_wbparams.fd、VIDIOC_G_FMT、&fmt);
memset (&rqbufs、0、sizeof (rqbufs));
rqbufs.count = NUMBUF;
rqbufs.type = V4L2_BUF_TYPLE_VIDEO_CAPTURE_MPLANE;
rqbufs.memory = V4L2_MEMORY_DMABUF;
对于(i = 0;i < NUMBUF;i++){
m_wbparams.output_buf_dmafd[i]= omap_bo_dmabuf (m_wbparams.disp_bufs[i]->bo[0]);
m_wbparams.disp_bufs[i]->fd[0]= m_wbparams.output_buf_dmafd[i];
m_wbparams.disp_bufs[i]->noScale = true;
}
writeba_OutputQbuf (0);
}
===========================================================================================================================================
谢谢你