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,返回给应用层,完成了摄像头数据到应用层的传输。

这里的队列图

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

  1. V4L2学习记录【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637600.html V4L2学习记录 这个还没有分析完,先在这放着,防止电脑坏掉丢了,以后再完善 V4L ...

  2. v4l2数据获取流程

    V4L2数据获取流程 整个过程相关的数据结构有如下几个: struct v4l2_capability m_cap; /* 驱动能力 */ struct v4l2_format m_fmt; /* 数 ...

  3. Java学习--流程控制

    Java学习 流程控制 用户交互Scanner Scanner对象 Java通过Scanner类获取用户的输入 基本语法: Scanner scanner = new Scanner(System.i ...

  4. java学习流程

    J2SE 面向对象-封装.继承.多态内存的分析递归集合类.泛型.自动打包与解包.Annotation IO 多线程.线程同步 TCP/UDP AWT.事件模型.匿名类 正则表达式反射机制 2:数据库( ...

  5. V4L2学习笔记【转】

    本文转载自:http://www.cnblogs.com/silence-hust/p/4464291.html v4l2,一开始听到这个名词的时候,以为又是一个很难很难的模块,涉及到视频的处理,后来 ...

  6. java后端学习流程

    首先,我个人比较推崇的学习方法是:先学java前段,也就是HTML,css,js,因为学习java以后肯定是往java ee方向发展的,学习完前端,在学习后端很多东西比计较容易理解! 其中J2SE是关 ...

  7. Shell脚本学习 - 流程控制和函数

    继续Shell的学习.上两篇是关于基本数据类型,基本语法以及运算符相关,这一篇是流程控制相关(if, for, while) 流程控制 if else 流程控制不可为空,如果else没有语句执行,就不 ...

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

    (1)java基础:首先得会写int,String,for循环,数组,**等等(熟练各种基础的关键字,各种java自带的排序,随即等等算法)什么是封装,继承,多态,然后private,public,p ...

  9. Python学习流程

    这是我在过去几家公司招聘到工程师,Python入职培训的过程. 时间分为4周,全部自学,仅提供大纲.适用于Web方向: 1.Week1:读完<简明Python教程>,适应Python开发环 ...

随机推荐

  1. 用Gogs在Windows上搭建Git服务

    1.下载并安装Git,如有需求,请重启服务器让Path中的环境变量生效. 2.下载并安装Gogs,请注意,在Windows中部署时,请下载MiniWinService(mws)版本. 3.在Maria ...

  2. python3+arcface2.0 离线人脸识别 demo

    python3+虹软2.0的所有功能整合测试完成,并对虹软所有功能进行了封装,现提供demo主要功能,1.人脸识别2.人脸特征提取3.特征比对4.特征数据存储与比对其他特征没有添加 sdk 下载请戳这 ...

  3. Python正则表达式很难?一篇文章搞定他,不是我吹!

    1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:.^$?+*{}| 以上特殊字符要想使用字面值,必须使用进行转义 2 字符类 1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时 ...

  4. 简说Python生态系统的14年演变

    [导语]Python 里各种丰富的标准库.第三方库和模块成为其广受欢迎的原因之一.而 PyPI 就是大家想第三方库前先要安装的一个仓库.作为使用者,它可以帮我们查找 Python 社区开发和共享的软件 ...

  5. Python的应用小案例

    1.python统计文本中每个单词出现的次数: #coding=utf-8__author__ = 'zcg' import collectionsimport os with open('abc.t ...

  6. javascript基础之对象

    老师的博客:https://www.cnblogs.com/liwenzhou/p/8004649.html#autoid-1-8-6 JavaScript中的所有事物都是对象:字符串.数字.数组.日 ...

  7. 使用git 遇见的错误使用到的命令

    查看远端地址  git remote -v 需要重新添加地址  git remote set-url origin xxx 远程新的地址 git remote add origin_new 设置用户名 ...

  8. 求导程序编写(oo-java编程)

    本单元的任务为求导. 即将一个含自变量x的多项式F求导成为另外一个含自变量x的多项式f.使得 dF/dx = f 为降低我们的难度,这个任务被分解成了三个阶段: (1)对幂函数进行求导(不允许嵌套) ...

  9. MVC设计思想

    MVC就是按照程序的功能将他们分成三个层,Model层(模型层),View层(显示层),Controller(控制层). Model层:可以细分为两层,分别是dao层.service层,这两层主要功能 ...

  10. Python----多项式回归

    多项式线性回归 1.多项式线性方程: 与多元线性回归相比,它只有一个自变量,但有不同次方数. 2.举例: import numpy as np import matplotlib.pyplot as ...