V4L2学习笔记
+ -

V4L2的数据缓冲区存储类型

2025-12-18 本文链接为:http://www.usbzh.com/article/detail-1607.html ,欢迎转载,转载请附上本文链接。

V4L2从视频设备中传输数据方式有以下四种:

  enum v4l2_memory {
    V4L2_MEMORY_MMAP             = 1,
    V4L2_MEMORY_USERPTR          = 2,
    V4L2_MEMORY_OVERLAY          = 3,
    V4L2_MEMORY_DMABUF           = 4,
    };

1. V4L2_MEMORY_MMAP

  • 原理:驱动程序在内核空间分配缓冲区,用户空间通过 mmap() 系统调用将其映射到用户进程的地址空间。
  • 特点:高效、零拷贝(用户空间直接访问内核缓冲区)。常用于视频采集。
  • 流程:应用申请 → 驱动分配 → 用户映射访问。

2. V4L2_MEMORY_USERPTR

  • 原理:用户空间应用程序自行分配内存,将用户空间的指针传递给驱动程序使用。
  • 特点:用户控制内存分配,但存在一次数据拷贝(从用户空间到内核/设备)。灵活性高。
  • 流程:用户分配内存 → 传递指针给驱动 → 驱动使用数据。

3. V4L2_MEMORY_OVERLAY

  • 原理:缓冲区位于显卡显存或硬件叠加层中,用于直接显示输出(Overlay)。
  • 特点:专为视频叠加显示优化,低延迟,通常不经过CPU处理,直接送到显示控制器。
  • 用途:主要用于视频预览、叠加图形等显示场景。

4. V4L2_MEMORY_DMABUF

  • 原理:基于 DMA Buffer(直接内存访问缓冲区) 共享机制,支持不同设备/驱动间零拷贝共享缓冲区
  • 特点:现代高效方式,支持硬件加速(如GPU、ISP、编码器)间直接传递数据,无CPU拷贝开销。
  • 用途:适用于复杂媒体处理流水线,如 Camera → GPU → 编码器 的高效数据流转。

对比总结

类型 内存所有者 拷贝次数 主要用途
MMAP 内核驱动 零拷贝(映射) 常规视频采集
USERPTR 用户空间 至少一次拷贝 用户控制内存的特殊需求
OVERLAY 显示硬件 零拷贝(硬件直写) 视频叠加显示输出
DMABUF 任意(共享) 零拷贝(驱动间共享 硬件加速与跨设备流水线

选择建议

  • 追求性能/采集 → 优先 MMAPDMABUF
  • 硬件叠加显示 → 使用 OVERLAY
  • 跨设备/硬件加速 → 首选 DMABUF
  • 特殊内存需求 → 考虑 USERPTR

实际使用取决于硬件支持与驱动实现,需查询设备能力(通过 VIDIOC_QUERYCAPVIDIOC_ENUM_FMT 等)。

本文链接为:http://www.usbzh.com/article/detail-1607.html ,欢迎转载,转载请附上本文链接。

0 篇笔记 写笔记

V4L2的数据缓冲区存储类型
V4L2从视频设备中传输数据方式有以下四种: enum v4l2_memory { V4L2_MEMORY_MMAP = 1, V4L2_MEMORY_USERPTR = 2, V4L2_MEMORY_OVERLAY ......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!