01 2019 档案
摘要:usb摄像头驱动程序,里面涉及硬件的操作。比如说,想设置亮度的时候,需要把亮度的参数发给硬件。去得到真正视频数据的时候,需要访问硬件得到数据。usb摄像头驱动程序框架与虚拟摄像头驱动程序的框架是一样的。 1、构造一个usb_driver 2、设置 probe: 2.1 分配video_device
阅读全文
摘要:继续分析数据的获取过程: 1、请求分配的缓冲区: ioctl(4,VIDIOC_REQBUFS) vidioc_reqbufs 2、查询和映射缓冲区 ioctl(4,VIDIOC_QUERYBUF) mmap 3、把缓冲区放入队列 ioctl(4,VIDIOC_QBUF) 4、启动摄像头 ioctl
阅读全文
摘要:前面的几篇文章已经分析了v4l2的框架,对框架的分析是比较粗浅的,能基本清楚函数之间的调用过程。但是很多内容并没有分析,比如说里面有很多ioctl,并没有分析哪些ioctl是必须的,也没有分析如何从应用程序去获得摄像头数据。在本篇文章中,将根据虚拟驱动vivi的使用彻底分析摄像头驱动。 要想分析使用
阅读全文
摘要:上一篇文章中,已经介绍了v4l2_open、v4l2_read、v4l2_write的调用过程,相对于v4l2_ioctl,它们是比较简单的。下面来分析v4l2_ioctl。注意在这里还是分析以vivi.c为例,进行分析。 app: ioctl drv: v4L2_fops.unlocked_ioc
阅读全文
摘要:1、app: open("/dev/video0",....) drv: v4l2_fops .v4l2_open //这个函数主要做的是,调用具体设备提供的open函数 /* 问题来了,应用程序调用open("/dev/video0",....),v4l2_open为什么会最终会被调用? vide
阅读全文
摘要:1、分配video_device结构体 2、设置 3、注册 video_register_device 分析vivi.c: vivi_init( )//入口函数 vivi_create_instance() ret = v4l2_device_register(NULL, &dev->v4l2_de
阅读全文
摘要:在V4l2初识(一)中,我们已经知道当插上一个摄像头的时候,在uvc_driver.c中最终会调用函数video_register_device函数。接下来我们就简要分析这个函数做了哪些事情,揭开其神秘面纱。 /* Register video devices. Note that if video
阅读全文
摘要:V4L2驱动框架概述 V4L2(video for linux two)是linux为视频设备提供的一套标准接口。它也属于字符设备驱动程序。 首先回顾普通字符设备驱动程序的写法: app : open read write 内核: drv_open drv_read drv_write 相关的硬件设
阅读全文