video4linux(v4l)使用摄像头的实例基础教程与体会(四)
来源:互联网 发布:php sql 防注入 编辑:程序博客网 时间:2024/05/20 11:49
获得图像前的初始化工作v4l_grab_init();该函数十分简单直接粘上去,其中将。vd->frame_using[0]和vd->frame_using[1]都设为FALSE,表示两帧的截取都没有开始。
int v4l_grab_init(v4l_device *vd, int width, int height)
{
vd->mmap.width = width;
vd->mmap.height = height;
vd->mmap.format = vd->picture.palette;
vd->frame_current = 0;
vd->frame_using[0] = FALSE;
vd->frame_using[1] = FALSE;
return v4l_grab_frame(vd, 0);
}
真正获得图像的函数extern int v4l_grab_frame(v4l_device *, int);
int v4l_grab_frame(v4l_device *vd, int frame)
{
if (vd->frame_using[frame]) {
fprintf(stderr, "v4l_grab_frame: frame %d is already used./n", frame);
return -1;
}
vd->mmap.frame = frame;
if (ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap)) < 0) {
perror("v4l_grab_frame");
return -1;
}
vd->frame_using[frame] = TRUE;
vd->frame_current = frame;
return 0;
}
读到这里,应该觉得这个函数也是相当的简单。最关键的一步即为调用ioctl(vd->fd, VIDIOCMCAPTURE, &(vd->mmap)),调用后相应的图像就已经获取完毕。其他的代码是为了完成双缓冲就是截取两帧图像用的,可以自己理解下。
在截取图像后还要进行同步操作,就是调用extern int v4l_grab_sync(v4l_device *);函数,该函数如下
int v4l_grab_sync(v4l_device *vd)
{
if (ioctl(vd->fd, VIDIOCSYNC, &(vd->frame_current)) < 0) {
perror("v4l_grab_sync");
}
vd->frame_using[vd->frame_current] = FALSE;
return 0;
}
该函数返回0说明你想要获取的图像帧已经获取完毕。
图像存在了哪里?
最终我们使用v4l的目的是为了获取设备中的图像,那么图像存在哪里?从上面的文章可以知道,vd.map指针所指就是你要获得的第一帧图像。图像的位置,存在vd.map+vd.mbuf.offsets[vd.frame_current]处。其中vd.frame_current=0,即为第一帧的位置,vd.frame_current=1,为第二帧的位置。
- video4linux(v4l)使用摄像头的实例基础教程与体会(四)
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会(二)
- video4linux(v4l)使用摄像头的实例基础教程与体会(三)
- video4linux(v4l)使用摄像头的实例基础教程与体会(五)
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- video4linux(v4l)使用摄像头的实例基础教程与体会
- IE的连接无效
- 第二课问题之详解
- 安全远程连接桌面
- 很高兴认识各位,欢迎大家来到我的博客!
- 用表B的数据来更新表A的数据
- video4linux(v4l)使用摄像头的实例基础教程与体会(四)
- video4linux(v4l)使用摄像头的实例基础教程与体会(五)
- java小程序--筛选和移动文件
- 诺西、华为、鼎桥之间关系[2008-01-30]
- 恢复linux服务器-segmentation fault错误
- 论坛回帖
- REDHAT图形界面下输入汉字
- Linux内核配置文档(make menuconfig)
- DotNet study URL