Bootstrap

V4L2获取图像数据

一、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框架

  1. V4L2总体可以分为2层:用户层和驱动层。它们各自有对应的操作函数,最终也是通过系统调用联系起来的
  2. 重点是V4L2的驱动层方面Linux系统已经帮助我们搞定
  3. 而我们开发使用摄像头往往仅仅需要了解和学习V4L2用户层
  4. 也就是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

;