Linux内核V4L2架构- test ok

一.V4L2简介

V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。是linux操作系统下一套用于采集图片、视频和音频数据的通用API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。 ​ V4L2支持三种方式来采集图像:内存映射方式(mmap)、直接读取方式(read)和用户指针;

二.V4L2框架
1.重要结构体
该结构体描述了视频采集设备的driver信息

struct v4l2_capability 
{
     __u8 driver[16];       // 驱动名字
    __u8 card[32];         // 设备名字
    __u8 bus_info[32];     // 设备在系统中的位置
    __u32 version;         // 驱动版本号
    __u32 capabilities;    // 设备支持的操作
    __u32 reserved[4];     // 保留字段
};
该结构体描述当前camera(摄像机)支持的格式信息
 struct v4l2_fmtdesc
 {
     __u32 index;               // 要查询的格式序号,应用程序设置
     enum v4l2_buf_type type;   // 帧类型,应用程序设置
     __u32 flags;               // 是否为压缩格式
     __u8 description[32];      // 格式名称
     __u32 pixelformat;         //所支持的格式
     __u32 reserved[4];         // 保留
 };
该结构体描述每帧图像的具体格式,包括帧类型以及图像的长、宽等信息
01 struct v4l2_format
02 {
03     enum v4l2_buf_type type;          // 帧类型,应用程序设置
04     union fmt
05     {
06         struct v4l2_pix_format pix;   // 视频设备使用
07         struct v4l2_window win;
08         struct v4l2_vbi_format vbi;
09         struct v4l2_sliced_vbi_format sliced;
10         __u8 raw_data[200];
11     };
12 };
该结构体描述申请的缓冲区的基本信息
01 struct v4l2_requestbuffers
02 {
03     __u32 count;                    // 缓冲区内缓冲帧的数目
04     enum v4l2_buf_type type;        // 缓冲帧数据格式
05     enum v4l2_memorymemory;         // 区别是内存映射还是用户指针方式
06     __u32 reserved[2];
07 };
该结构体表示一帧图像数据的基本信息,包含序号、缓冲帧长度和缓冲帧地址等信息
01 struct v4l2_buffer
02 {
03     __u32 index;                    //buffer 序号
04     enum v4l2_buf_type type;        //buffer 类型
05     __u32 byteused;                 //buffer 中已使用的字节数
06     __u32 flags;                    // 区分是MMAP 还是USERPTR
07     enum v4l2_field field;
08     struct timeval timestamp;       // 获取第一个字节时的系统时间
09     struct v4l2_timecode timecode;
10     __u32 sequence;                 // 队列中的序号
11     enum v4l2_memory memory;        //IO 方式,被应用程序设置
12     union m
13     {
14         __u32 offset;               // 缓冲帧地址,只对MMAP 有效
15         unsigned long userptr;
16     };
17     __u32 length;                   // 缓冲帧长度
18     __u32 input;
19     __u32 reserved;
20 };
2.v4l2的实现流程

1)Video设备又分为主设备和从设备对于Camera来说, 主设备: Camera Host控制器为主设备,负责图像数据的接收和传输, 从设备: 从设备为Camera Sensor,一般为I2C接口,可通过从设备控制Camera采集图像的行为,如图像的大小、图像的FPS等。V4L2的主设备号是81,次设备号范围0~255

2)这些次设备号又分为多类设备:

视频设备(次设备号范围0-63)

Radio(收音机)设备(次设备号范围64-127)

Teletext设备(次设备号范围192-223)

VBI设备(次设备号范围224-255)。

V4L2设备对应的设备节点有/dev/videoX、/dev/vbiX、/dev/radioX

本文只讨论视频设备,视频设备对应的设备节点是/dev/videoX,视频设备以高频摄像头或Camera为输入源,Linux内核驱动该类设备,接收相应的视频信息并处理

2.0v4l2的分层

user space: 应用程序主要通过libv4l库来操作摄像头 也可以基于字符设备/dev/videoX自己编写应用程序 guvcview:用于调试usb摄像头(还有个软件cheese也可以) v4l2 utilities: v4l2 的工具集(参考前面第3篇文章)

kernel space: sensor、ISP、VIPP、CSI、CCI都为从设备向上,提供dev/videoX节点, 从dphy物理层获取视频数据册通过vb2子模块 CCI :主要是通过GPIO(供电、片选)、I2C(下发配置命令给sensor)实现配置sensor EHCI/OHCI:USB类型摄像头

适用于收音机,视频编解码器,视频捕获器以及视频输出设备驱动;

hardware CSIC Controller:从dphy获取mipi协议帧 I2C Controller:与sensor的i2c block通信 GPIO Controller:sensor通常需要供电或者片选

Video Control:视频处理命令(分辨率协商,数据格式处理,buffer管理)

Runtime Handle:运行时管理(Pipeline 管理,系统资源管理,中断调度)

Event Process:事件管理(上层调用,中断等事件的接收和分发);

Config Handle:配置管理(硬件拓扑结构,模组自适应列表);

external device sensror:摄像头的接口主要有:USB,DVP.MIPI(CSI)

Camera Modules:模组驱动(图像传感器,对焦电机,闪光灯等)

Camera Interfac:接口驱动(MIPI, Sub-Lvds, HiSpi, Bt656, DC等)

Image Signal Processor:图像处理驱动(基本处理模块驱动,3A统计驱动)

Video Inout Post Processor:视频输入后处理(Scaler,OSD等)

2.1中重要的结构体、

1)v4l2_device主设备

    struct v4l2_device {
        struct device *dev;  // 父设备指针
    #if defined(CONFIG_MEDIA_CONTROLLER)  // 多媒体设备配置选项
        // 用于运行时数据流的管理,
        struct media_device *mdev;
    #endif
        // 注册的子设备的v4l2_subdev结构体都挂载此链表中
        struct list_hea
  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小硕算法工程师

你的鼓励将是我创作的最大动力哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值