#include "Hd_VirtualCamera.h" #include QQueue> queuePic; QMutex* n_mutex = new QMutex(); #include class callbackCollectTimeoutTimerClass : public QThread { public: void run() { runFlag = true; counter = 0; while (runFlag && counter < interval) { QThread::msleep(ontTimeSleepInterval); counter += ontTimeSleepInterval; } if (counter >= interval) timeoutAction(); } void timeoutAction() { QMutexLocker locker(n_mutex); if (queuePic.size() > 0) { queuePic.clear(); qDebug() << "上次回调后未取图,已因超时清除缓存,interval" << interval; std::cout << "上次回调后未取图,已因超时清除缓存,interval" << interval << std::endl; } } void setInterval(int msec) { interval = msec; } void stop() { runFlag = false; } private: int counter = 0; std::atomic runFlag = false; std::atomic interval = 1500; int ontTimeSleepInterval = 10; }; callbackCollectTimeoutTimerClass callbackCollectTimeoutTimer; Hd_VirtualCamera::Hd_VirtualCamera() { } Hd_VirtualCamera::~Hd_VirtualCamera() { if (n_mutex) { delete n_mutex; n_mutex = nullptr; } qDebug() << "[info]" << __FUNCTION__ << "line:" << __LINE__ << " delete success!"; } bool Hd_VirtualCamera::readData(std::vector& mat, QByteArray& data) { Q_UNUSED(data) int cnt = 0; while (queuePic.empty()) { cnt++; QThread::msleep(10); if (cnt > 3000) { qCritical() << " [ error] " << __FUNCTION__ << " line:" << __LINE__ << " srcImage is null"; return false; } } callbackCollectTimeoutTimer.stop(); n_mutex->lock(); vector dstMat = queuePic.dequeue(); n_mutex->unlock(); //for (int i=0;i& mat, QByteArray& data) { Q_UNUSED(mat) cameraName = data.toStdString(); return true; } bool Hd_VirtualCamera::initParas(QByteArray&n) { return true; } bool Hd_VirtualCamera::run()//����� { callbackCollectTimeoutTimer.start(); QThread::msleep(1000); n_mutex->lock(); if (cameraName == "25D-1" || cameraName == "25D-2") { vector mats; mats.push_back(cv::imread("I:\\952Code\\CODES\\16H\\A2250709-162941554918413\\A2250709-1629415549184132.5D-H-2_16-31-32-65_Count0.bmp", -1)); mats.push_back(cv::imread("I:\\952Code\\CODES\\16H\\A2250709-162941554918413\\A2250709-1629415549184132.5D-H-2_16-31-32-65_Count1.bmp", -1)); mats.push_back(cv::imread("I:\\952Code\\CODES\\16H\\A2250709-162941554918413\\A2250709-1629415549184132.5D-H-2_16-31-32-65_Count2.bmp", -1)); queuePic.enqueue(mats); } else { vector mats; mats.push_back(cv::Mat(2096,4800,CV_8UC3,cv::Scalar(0,0,0))); queuePic.enqueue(mats); } n_mutex->unlock(); return true; } Hd_VirtualCamera* create(){ qDebug() << "[info]" << __FUNCTION__ << "line:" << __LINE__ << "Hd_VirtualCamera create success!"; return new Hd_VirtualCamera; } void destory(Hd_VirtualCamera* ptr){ if (ptr) { delete ptr; ptr = nullptr; } qDebug() << "[info] " << __FUNCTION__ << " line:" << __LINE__ << "Hd_MvCamera_module destory success!"; }