初始v4l2(六)-------根据虚拟驱动vivi的使用彻底分析摄像头驱动

  前面的几篇文章已经分析了v4l2的框架,对框架的分析是比较粗浅的,能基本清楚函数之间的调用过程。但是很多内容并没有分析,比如说里面有很多ioctl,并没有分析哪些ioctl是必须的,也没有分析如何从应用程序去获得摄像头数据。在本篇文章中,将根据虚拟驱动vivi的使用彻底分析摄像头驱动。

  要想分析使用过程,必须得到应用程序的源码。xawtv的源码可以从 http://www.kraxel.org/releases/xawtv。

  在我们进行分析源码的时候,当然可以从xawtv的main函数进行分析,看看它涉及对vivi驱动程序有哪些系统调用,但是这个过程会非常的复杂,因为xawtv除了调用vivi驱动程序外,还有其他很多的工作。那么如何可以快速的了解它所涉及的调用呢?

  利用strace命令,在linux命令行下输入:strace  -0  xawtv.log  xawtv。这样的话,xawtv中所涉及的所有open、read、ioctl这些系统调用都会记录在xawtv.log中。

  1、open  

  2、ioctl(4,VIDIOC_QUERYCAP//列举性能

  3、ioctl(4,VIDIOC_G_FMT

  4、for()

    ioctl(4,VIDIOC_ENUM_FMT

  5、ioctl(4,VIDIOC_G_INPUT     //获得当前的使用源

  6、ioctl(4,VIDIOC_ENUMINPUT //列举输入源

  7、ioctl(4,VIDIOC_QUERYCTRL) //查询属性,比如亮度、对比度

 

  static void*v4l2_open(char *device)

  {   

    if (-1 == xioctl(h->fd,VIDIOC_QUERYCAP,&h->cap,EINVAL))
      goto err;

    get_device_capabilities(h);

  }

  

猜你喜欢

转载自www.cnblogs.com/-glb/p/10296677.html