V4L2
V4L2全称video for linux 2,是linux系统之中用于处理视频设备的内核驱动程序接口。它提供了一种标准化的方式,使用户空间程序能够与视频设备(e.g. 摄像头、视频采集卡等)进行通信和交互。
understanding:就是屏蔽掉底层摄像头的不同驱动实现,提供给用户空间统一的接口调用
工作原理:在linux系统中所有的外设都被看成是一种特殊的文件,V4L2将一个视频采集设备以一个文件描述符给到用户空间。在V4L2的封装下,其支持三种方式来采集图像,内存映射方式(mmap)、直接读取方式(read)、用户指针。其中,read方式需要大量的复制操作,带来开销;用户指针方式对驱动工作较难,故一般采用mmap方式。此外,V4L2的一些重要数据结构都在#include<linux/videodev2.h>文件中进行定义(linux系统在内核编译阶段可以配置集成V4L2的能力)
V4L2的buffer管理是通过videobuf2来完成的,他充当用户空间和驱动之间的中间件,提供模块化的内存管理功能。
videobuf2其中主要包含以下数据结构:
1 | vb2_queue:用于描述buffer的队列,描述buffer节点以及buffer的入队与出队 |
其buffer的循环流程如下图
V4L2的API以及操作主要包括
参考
V4L2学习理解:https://zhuanlan.zhihu.com/p/668015169
v4l2应用程序接口:https://blog.csdn.net/weixin_68782273/article/details/126827820
ffmpeg从v4l2获取frame数据:
FFMPEG(二) v4l2 数据格式装换:https://blog.csdn.net/li_wen01/article/details/67631687
v4l2采集视频:https://blog.csdn.net/weixin_43147845/article/details/136899272