1. 简介
    v4l2全称是video for linux version2,是linux系统中的视频驱动框架,包括视频输入(如摄像头),视频输出(如VGA输出等),视频编解码等等数据流管理功能;本章节主要针对视频输入设备(如摄像头);

  2. 摄像头数据流
    摄像头数据从内核空间(驱动)传输到用户空间(APP)主要有两种方法:
    a:通过数据拷贝的方式,用户空间通过read系统调用进入内核空间,内核空间驱动通过v4l2_file_operations->read读函数里调用copy_to_user函数将视频数据拷贝到用户空间,这种方法效率低下,对于图像视频这种数据量大的不是特别适合;
    b:通过指针传递的方式;用户空间和内核空间之间通过数据指针进行数据传递,用户空间把处理好的视频帧指针传递内内核驱动,内核把采集的数据写到内存buffer中并返回新的buffer指针给用户空间;这种效率高,适合视频这种大数据量传输;该方法实现有两种:
    ①buffer内存在用户空间申请,用户空间把申请好的buffer指针传递给内核驱动层;
    ②buffer内存在内核空间申请,用户空间通过mmap函数内存映射获取到buffer指针;

上图为摄像头数据流向示意图;v4l2驱动中会维护queue_listdone_list两个存储buffer指针的队列;
①用户空间app端会向内核申请已经写入新数据的buffer,内核空间驱动从done_list队列中返回buffer指针;
②app得到buffer数据进行处理,处理完成后将buffer提交给内核,内核将app提交的buffer添加到queue_list队列中;
③内核驱动从queue_list队列中取出空闲的buffer,并写入最新的视频数据,当一帧数据更新完后,将该buffer加入到 done_list队列中等待app获取;

  1. v4l2驱动框架

    通常处理器controler和subdev子设备的代码是分开的,比如摄像头驱动,cpu端camera controler部分的代码是芯片原厂实现,摄像头控制部分的代码是摄像头原厂提供,以子设备的形式注册到内核;
    camera controler部分的代码其功能一般包括图像数据的采集、图像buffer管理以及子设备的管理和media数据通路管理等;子设备部分负责该子设备的设置,以及提供函数接口给camera controler端使用;
    camera controler端主要抽象的结构体:
    v4l2_device:用于整个v4l2驱动的统筹管理的,包括子设备(可以由多个)、media framwork等等;
    video_device:用于生成设备节点(/dev/videoX),给用户提供操作接口,如查询/设置参数、获取buffer数据、向内核提交处理好的buffer等等;
    vb2_queue:提供一套完整的视频buffer的管理功能,包括buffer的申请,buffer在内核和用户空间之间的切换等等;
    v4l2_async_notifier:用于子设备的异步注册,subdev子设备的注册通常和controler部分设备的注册时分开的,controler部分需要通过v4l2_async_notifier查找匹配子设备并将其注册到v4l2_device进行统一管理;其匹配规则可以通过设备名称、自定义函数、i2c设备等;
    media_device:该结构体主要用于数据通道的控制,复杂的v4l2设备驱动可能有很多功能各异的子设备,数据流的流向控制可以通过media framwork进行控制;

    subdev子设备端主要抽象的结构体:
    v4l2_subdev:子设备抽象结构体,提供子设备的基本参数设置及函数接口;
    v4l2_ctrl_handler:主要用于注册子设备的ioctl(VIDIOC_G_CTRL/VIDIOC_S_CTRL)控制命令,如设置亮度等;
    该节值只是简单的介绍一下v4l2驱动框架的数据流及其主要的抽象结构体的功能,后续有时间会进行展开;

v4l2驱动框架简介相关推荐

  1. Camera 从应用层看V4L2驱动框架

    1.V4L2驱动框架简介 V4L2可用于采集图片.视频和音频数据的通用 API 接口,配合适当的视频采集设备和相应的驱 动程序,可以实现图片.视频.音频等的采集. 2.V4L2视频采集原理 当启动视频 ...

  2. 深入学习Linux摄像头(二)v4l2驱动框架

    深入学习Linux摄像头系列 深入学习Linux摄像头(一)v4l2应用编程 深入学习Linux摄像头(二)v4l2驱动框架 深入学习Linux摄像头(三)虚拟摄像头驱动分析 深入学习Linux摄像头 ...

  3. Linux V4l2驱动 -- 框架概述

    V4l2框架简述 1 硬件 常用的电脑摄像头是USB接口,主流的智能手机摄像头是MIPI接口,另外还有像树莓派等硬件使用的CSI接口的设备.常用的智能手机Camera采用的MIPI接口,电路框架以及电 ...

  4. V4L2系列 之 V4L2驱动框架

    目录 前言 一.V4L2驱动框架概览 1.应用层 ->中间层->驱动层 2.主要代码文件(Linux 4.19版本内核) 二.怎么写V4L2驱动 1.如何写一个设备的驱动? 2.Video ...

  5. Linux之V4L2驱动框架

    目录 一.V4L2简介 二.V4L2操作流程 1.打开摄像头 2.查询设备的属性/能力/功能 3.获取摄像头支持的格式 4.设置摄像头的采集通道 5.设置/获取摄像头的采集格式和参数 6.申请帧缓冲. ...

  6. V4L2驱动框架简单分析

    转自:https://www.cnblogs.com/huty/p/8518234.html 概述 Video4Linux2是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供 ...

  7. v4l2驱动框架_【干货分享】Xilinx Linux V4L2视频管道(Video Pipeline)驱动程序分析...

    作者:付汉杰,hankf@xilinx.com, 文章转载自:赛灵思中文社区论坛 概述 Xilinx提供了完整的V4L2的驱动程序,Xilinx V4L2 driver.处于最顶层的驱动程序是V4L2 ...

  8. Linux驱动框架之v4l2视频驱动框架解析

    1.简介 v4l2是专门为linux设备设计的一套视频框架,其主体框架在linux内核,可以理解为是整个 linux 系统上面的视频源捕获驱动框架.其广泛应用在嵌入式设备以及移动端.个人电脑设备上面, ...

  9. V4L2视频驱动框架---v4l2_device管理模块简述

    ​ v4l2框架由4个主要的部分(数据结构)组成: v4l2_devices(包括v4l2_subdev) :v4l2_device管理所有的设备 media_device : meida_devic ...

  10. 视频驱动V4L2子系统驱动架构 - 驱动框架

    文章系列 视频驱动V4L2子系统驱动架构 - 驱动框架 视频驱动V4L2子系统驱动架构 - ioctl 基于linux4.6.3 V4L2驱动框架 v4l2驱动架构如图所示,v4l2也就是video ...

最新文章

  1. 有点意思!Linux 块设备处理模型,基础【簇、柱面、存储的计算】
  2. Form提交前,ajax校验,并阻止提交
  3. 2017年上半年全国高等学校安徽考区计算机水平考试,教务处关于2017年上半年全国高等学校(安徽考区)计算机水平考试报名的通知-教务处...
  4. 还不明白可空类型原理? 我可要挖到底了
  5. 【转】C#中使用TransactionScope类(分布式事务) 和 锁
  6. 在Spring Boot + Mybatis 中,使用@Repository失效
  7. 在 PHP 中使用命令行工具
  8. android源码中的ndk,如何在不需要Android操作系统源代码的情况下在Android NDK中创建新的NativeWindow?...
  9. TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(一)
  10. 遗传算法的C语言代码
  11. PG数据库创建视图并授权给新用户
  12. 基于Python实现的Cholesky分解与Crout分解
  13. OPNsense用户手册-内联入-侵防御系统
  14. 《第十三届服创大赛A23项目-基于区块链的艺术品数字资产确权流通系统》的未完成版
  15. 台式计算机怎么加一个硬盘,台式电脑增加硬盘_台式电脑增加硬盘图解
  16. 怎么让input控件,填充满td
  17. webpack配置详解一:mode模式
  18. 如何快速干净彻底的卸载Oracle11g
  19. 数论-质因数分解(最基础方法)
  20. 领导合影站位图_领导座次安排图,没有人会教你这些,但非常重要!(建议收藏)...

热门文章

  1. 坚果云 我的电脑图标_坚果云使用教程
  2. 【贪玩巴斯】操作系统(一)——操作系统引论 「发展与特征」2021-09-16
  3. DirectX11编程11 Blend混合
  4. jQuery中的animate效果没有backgroundColor背景颜色属性设置--已解决
  5. Markdown符号
  6. #前端# 万字总结!前端项目化超详细方法及思路!
  7. htpasswd小工具生成密码
  8. 2021强网杯全国网络安全挑战赛Writeup
  9. Hi,这是一个普通Android开发的2021小结
  10. 51nod 1521 一维战舰