77 lines
1.7 KiB
C++
77 lines
1.7 KiB
C++
#ifndef CAMERACONTROLLER_H
|
|
#define CAMERACONTROLLER_H
|
|
#include <QString>
|
|
#include <backStruct.h>
|
|
#include <unordered_map>
|
|
#include <qlibrary.h>
|
|
#include <opencv.hpp>
|
|
#include <unordered_map>
|
|
#include <qqueue.h>
|
|
#include <qthread.h>
|
|
#include <qdebug.h>
|
|
|
|
class backEndController;
|
|
class camera : public QThread
|
|
{
|
|
public:
|
|
QString cameraName;
|
|
camera(cameraModule cameraModulePtrIn)
|
|
{
|
|
cameraModulePtr=cameraModulePtrIn;
|
|
cameraName = cameraModulePtr.key;
|
|
this->start();
|
|
}
|
|
void run()
|
|
{
|
|
std::vector<cv::Mat>camera_mat;
|
|
while (runFlag)
|
|
{
|
|
getCameraImg(camera_mat);
|
|
if (camera_mat.size() > 0)
|
|
{
|
|
for (auto img : camera_mat)
|
|
imgQueue.enqueue(img);
|
|
}
|
|
QThread::msleep(100);
|
|
}
|
|
}
|
|
|
|
void getCameraImg(std::vector<cv::Mat>& mats)
|
|
{
|
|
QByteArray task_name;
|
|
if (!cameraModulePtr.module_ptr->sendData(mats, task_name))
|
|
qCritical() << "[Error] " << " camera_mat is error! ";
|
|
qDebug() << __FUNCTION__ << " line:" << __LINE__ << "camera_mat size:" << mats.size();
|
|
}
|
|
bool trigger()
|
|
{
|
|
if (!cameraModulePtr.module_ptr->run())
|
|
{
|
|
qCritical() << "[Error] " << " m_name:" << cameraName << " run failed!";
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
void getImgQueueSize();
|
|
private:
|
|
cameraModule cameraModulePtr;
|
|
QQueue<cv::Mat>imgQueue;
|
|
|
|
bool runFlag = true;
|
|
};
|
|
class cameraController
|
|
{
|
|
public:
|
|
void init(backEndController*);
|
|
~cameraController();
|
|
std::unordered_map<QString, camera*>cameras;//key 相机名
|
|
private:
|
|
bool loadModule(QString keyName, QString moduleName, QByteArray initByte);
|
|
backEndController* _backEndController;
|
|
|
|
std::vector<cameraModule>camerasVec;//用于初始化和销毁
|
|
std::vector<cv::Mat> vec_mat;//没啥用,一直保持为空就好
|
|
QList<QLibrary*> lib_list;
|
|
};
|
|
|
|
#endif |