我试图在两个进程之间共享从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
之下。