#pragma execution_character_set("utf-8") #include "CameraControl.h" #include CameraControl::CameraControl(QObject *parent) : QObject(parent) { qRegisterMetaType >("QVector"); } CameraControl::~CameraControl() { for each (Camera* pCamera in m_vecPCamera) { DELETE_POINTER(pCamera); } m_vecPCamera.clear(); } bool CameraControl::loadCamera(const QList& cameraInfoList) { bool flag = true; m_vecPCamera.clear(); m_mapSNIndex.clear(); for each(CameraInfo cameraInfo in cameraInfoList) { QString serialNumber = cameraInfo.serialNumber; CameraType cameraType = cameraInfo.cameraType; if (cameraType == CameraType::Hik) { Camera* pHikCamera = new HikCamera(); if (pHikCamera->initCamera(serialNumber)) { m_vecPCamera.push_back(pHikCamera); m_mapSNIndex[serialNumber] = m_vecPCamera.size() - 1; } else { qWarning() << "SerialNumber: " << serialNumber << " init failed"; flag = true; } } } return flag; } bool CameraControl::openCamera(const QStringList& serialNumberList) { bool flag = true; for each (QString serialNumber in serialNumberList) { if (!openCamera(serialNumber)) { qWarning() << "Open " << serialNumber << "failed!"; flag = false; } else { qDebug() << "Open " << serialNumber << " successed"; } } return flag; } bool CameraControl::closeCamera(const QStringList& serialNumberList) { bool flag = true; for each (QString serialNumber in serialNumberList) { if (!closeCamera(serialNumber)) { qWarning() << "Close " << serialNumber << "failed!"; flag = false; } else { qDebug() << "Close " << serialNumber << " successed"; } } return flag; } bool CameraControl::startCamera(const QStringList& serialNumberList) { bool flag = true; for each (QString serialNumber in serialNumberList) { if (!startCamera(serialNumber)) { qWarning() << "Start " << serialNumber << "failed!"; flag = false; } else { qDebug() << "Start " << serialNumber << " successed"; } } return flag; } bool CameraControl::stopCamera(const QStringList& serialNumberList) { bool flag = true; for each (QString serialNumber in serialNumberList) { if (!stopCamera(serialNumber)) { qWarning() << "Stop " << serialNumber << "failed!"; flag = false; } else { qDebug() << "Stop " << serialNumber << " successed"; } } return flag; } bool CameraControl::setSoftwareTrigger(const QStringList& serialNumberList) { bool flag = true; for each (QString serialNumber in serialNumberList) { if (!setSoftwareTrigger(serialNumber)) { qWarning() << "Set " << serialNumber << " software trigger failed!"; flag = false; } else { qDebug() << "Set " << serialNumber << " software trigger successed"; } } return flag; } Q_SLOT void CameraControl::onCapture(const QStringList& serialNumberList) { int len = serialNumberList.length(); qDebug() << "start capture, length: " << len; QVector vecImageInfo(len); for (int i = 0; i < len; ++i) { QString serialNumber = serialNumberList.at(i); vecImageInfo[i].image = capture(serialNumber); vecImageInfo[i].cameraSn = serialNumber; } emit sgCapturedImage(vecImageInfo); } bool CameraControl::openCamera(const QString& serialNumber) { QMap::iterator iter = m_mapSNIndex.find(serialNumber); if (iter == m_mapSNIndex.end()) { qWarning() << "Do not find " << serialNumber; return false; } int index = iter.value(); return m_vecPCamera[index]->openCamera(); } bool CameraControl::closeCamera(const QString& serialNumber) { QMap::iterator iter = m_mapSNIndex.find(serialNumber); if (iter == m_mapSNIndex.end()) { qWarning() << "Do not find " << serialNumber; return false; } int index = iter.value(); return m_vecPCamera[index]->closeCamera(); } bool CameraControl::startCamera(const QString& serialNumber) { QMap::iterator iter = m_mapSNIndex.find(serialNumber); if (iter == m_mapSNIndex.end()) { qWarning() << "Do not find " << serialNumber; return false; } int index = iter.value(); return m_vecPCamera[index]->startCamera(); } bool CameraControl::stopCamera(const QString& serialNumber) { QMap::iterator iter = m_mapSNIndex.find(serialNumber); if (iter == m_mapSNIndex.end()) { qWarning() << "Do not find " << serialNumber; return false; } int index = iter.value(); return m_vecPCamera[index]->stopCamera(); } bool CameraControl::setSoftwareTrigger(const QString& serialNumber) { QMap::iterator iter = m_mapSNIndex.find(serialNumber); if (iter == m_mapSNIndex.end()) { qWarning() << "Do not find " << serialNumber; return false; } int index = iter.value(); return m_vecPCamera[index]->setTriggerSource(SOFTWARE); } cv::Mat CameraControl::capture(const QString& serialNumber) { QMap::iterator iter = m_mapSNIndex.find(serialNumber); if (iter == m_mapSNIndex.end()) { qWarning() << "Do not find " << serialNumber; return cv::Mat(); } int index = iter.value(); cv::Mat imgMat; m_vecPCamera[index]->takeAPic(imgMat); if (imgMat.empty()) { qWarning() << serialNumber << " capture empty"; } return imgMat; }