视频在唤醒其他线程时输入设备断开连接
videoInput device disconnection on waking up other thread
我正在使用videoInput库来跟踪使用多个摄像机的设备位置的应用程序。使用它,我可以完美地从输入图像中提取点,但是一旦我将代码移动到多个线程,它就停止工作了。
每当主线程通过条件变量被视频捕获线程唤醒时,运行视频捕获线程的对象的成员对象似乎被解构,即使在唤醒另一个线程的过程中引用也没有丢失。
主线程创建捕获线程并处理通过矢量传递的帧。这是在主线程中发生的初始化:
videoInput::setComMultiThreaded(true);
videoInput::listDevices(true);
在捕获线程中,对成员对象执行以下代码videoInput cap
cap.setupDevice(deviceId, width, height);
cap.setAutoReconnectOnFreeze(deviceId, true, 1);
然后在循环中执行以下代码。
unsigned char* frame = new unsigned char[width * height * 3]();
cap.isFrameNew(capId);
cap.getPixels(capId, frame, false, true);
它按预期工作,但是一旦数据传递到主线程,主线程就会收到数据通知并被条件变量唤醒,设备断开连接(仅在 videoInput 对象解构器中发生(,导致循环的下一次迭代出现异常。我将最新的源代码编译成 x64 静态库。
我绝对需要应用程序是多线程的。我是否缺少一些重要的东西来完成这项工作,或者我只是遇到了这个库的一些限制,需要使用其他东西/制作我自己的 DirectShow 包装器?
我之前已经尝试过OpenCV,但它对我不起作用(许多问题,太多无法命名和太多愚蠢的解决方法(。我不需要这个应用程序是跨平台的,我只针对 Windows 64 位。
我通过将videoInput cap
更改为指针并在构造函数中为其分配 videoInput 对象来解决此问题。
相关文章:
- 视频在唤醒其他线程时输入设备断开连接
- 如何选择waveIn/waveOut函数C++使用的输入/输出设备
- 在Windows10上为BLEGATT设备开发HID输入设备驱动程序
- 树莓派上的端口音频,找不到输入流的设备
- 如何从Qt绑定到在Windows 7 / 8 / 10中连接/断开USB设备事件
- 如何在 Windows 进程回调中断开连接时获取设备信息(硬件 ID)
- 使用鼠标作为输入设备 c++
- 创建没有HWND输入参数到MSFT createVice()函数的D3D设备
- 即使循环断开(在命令行)中,读取输入序列也是如此
- 具有输入无符号字符缓冲区C++的设备 IoControl
- 获取 Linux 输入设备
- 音频设备输入名称被截断
- Windows,在显示之前过滤鼠标设备输入?对入门有一些疑问
- 如何在Windows 8.1上断开蓝牙LE设备
- 如何在Qt中混合音频输入设备
- Windows中的麦克风列表(输入设备列表)
- 虚幻引擎4创建自定义输入设备插件
- 使用WM_INPUT_DEVICE_CHANGE检测输入设备移除
- 如何在直接显示中选择音频输入设备并捕获音频
- 选择特定的USB键盘输入设备