【发布时间】:2015-11-20 15:54:42
【问题描述】:
我正在尝试在两个进程之间共享从 USB 摄像头 (logitech c270) 接收到的帧(图像),以便避免memcpy。我正在使用here 描述的内存映射流式I/O 方法,并且在使用v4l2_mmap 后,我可以成功地从相机获取帧。但是,我有另一个进程(用于图像处理),它必须在出队后使用图像缓冲区,并通知第一个进程再次将缓冲区排队。
在线搜索,我发现允许多次打开视频设备,但是当我在成功v4l2_open 后的第二个过程中尝试映射(尝试了v4l2_mmap 和只是mmap)时,我得到了EINVAL 错误。
我发现this pdf 谈到了在 v4l2(非官方)中实现多地图,并且想知道这是否已实现。我也尝试过使用用户指针流式 I/O 方法,其文档明确指出可以在此方法中实现共享内存,但是当我请求缓冲区时,我得到了 EINVAL(根据 @987654330 中的文档@ 这意味着相机不支持用户指针流式 I/O)。
注意:我想保持代码模块化,因此需要两个进程。如果这是不可能的,在单个进程(多线程和全局帧缓冲区)中完成所有工作仍然是可能的。
使用标准共享内存函数调用是不可能的,因为这两个进程必须映射到视频设备文件(/dev/video0),我不能在/dev/shm 下拥有它。
【问题讨论】: