一、V4L2介绍
V4L2是Video for linux2的简称,是linux中关于视频设备的内核驱动,在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写摄像头在/dev/video*下,如果只有一个视频设备,通常为/dev/video0
V4L2有一段历史了。大约在1998的秋天,它的光芒第一次出现在Bill Dirks 的眼中。经过长足的发展,它于2002年11 月,发布2.5.46 时,融入了内核主干之中。然而直到今天,仍有一部分内核驱动不支持新的API,这种新旧API 的转换工作仍在进行。同时,V4L2 API也在发展,并在2.6.18 版本中进行了一些重大的改变。支持V4L2的应用依旧相对较少。V4L2在设计时,是要支持很多广泛的设备的,它们之中只有一部分在本质上是真正的视频设备
二、V4L2框架
- V4L2总体可以分为2层:用户层和驱动层。它们各自有对应的操作函数,最终也是通过系统调用联系起来的
- 重点是V4L2的驱动层方面Linux系统已经帮助我们搞定
- 而我们开发使用摄像头往往仅仅需要了解和学习V4L2用户层
- 也就是V4L2的使用接口函数
三、V4L2获取图像数据步骤
头文件:
#include <linux/videodev2.h>
查看头文件:
gedit /usr/include/linux/videodev2.h
1)打开摄像头:
int fd = open("/dev/voide0", O_RDWR); |
2)获取摄像头参数:
struct v4l2_capability { __u8 driver[16]; __u8 card[32]; __u8 bus_info[32]; __u32 version;//内核版本 __u32 capabilities;//功能参数 __u32 device_caps; __u |