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

相关推荐
hyf32663343 分钟前
泛程序:从零开始搭建稳定程序项目框架
运维·服务器·爬虫·百度·seo
哎呦喂我去去去1 小时前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#
NiceCloud喜云2 小时前
海外云服务器怎么选?适用场景、价格和避坑经验总结
运维·服务器
easy_coder2 小时前
Linux LVM 知识文档
linux·运维
小小的木头人3 小时前
Ubuntu 使用 udev + systemd + UUID 实现 USB 硬盘自动挂载
linux·运维·ubuntu
kaoa0004 小时前
Linux入门攻坚——84、网络虚拟化技术-1
linux·运维·服务器
RisunJan4 小时前
Linux命令-shutdown(安全关闭或重启系统)
linux·服务器·安全
2601_965798475 小时前
MTDb Movie & TV Database Script Setup, Caching, and SEO Guide
linux·服务器·数据库·php
我头发多我先学5 小时前
linux系统编程:初识进程
linux·运维·服务器
Freak嵌入式5 小时前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则