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. 生鲜配送管理系统_升鲜宝V2.0 小标签打印功能【代配送商品打印小标签功能】说明_15382353715

    小标签打印说明 小标签打印可以打印本系统的订单商品数量,也可以把外部的订单商品导入本系统进行打印. 打印本系统中的订单商品操作说明[上篇文章已经讲解相关的操作说明] 打印本系统之外的订单商品明细清单 ...

  2. 【English】九、kids/children/toddlers 三个单词的区别

    一.child.kid.toddler 参考:https://www.zybang.com/question/a9150bb1239cf1d667135e9bd8518f75.html child:美 ...

  3. MyDAL - .UpdateAsync() 之 .Set() 使用

    索引: 目录索引 一.API 列表 1.Set<M, F>(Expression<Func<M, F>> propertyFunc, F newVal) 如: .S ...

  4. SQLServer更改用户定义的数据库角色

    更改用户定义的数据库角色注意事项 需具有以下一项或多项权限或成员身份才能运行此命令: 对角色具有 ALTER 权限 对数据库具有 ALTER ANY ROLE 权限 具有 db_securityadm ...

  5. python+selenium运行时,提示元素不可见

    python+selenium运行多次新增项目脚本(出错的元素通过by_id的方式定位),当第三次新增时报Message: element not visible的错误,加入等待时间,等页面加载完成, ...

  6. 【转】Android Hook框架Xposed详解

    1 Introduction 1.1  概述 Xposed 是 GitHUB 上 rovo89 大大设计的一个针对 Android 平台的动态劫持项目,通过替换 /system/bin/app_pro ...

  7. java多线程编程之连续打印abc的几种解法

    一道编程题如下: 实例化三个线程,一个线程打印a,一个线程打印b,一个线程打印c,三个线程同时执行,要求打印出10个连着的abc. 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程 ...

  8. Vue echarts

    方式一.直接引入echarts 先 npm 安装 echarts npm install echarts --save // main.js import myCharts from './comm/ ...

  9. SQL 之 字符区别(转)

    1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的 ...

  10. Linux C启动时创建pid文件

    程序在启动时将pid写入文件,当程序再次启动时会进行检测,避免启动多个实例. util-pidfile.h文件 #ifndef __UTIL_PID_H__ #define __UTIL_PID_H_ ...