设为首页 加入收藏

TOP

Linux下摄像头图像数据的获取(二)
2014-11-24 07:20:48 来源: 作者: 【 】 浏览:2
Tags:Linux 摄像头 图像 数据 获取
WRITE /* required */,
MAP_SHARED /* recommended */,
fd, buf.m.offset);


if (MAP_FAILED == buffers[n_buffers].start)
printf ("mmap failed\n");
}


for (i = 0; i < n_buffers; ++i)
{
struct v4l2_buffer buf;
CLEAR (buf);


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


if (-1 == ioctl (fd, VIDIOC_QBUF, &buf))//申请到的缓冲进入列队
printf ("VIDIOC_QBUF failed\n");
}

type = V4L2_BUF_TYPE_VIDEO_CAPTURE;


if (-1 == ioctl (fd, VIDIOC_STREAMON, &type)) //开始捕捉图像数据
printf ("VIDIOC_STREAMON failed\n");


for (;;) //这一段涉及到异步IO
{
fd_set fds;
struct timeva l tv;
int r;


FD_ZERO (&fds);//将指定的文件描述符集清空
FD_SET (fd, &fds);//在文件描述符集合中增加一个新的文件描述符


/* Timeout. */
tv.tv_sec = 2;
tv.tv_usec = 0;


r = select (fd + 1, &fds, NULL, NULL, &tv);//判断是否可读(即摄像头是否准备好),tv是定时


if (-1 == r)
{
if (EINTR == errno)
continue;
printf ("select err\n");
}
if (0 == r)
{
fprintf (stderr, "select timeout\n");
exit (EXIT_FAILURE);
}


if (read_frame ())//如果可读,执行read_frame ()函数,并跳出循环
break;
}


unmap:
for (i = 0; i < n_buffers; ++i)
if (-1 == munmap (buffers[i].start, buffers[i].length))
printf ("munmap error");
type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
if (-1 == ioctl(fd, VIDIOC_STREAMOFF, &type))
printf("VIDIOC_STREAMOFF");
close (fd);
fclose (file_fd);
return 0;
}


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在C++ man pages中查询C++的函数 下一篇Android滑动解锁的震动效果

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)