Tool/software: Linux
Hello,
I am using AM 5728 PSDK 04.00.00.04.
Currently I use UYVY format with 3D GPU with WrietBack but I am changing to NV12.
when processing NV12 format single planar with WB,
There is no problem in creating the buffer, but Ivalue argument error occurs in ioctl "VIDIOC_QBUF".
Send the test code we used.
============================================
void Writeback_DescribeFormat ()
{
...
case DRM_FORMAT_NV12:
image->fourcc = V4L2_PIX_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_VIDEO_CAPTURE_MPLANE;
buf.memory = V4L2_MEMORY_DMABUF;
buf.index = index;
buf.m.planes = &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);
>>> ERROR : wb o/p: QBUF failed: Invalid argument, index = 0
return 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_TYPE_VIDEO_CAPTURE_MPLANE;
rqbufs.memory = V4L2_MEMORY_DMABUF;
for (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;
}
Writeback_OutputQbuf(0);
}
==========================================================================
Thank you