gpt4 book ai didi

linux - v4l2 是否支持多 map ?

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:18 25 4
gpt4 key购买 nike

我正在尝试在两个进程之间共享从 USB 摄像头 (logitech c270) 接收到的帧(图像),这样我就可以避免 memcpy。我正在使用描述的内存映射流式 I/O 方法 here在使用 v4l2_mmap 后,我可以成功地从相机获取帧。但是,我有另一个进程(用于图像处理),它必须在出队后使用图像缓冲区并向第一个进程发出信号以再次对缓冲区进行排队。

在线搜索,我发现允许多次打开视频设备,但是当我尝试映射时(同时尝试了 v4l2_mmapmmap) v4l2_open 成功后,我收到一个 EINVAL 错误。

我找到了 this pdf 讨论了在 v4l2 中实现多 map (非官方),想知道这是否已实现。我也尝试过使用用户指针流式 I/O 方法,该方法的文档明确指出可以在此方法中实现共享内存,但是当我请求缓冲区时我得到一个 EINVAL(根据linuxtv.org 中的文档,这意味着相机不支持用户指针流式 I/O)。

注意:我想保持代码模块化,因此有两个过程。如果这不可能,在单个进程(多线程和全局帧缓冲区)中完成所有工作仍然是可能的。使用标准共享内存函数调用是不可能的,因为这两个进程必须映射到视频设备文件 (/dev/video0) 而我不能在 /dev/shm.

最佳答案

multi-consumer mmap 的主要问题是这需要在设备驱动端实现。也就是说:即使某些设备可能支持多 map ,但其他设备可能不支持。

因此,除非您可以控制与您的应用程序一起使用的相机,否则您最终会遇到无法控制的相机,在这种情况下,您的应用程序将无法运行。

因此无论如何,您的应用程序都应该提供处理非多 map 设备的方法。

顺便说一句,您不需要多个进程来保持您的代码模块化。多个进程各有优点(例如权限分离、崩溃恢复能力……),但也可能鼓励代码重复……

关于linux - v4l2 是否支持多 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33830865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com