我試圖在兩個進程之間共享從USB攝像頭(Logitech c270)接收的幀(圖像),以便我可以避免memcpy
。我使用內存映射流I/O方法描述here,我可以在使用v4l2_mmap
後成功從相機獲取幀。但是,我有另一個進程(用於圖像處理),它必須在出隊後使用圖像緩衝區,並通知第一個進程再次對緩衝區進行排隊。v4l2是否支持多圖?
網上搜索,我能找到打開視頻設備多次是允許的,但是當我嘗試映射成功v4l2_open
後(嘗試都v4l2_mmap
,只是mmap
)在第二過程中,我得到一個EINVAL
錯誤。
我找到了this pdf,它討論了在v4l2(非官方)中實現多圖的問題,並且想知道這是否實現。我也嘗試過使用用戶指針流I/O方法,其中的文檔明確指出可以在此方法中實現共享內存,但當我請求緩衝區時,我得到一個EINVAL
(根據linuxtv.org
中的文檔,這意味着相機不支持用戶指針流式I/O)。
注:我想保持代碼模塊化,因此有兩個過程。如果這是不可能的,則在單個進程中完成所有工作(多線程&全局幀緩衝區)仍然是可能的。 使用標準共享內存函數調用是不可能的,因爲這兩個進程必須映射到視頻設備文件(/dev/video0
),我不能在/dev/shm
之下。