V4L2(video 4 linux 2)视频采集接口使用说明
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-03-24
USERPTR
__u32 reserved[2];
};
获取并记录缓存的物理空间
使用VIDIOC_REQBUFS,我们获取了req.count个缓存,下一步通过调用 VIDIOC_QUERYBUF命令来获取这些缓存的地址,然后使用mmap函数转换成应用程序中的绝对地址,![]() <!--[if !supportLineBreakNewLine]--> <!--[endif]--> typedef struct VideoBuffer { void *start; size_t length; } VideoBuffer; VideoBuffer* buffers = calloc( req.count, sizeof(*buffers) ); struct v4l2_buffer buf; for (numBufs = 0; numBufs < req.count; numBufs ) { memset( &buf, 0, sizeof(buf) ); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; buf.memory = V4L2_MEMORY_MMAP; buf.index = numBufs; // 读取缓存 if (ioctl(fd, VIDIOC_QUERYBUF, &buf) == -1) { return -1; } buffers[numBufs].length = buf.length; // 转换成相对地址 buffers[numBufs].start = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset); if (buffers[numBufs].start == MAP_FAILED) { return -1; } // 放入缓存队列 if (ioctl(fd, VIDIOC_QBUF, &buf) == -1) { return -1; } } 四,关于视频采集方式 操作系统一般把系统使用的内存划分成用户空间和内核空间,分别由应用程序管理和操作系统管理.应用程序可以直接访问 内存的地址,而内核空间存放的是 供内核访问的代码和数据,用户不能直接访问.v4l2捕获的数据,最初是存放在内核空间的,这意味着用户不能直接访问该段内存, ![]() V4L2较V4L有较大的改动,并已成为2.6的标准接口,函盖video\dvb\FM...,多数驱动都在向V4l2迁移.更好地了解V4L2先从应 用入手,然后再深入到内核中结合物理设备/接口的规范实现相应的驱动.本文先就V4L2在视频捕捉或camera方面的应用框架. V4L2采用流水线的方式,操作更简单直观,基本遵循打开视频设备、设置格式、处理数据、关闭设备,更多的具体操作通过ioctl函数来实现. 1.打开视频设备
在V4L2中,视频设备被看做一个文件.使用open函数打开这个设备:int cameraFd; cameraFd = open( |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于V4L2(video 4 linux 2)视频采集接口使用说明的所有评论