[英]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.