在Linux下使用Qt进行人脸识别开发,遇到点问题

qq_43370638 2019-03-24 04:34:20
出现的问题:VIDIOC_QBUF unget:Invalid argument
源码如下:

int CamDevice::unget_frame()
{
if(index != -1)
{
v4l2_buffer queue_buf;
CLEAR(queue_buf);

queue_buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
queue_buf.memory = V4L2_MEMORY_MMAP;
queue_buf.index = index;

if(-1 == ioctl(fd, VIDIOC_QBUF, &queue_buf))
{
emit display_error(tr("VIDIOC_QBUF unget: %1").arg(QString(strerror(errno))));
return -1;
}

return 0;
}
return -1;
}
...全文
1332 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44833913 2019-03-26
  • 打赏
  • 举报
回复
这个程序有点复杂
weixin_44833913 2019-03-26
  • 打赏
  • 举报
回复
有支持一下的嘛
luj_1768 2019-03-25
  • 打赏
  • 举报
回复
请问:index 这个变量是怎么声明的?在哪个模块声明的?系统返回的错误原因是无效参数,我看问题就在这里。
pstrunner 2019-03-25
  • 打赏
  • 举报
回复
https://blog.csdn.net/wind4study/article/details/54375301 请参考。
qq_43370638 2019-03-25
  • 打赏
  • 举报
回复
您好,请问怎么解决呀?把这个queue_buf.index删掉可以吗?
kerwin liu 2019-03-25
  • 打赏
  • 举报
回复
根据V4L2相关的标准写法,应该可以获取到视频帧.官方的好像不用指定queue_buf.index,因为ioctl后会自己获得
leemace 2019-03-25
  • 打赏
  • 举报
回复
https://blog.csdn.net/wind4study/article/details/54375301

请参考。
kerwin liu 2019-03-25
  • 打赏
  • 举报
回复
引用 2 楼 qq_43370638 的回复:
您好,请问怎么解决呀?把这个queue_buf.index删掉可以吗?

我的没有这种错误.
bool Webcam::read_frame()
{

struct v4l2_buffer buf;
unsigned int i;

CLEAR(buf);

buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;

if (-1 == xioctl(fd, VIDIOC_DQBUF, &buf)) {
switch (errno) {
case EAGAIN:
return false;

case EIO:
/* Could ignore EIO, see spec. */

/* fall through */

default:
throw runtime_error("VIDIOC_DQBUF");
}
}

assert(buf.index < n_buffers);

v4lconvert_yuyv_to_rgb24((unsigned char *) buffers[buf.index].data,
rgb_frame.data,
xres,
yres,
stride);

if (-1 == xioctl(fd, VIDIOC_QBUF, &buf))
throw runtime_error("VIDIOC_QBUF");

return true;
}

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧