【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 负责高效地搬运和管理。

相关推荐
网络点点滴2 小时前
创建一个简单的web服务器
运维·服务器·前端
萝卜小白2 小时前
算法实习学习记录-day01
linux·服务器
奋斗的小青年I3 小时前
紧急通知:所有基于文件的 Citrix 许可方式将于 2026 年 4 月 15 日停止运行
服务器·云桌面·vpx·citrix·netscaler
cyber_两只龙宝3 小时前
【Oracle】Oracle之SQL中的单行函数
linux·运维·数据库·sql·云原生·oracle
成都被卷死的程序员3 小时前
RustDesk 自建远程控制服务器部署全记录(含错误排查与最终方案)
运维·服务器
overmind3 小时前
oeasy Python 120[专业选修]列表_直接赋值_浅拷贝_shallowcopy_深拷贝_deepcopy
linux·windows·python
小宋0013 小时前
Ubuntu Terminator(多开并行终端工具)
linux·运维·ubuntu
小尔¥3 小时前
keepalived高可用与负载均衡
linux·运维·负载均衡
TechWayfarer3 小时前
当IP来自太空:卫星互联网时代的IP归属地查询挑战与落地实践
服务器·网络·tcp/ip