该文被密码保护。 阅读全文
posted @ 2019-02-14 22:38 一代枭雄 阅读(49) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
posted @ 2019-02-14 20:24 一代枭雄 阅读(107) 评论(0) 推荐(0)
该文被密码保护。 阅读全文
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 一代枭雄 阅读(1612) 评论(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 一代枭雄 阅读(1285) 评论(0) 推荐(0)
摘要: 前面的几篇文章已经分析了v4l2的框架,对框架的分析是比较粗浅的,能基本清楚函数之间的调用过程。但是很多内容并没有分析,比如说里面有很多ioctl,并没有分析哪些ioctl是必须的,也没有分析如何从应用程序去获得摄像头数据。在本篇文章中,将根据虚拟驱动vivi的使用彻底分析摄像头驱动。 要想分析使用 阅读全文
posted @ 2019-01-20 23:25 一代枭雄 阅读(1648) 评论(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 一代枭雄 阅读(3151) 评论(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 一代枭雄 阅读(2195) 评论(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 一代枭雄 阅读(1819) 评论(0) 推荐(1)
摘要: 在V4l2初识(一)中,我们已经知道当插上一个摄像头的时候,在uvc_driver.c中最终会调用函数video_register_device函数。接下来我们就简要分析这个函数做了哪些事情,揭开其神秘面纱。 /* Register video devices. Note that if video 阅读全文
posted @ 2019-01-19 18:22 一代枭雄 阅读(3492) 评论(1) 推荐(1)