(一)V4L2学习流程



title: V4L2学习流程
date: 2019/4/23 18:00:00
toc: true
---

V4L2学习流程

参考资料

关键资料,插图让人一下子就理解了

Linux摄像头驱动1——vivid

Linux摄像头驱动2——UVC

重写uvc比较完整注释版本

从更大的角度去看V4L2框架,不局限在摄像头

V4L2框架概述

排版不错的笔记

USB摄像头驱动框架分析

从零写USB摄像头驱动之分析描述符

从零写USB摄像头驱动之实现数据传输1_框架

从零写USB摄像头驱动之实现数据传输2_简单函数

从零写USB摄像头驱动之实现数据传输3_设置参数

下面的排版不太好,但是更具体

摄像头驱动之实现数据传输1_框架_学习笔记

摄像头驱动之实现数据传输2_简单函数_学习笔记

摄像头驱动之实现数据传输3_设置参数_学习笔记

摄像头驱动之实现数据传输4_URB_学习笔记

摄像头驱动之实现数据传输5_调试_学习笔记

摄像头驱动之设置属性_学习笔记

其他系列文章笔记

USB摄像头驱动配置及V4L2编程
UVC 摄像头驱动(三)配置摄像头,实时数据采集
UVC 摄像头驱动(三)配置摄像头,实时数据采集
USB驱动函数总结
UVC 摄像头驱动(二)描述符分析
UVC 摄像头驱动(一)硬件描述
V4L2(三)编写虚拟摄像头驱动
V4L2(二)虚拟摄像头驱动vivi深入分析
V4L2(一)框架浅析

学习流程

  1. 学习vivi的代码,抛开USB相关的细节,去了解linux下的v4l2的框架
  2. 自己编写vivi的代码,实现在ubuntu下的使用
  3. 学习具体的uvc规范
  4. 学习uvc的代码,了解下usb如何鱼v4l2搭配使用
  5. 自己编写一个uvc代码

其实自己压根没敲代码,只是学习框架,以后用到的时候再去试试,各个版本的代码调用都不一样,新的linux4.x的videobuf 封装的更好了,好像都能直接用的那种

插图一览

这是参考资料的大图Linux摄像头驱动2——UVC,本人还没有那么高的功底 哈哈

几个基本概念:
1.应用层有五个操作函数,其中ioctl下至少有11个基本的操作函数;
2.USB摄像头有且只有一个VC接口用于控制,可有多个VS接口用于数据传输;
3.11个操作函数可以分为四类:数据buf的操作、摄像头格式的操作、摄像头属性的操作、摄像头的启动与停止;
4.数据buf的操作:
  a.根据应用层参数生成指定个数的v4l2_buffer,这些buf又同时在两个队列上:mianququeirqquque
  b.摄像头产生的数据通过VS接口和USB核心的URB,放入irqquque队列的首buf,并将该buf从该队列删除;
  c.应用层取出mianquque队列的首buf,得到数据,并将该buf从该队列删除,此时该buf同时不在两个队列上,将被重新放在尾部;
5.摄像头格式的操作:使用interface_to_usbdev()得到对应接口的USB设备描述符,描述符包含摄像头的各种特性信息,保存在v4l2_format结构体中;
6.摄像头属性的操作:使用·usb_control_msg()通过VC接口设置相关属性;

有了上面的基本概念,现在开始调用vidioc_streamon()启动传输:
1.设置USB摄像头对应带宽接口等;
2.分配usb_buffersurb,设置urb
3.上报urb,USB核心解析urb,向指定接口(摄像头VS接口)接收数据(放在usb_buffers);
4.urb传输完成后产生中断,中断里取出irqquque队列首buf,将usb_buffers数据放入,并唤醒休眠的poll
5.poll唤醒,vidioc_dqbuf()mianquque队列取出首buf,返回给应用层,完成了摄像头数据到应用层的传输。

这里的队列图

原文地址:https://www.cnblogs.com/zongzi10010/p/10764116.html

时间: 2024-08-29 07:04:24

(一)V4L2学习流程的相关文章

ASP.NET知识重新梳理(二)------关于ASP.NET知识学习流程的一些理解

ASP.NET知识的学习流程我大概是这么理解的,首先我们必须打好C#的基础,若是之前没有学过C++之类的面向对象语言作为基础,还是要好好看看继承派生多态之类的区别和联系的:其次,当今的编程不仅仅只是我们在学校课堂上所学的控制台应用程序,我们还要学习winfom,WPF之类的本地窗体应用:第三,每个公司的技术方向都是不同的,但是共同的地方是都需要数据库来存储自己的数据,而且sqlserver,mysql,oracle都是大同小异的,所以如果你之前的编程学的不是很好,做一个DBA吧,入门难度也不是很

新学员学习流程引导

新学员学习流程引导 欢迎各位朋友报名学习微职位课程,希望大家在接下来时间里好好学习,在各自的领域发展棒棒哒~~ 温馨提示:进入课程方法:点击学院网站顶部:我的学习中心->左侧我的微职位->找到本班级点击学习. 一.学习方式观看视频课程+直播答疑+在线考核+助教一对一辅导 二.内容安排录播视频课程:课程体系是分模块的  每一个模块课程学完都有对应的练习以及考核,学完之后完成练习以及考核.助教老师批改通过之后,下一个模块课程会自动开通.直播答疑课程:在课程学习过程中,会不定期开展直播课:直播课前班

java EE学习流程(第二版更新)

这周有点堕落了,这两天啥都没写,就顾上刷<庆余年>了??,今天拿还没完成的javaEE的学习流程来充个数,这个是我在原来基础上增加和更新后的学习流程.里面增加了现有的一些新技术,同时也增加了我了解到的技术和框架.希望能够帮助到正在学习的你,资源链接如下: 链接: https://pan.baidu.com/s/1XSyene6Fva6jrqaiH1s8bQ 提取码: 53qr 图片版本的我放在文末了,比较长,以下是内容大纲: 第一阶段 计算机基础知识 计算机基本构成 硬件 软件 基本架构 硬件

V4L2学习笔记

最近在做类似于飞思卡尔的项目,要用到摄像头,摄像头接在一块树莓派上,但树莓派上跑的是Linux系统.因为对Linux并不熟悉,身边也没有比较熟悉Linux的朋友,几次想尝试最终都因为遇到大多问题找不原因放弃了.这次又开始学习Linux,同样遇到一堆的问题,但硬着头皮,一个一个的找资料解决. Video for Linuxtwo(Video4Linux2)简称V4L2,是V4L的改进版.V4L2是linux操作系统下用于采集图片.视频和音频数据的API接口,配合适当的视频采集设备和相应的驱动程序,

用java编网页的学习流程,我的一些小心得(初学java到高深运用)

(1)java基础:首先得会写int,String,for循环,数组,**等等(熟练各种基础的关键字,各种java自带的排序,随即等等算法)什么是封装,继承,多态,然后private,public,protected 是什么区别,什么是静态,什么是重载,什么是重写,然后最重要的是明白什么是对象,并且熟练运用接口.(这是给刚刚接触java的人写的,所以写的详细一点). (2)然后就是搭建小型网站:jsp+servlet+jdbc+mysql+tomcat(jsp是java自带的网页样式,需要把网页

V4L2学习笔记【转】

本文转载自:http://www.cnblogs.com/silence-hust/p/4464291.html v4l2,一开始听到这个名词的时候,以为又是一个很难很难的模块,涉及到视频的处理,后来在网上各种找资料后,才发现其实v4l2已经分装好了驱动程序,只要我们根据需要调用相应的接口和函数,从而实现视频的获取和处理.只要认真的看几篇文章就对v4l2有一定的了解了,由于是第一次接触,网上的资料良莠不齐,难得可以找到几篇自己感觉很不错的.记录下来:(没必要看太多,很多都是一样的意思) http

大数据课程学习流程

第一阶段 Java编程基础→oracle/mysql→sql优化→jdbc 第二阶段 JavaScript基础→JavaScript深入→jQuery→jquery easyui→bootstrap 第三阶段 Servlet/jsp→ajax→xml→svn→maven实战项目一 第四阶段 Struts2→hibernate→spring/spring mvc→项目实战二→web serviceshiro→mybatis→项目实战三 第五阶段linux+搜索+hadoop体系 Linux基础→s

java学习流程

J2SE 面向对象-封装.继承.多态内存的分析递归集合类.泛型.自动打包与解包.Annotation IO 多线程.线程同步 TCP/UDP AWT.事件模型.匿名类 正则表达式反射机制 2:数据库(Oracle或者MySQL)SQL语句多表连接,内外连接, 子查询等管理表.视图.索引.序列.约束等 树状结构存储存储过程.触发器 数据库设计三范式. 3:JDBCJDBC基础连接池 树状结构存储与展现 DataSource & RowSet JDBC连接Oracle及MySQL 4:HTML_CS

V4L2学习4--VIVI分析

vivi 相对于后面要分析的 usb 摄像头驱动程序,它没有真正的硬件相关层的操作,也就是说抛开了复杂的 usb 层的相关知识,便于理解 V4L2 驱动框架,侧重于驱动和应用的交互. 前面我们提到,V4L2 的核心是 v4l2-dev.c 它向上提供统一的文件操作接口 v4l2_fops ,向下提供 video_device 注册接口 register_video_device ,作为一个具体的驱动,需要做的工作就是分配.设置.注册一个 video_device.框架很简单,复杂的是视频设备相关