日期:2014-05-16  浏览次数:21495 次

linux下V4L2编程,ioctl VIDIOC_DQBUF时,为什么总是返回-1呢?如何解决?
linux下V4L2编程,
 // 开始录制
  enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
  ret = ioctl( camerafd, VIDIOC_STREAMON, &type);
  if (ret < 0)
  {
  printf("VIDIOC_STREAMON failed (%d)\n", ret);
  return ret;
  }

  // Get frame
  ret = ioctl( camerafd, VIDIOC_DQBUF, &buf);
  if (ret < 0)
  {
  qDebug()<<"VIDIOC_DQBUF failed 001234500(%d)"<<ret;
  //printf("VIDIOC_DQBUF failed 0000(%d)\n", ret);
  return ret;
  }

执行ret = ioctl( camerafd, VIDIOC_DQBUF, &buf);这句是,返回值总是-1 
请问这是什么原因,要怎么解决啊?
求高人指点~~~~~ 先谢谢大家啦

------解决方案--------------------
返回-1也有很多情况
使用
if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf))

{

switch (errno)

{

case EAGAIN:

return 0;

  

case EIO:

/* Could ignore EIO, see spec. */

  

/* fall through */

  

default:

errno_exit("VIDIOC_DQBUF");

}


看看具体问题吧