01 2019 档案

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