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.

Linux/AM5728: WriteBack NV12 format single planar

Part Number: AM5728


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