我的应用程序正在使用在单独的线程中运行的v4l2。如果摄像机断开连接,则在彻底终止线程之前给予用户适当的消息。这适用于绝大多数情况。但是,如果在摄像机断开连接时执行在VIDIOC_DQBUF ioctl内,则ioctl不会返回,导致整个线程锁定。
我的系统如下:
以下是问题功能的简化示例。
test
任何人都可以解释为什么这个ioctl锁定以及我可以做些什么来解决这个问题?
感谢您提供的任何帮助。
阿曼达
答案 0 :(得分:0)
我目前遇到同样的问题。但是,我的整个线程都没有锁定。 ioctl超时(15s)但这太长了。
如果视频流式传输,是否有查询V4L2(不会挂起)的内容?或者至少改变ioctl超时?
更新:
@Amanda你可以在v4l2_capture驱动源和&中更改出队的超时。重建内核/内核模块 修改dqueue函数中的超时:
DateTime dt = DateTime.Parse(trans.Date.ToString("yyyy/MM/dd HH:mm:ss"), CultureInfo.InvariantCulture);
祝你好运!