Linux源码阅读笔记-V4L2框架基础介绍
V4L2视频设备驱动基础
- V4L2 是专门为 Linux 设备设计的整套视频框架(其主要核心在 Linux 内核,相当于 Linux 操作系统上层的视频源捕获驱动框架)。为上层访问系统底层的视频设备提供一个统一的标准接口。V4L2 驱动框架能够支持多种类型设备:如视频 IO、radio 设备、VBI 设备。具体架构如下:
- V4L2 对 uvc 免驱 usb 设备的编程框架,主要用于采集 USB 摄像头。
- 采集方式:打开视频设备(设备视频设备的属性:绽放、裁剪等。在 Linux 编程中,直接使用 ioctl() 函数对设备 IO 通道进行管理)。
- V4L2 操作流程:打开设备-获取设备
capability
-选择视频输入-设备视频制式及帧格式-向驱动申请帧缓冲(不超过 5 个)-申请物理内存-开始视频采集-出队列以取得已经采集数据的帧缓冲,获取原始采集数据-停止视频采集 -关闭视频设备。
V4L2 驱动框架及常用数据结构
v4l2_device
- 整个输入设备的总体结构体,有多少输入设备就会有多少 v4l2 抽象。
v4l2_file_operations
v4l2_ioctl_ops
v4l2_subdev
- 基于 v4l2_device 之下,代表一个 v4l2 设备的子设备。
- video_device:专门用于为用户空间提供设备节点,就相当于提供系统调用的 API 函数(ioctl、open 等)。
v4l2_subdev_ops
- vb2_queue:v4l2 设备的缓存管理操作。
参考资料:https://it.0voice.com