一、什么是v4l2
Video4linux2(简称v4l2),是linux环境下视频驱动的一种,它提供了像访问普通文件那样访问视频设备的方法,能够对其进行读写。视频设备(摄像头)在/dev/video0下
二、V4L2视频采集的基本流程
1. 打开设备文件
int fd = ::open(”/dev/video0″,O_RDWR);
2. 取得设备的capability,查看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等功能。比如:
VIDIOC_QUERYCAP
V4L2_CAP_VIDEO_CAPTURE·
V4L2_CAP_STREAMING
3. 设置视频的制式和帧格式(如帧的宽度高度等)
相关结构体:struct v4l2_format等
4. 申请帧缓冲
struct v4l2_requestbuffers req;//申请动态缓冲结构体
struct v4l2_buffer buf;//驱动中一帧视频的缓冲
5 申请物理内存(内存映射)
(VIDEO_BUF*)calloc(req.count, sizeof(VIDEO_BUF))
V4L2_MEMORY_MMAP
mmap()内存映射
6. 开始视频采集
VIDIOC_STREAMON
7. *把数据从缓存中读取出来
::ioctl(fd, VIDIOC_QBUF, &buf
8. 关闭设备文件
close(fd)