VIDIOC_DQBUF挂起相机断开连接

时间:2017-07-14 00:40:19

标签: c++ multithreading v4l2

我的应用程序正在使用在单独的线程中运行的v4l2。如果摄像机断开连接,则在彻底终止线程之前给予用户适当的消息。这适用于绝大多数情况。但是,如果在摄像机断开连接时执行在VIDIOC_DQBUF ioctl内,则ioctl不会返回,导致整个线程锁定。

我的系统如下:

  • Linux内核:4.12.0
  • 操作系统:Fedora 25
  • 编译器:gcc-7.1

以下是问题功能的简化示例。

test

任何人都可以解释为什么这个ioctl锁定以及我可以做些什么来解决这个问题?

感谢您提供的任何帮助。

阿曼达

1 个答案:

答案 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);

祝你好运!