【Linux media】Linux Media Driver Framework

在 Linux 内核媒体子系统(Media Subsystem)中,V4L2 Core、Media Framework 和 VideoBuf2 (VB2) 是三个紧密协作但职责分明的核心组件。它们共同构成了现代 Linux 视频驱动(如摄像头、编码器、显示器)的基础架构。

1.V4l2-Core子模块

V4L2-Core是v4l2子系统的骨架,它提供了以下功能:

1.向上层应用暴露标准的字符设备接口/dev/VideoX,提供控制底层硬件的ioctl命令,屏蔽硬件驱动的差异

2.定义核心数据结构,struct v4l2_device代表一个主设备,struct video_device代表一个设备节点,并负责它们的注册与管理

3.内置了一套控制框架v4l2_ctrl_handler,用于标准化的管理亮度,对比度,饱和度等设备参数

2.VideoBuf2

VideoBuf2简称vb2是缓冲队列管理层,它专门负责视频数据缓冲区的管理,提供以下功能:

1.负责视频缓冲区的申请、释放、队列管理和状态跟踪

2.支持多种I/O模式,比如MMAP、USERPTR、DMABUF等多种内存访问方式,为驱动提供灵活的零拷贝支持

3.驱动通过调用vb2的API来入队(vb2_queue)和出队(vb2_dequeue)缓冲区,以高效的处理视频数据流

详细分析见:https://blog.csdn.net/qq_38089448/article/details/160133999

3.Media Controller

Media Controller负责管理v4l2子系统的设备拓扑,为了管理复杂的多组件视频设备,提供以下功能:

1.现代摄像头模组通常由sensor,isp,csi等都多个子设备串联而成,Media Controller负责将这些组件抽象成媒体实体media_entity,媒体焊盘media_pad和媒体链路(media_link),形成一个完整的媒体图(Media Graph)

2.定义了数据再复杂硬件内部的流动路径,可以配置数据流从Sensor流向ISP,再流向最终的/dev/videoX节点

3.支持在运行时动态地启用、禁用或重配数据链路,以适应不同的应用场景,比如多路camera同时进行视频录制和预览

4.协同工作

当一个视频采集任务到来时,V4L2 Core 接收请求,根据 Media Controller 规划的路线,指挥各个硬件子设备开始工作,而整个过程中产生的海量视频数据,则由 Videobuf2 负责高效地搬运和管理。

相关推荐
A小辣椒2 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
VidDown3 天前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频