videoinput设备在唤醒其他线程时断开连接

问题描述 投票:-1回答:1

我正在使用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位。

c++ multithreading video-capture
1个回答
0
投票

我通过将videoInput cap更改为指针并在构造函数中为其指定videoInput对象来解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.