[英]How do I add a delay to a live stream sourced from webcam (v4l2) with FFMPEG?
[英]What is the use of mmap , userptr and dmabuf in video streaming using v4l2 drivers in linux?
enum v4l2_memory {
V4L2_MEMORY_MMAP = 1,
V4L2_MEMORY_USERPTR = 2,
V4L2_MEMORY_OVERLAY = 3,
V4L2_MEMORY_DMABUF = 4,
};
这是没有任何帧丢失的视频流的最快和有效的方法之一。
Userptr、mmap 和 DMABUF 都是为了避免因复制 memory(零复制)而导致的 CPU 周期浪费的方法,但它们都有不同的用例。 尝试进行简单的比较:
用户指针
MMAP
memory由驱动分配/在kernel空间,映射到用户memory空间,没有任何副本的方法。 这意味着 memory 可以指向 DMA 内存(分配在 kernel 空间中)
这适用于接收帧或发送帧,但在应该通过多个硬件设备(例如捕获 + 编码器 + 输出)传递相同帧的管道中,只有一个驱动程序可以分配缓冲区。 让所有驱动程序分配自己的 memory 需要用户空间在它们之间进行复制。 将 MMAP 与 userpointer 组合适用于单个接收-发送管道,但如果需要链中的多个元素,这会进一步分解。
DMA缓冲器
pengutronix 的人对此有一个很好的介绍,其中可视化了这些概念: https://elinux.org/images/b/b0/OSELAS.Presentation-DMABUF-migration.pdf
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.