Files
eUi/subModule/Hd_VirtualCamera/Hd_VirtualCamera.cpp
T

132 lines
3.3 KiB
C++
Raw Normal View History

2026-04-26 12:25:13 +08:00
#include "Hd_VirtualCamera.h"
2025-06-15 03:06:01 +08:00
#include <QDebug>
QQueue<vector<cv::Mat>> queuePic;
QMutex* n_mutex = new QMutex();
2026-04-26 12:25:13 +08:00
#include <qtimer.h>
2025-06-15 03:06:01 +08:00
2026-04-26 12:25:13 +08:00
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<bool> runFlag = false;
std::atomic<int> interval = 1500;
int ontTimeSleepInterval = 10;
};
callbackCollectTimeoutTimerClass callbackCollectTimeoutTimer;
2025-09-08 11:18:39 +08:00
Hd_VirtualCamera::Hd_VirtualCamera()
2025-06-15 03:06:01 +08:00
{
2026-04-26 12:25:13 +08:00
2025-06-15 03:06:01 +08:00
}
2025-09-08 11:18:39 +08:00
Hd_VirtualCamera::~Hd_VirtualCamera()
2025-06-15 03:06:01 +08:00
{
if (n_mutex)
{
delete n_mutex;
n_mutex = nullptr;
}
qDebug() << "[info]" << __FUNCTION__ << "line:" << __LINE__ << " delete success!";
}
2025-09-08 11:18:39 +08:00
bool Hd_VirtualCamera::readData(std::vector<cv::Mat>& mat, QByteArray& data)
2025-06-15 03:06:01 +08:00
{
Q_UNUSED(data)
2026-04-26 12:25:13 +08:00
int cnt = 0;
2025-06-15 03:06:01 +08:00
while (queuePic.empty())
{
cnt++;
QThread::msleep(10);
if (cnt > 3000)
{
qCritical() << " [ error] " << __FUNCTION__ << " line:" << __LINE__ << " srcImage is null";
return false;
}
}
2026-04-26 12:25:13 +08:00
callbackCollectTimeoutTimer.stop();
2025-06-15 03:06:01 +08:00
n_mutex->lock();
vector<cv::Mat> dstMat = queuePic.dequeue();
n_mutex->unlock();
//for (int i=0;i<dstMat.size();i++)
// imwrite("D://CCD//2.5//2.5D_" + to_string(clock()) + "_"+ sImageType [i] + ".bmp", dstMat[i]);
2025-11-16 19:29:29 +08:00
mat.insert(mat.end(), dstMat.begin(), dstMat.end());
2025-06-15 03:06:01 +08:00
qCritical() << " [ error] " << __FUNCTION__ << " line:" << __LINE__ << "get image";
return true;
}
2025-09-08 11:18:39 +08:00
bool Hd_VirtualCamera::writeData(std::vector<cv::Mat>& mat, QByteArray& data)
2025-06-15 03:06:01 +08:00
{
Q_UNUSED(mat)
cameraName = data.toStdString();
return true;
}
2025-09-08 11:18:39 +08:00
bool Hd_VirtualCamera::initParas(QByteArray&n)
2025-06-15 03:06:01 +08:00
{
return true;
}
2025-09-08 11:18:39 +08:00
bool Hd_VirtualCamera::run()//�����
2025-06-15 03:06:01 +08:00
{
2026-04-26 12:25:13 +08:00
callbackCollectTimeoutTimer.start();
2025-08-15 16:36:54 +08:00
QThread::msleep(1000);
2025-06-15 03:06:01 +08:00
n_mutex->lock();
2025-07-11 02:02:09 +08:00
if (cameraName == "25D-1" || cameraName == "25D-2") {
2025-06-15 03:06:01 +08:00
vector<cv::Mat> mats;
2025-07-25 00:29:52 +08:00
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<cv::Mat> mats;
2026-01-21 09:41:31 +08:00
mats.push_back(cv::Mat(2096,4800,CV_8UC3,cv::Scalar(0,0,0)));
2025-06-15 03:06:01 +08:00
queuePic.enqueue(mats);
}
n_mutex->unlock();
return true;
}
2025-09-08 11:18:39 +08:00
Hd_VirtualCamera* create(){
qDebug() << "[info]" << __FUNCTION__ << "line:" << __LINE__ << "Hd_VirtualCamera create success!";
return new Hd_VirtualCamera;
2025-06-15 03:06:01 +08:00
}
2025-09-08 11:18:39 +08:00
void destory(Hd_VirtualCamera* ptr){
2025-06-15 03:06:01 +08:00
if (ptr)
{
delete ptr;
ptr = nullptr;
}
qDebug() << "[info] " << __FUNCTION__ << " line:" << __LINE__ << "Hd_MvCamera_module destory success!";
}