#ifndef CAMERACONTROLLER_H #define CAMERACONTROLLER_H #include #include #include #include #include #include #include #include #include class backEndController; class camera : public QThread { public: QString cameraName; camera(cameraModule cameraModulePtrIn) { cameraModulePtr=cameraModulePtrIn; cameraName = cameraModulePtr.key; this->start(); } void run() { std::vectorcamera_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& 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; QQueueimgQueue; bool runFlag = true; }; class cameraController { public: void init(backEndController*); ~cameraController(); std::unordered_mapcameras;//key 相机名 private: bool loadModule(QString keyName, QString moduleName, QByteArray initByte); backEndController* _backEndController; std::vectorcamerasVec;//用于初始化和销毁 std::vector vec_mat;//没啥用,一直保持为空就好 QList lib_list; }; #endif