#ifndef CAMERAOPERATIONTHREAD_H #define CAMERAOPERATIONTHREAD_H #include #include #include #include #include "ItkCamera.h" enum ITK_DEVICE_CONTROL_TYPE { /// \~chinese 探测设备 \~english Probe device ITK_DEVICE_CONTROL_PROBE = 0, /// \~chinese 打开设备 \~english Open device ITK_DEVICE_CONTROL_OPEN, /// \~chinese 关闭设备 \~english Close device ITK_DEVICE_CONTROL_CLOSE, /// \~chinese 设备抓取 \~english Device grab ITK_DEVICE_CONTROL_GRAB, /// \~chinese 停止抓取 \~english Stop grab ITK_DEVICE_CONTROL_STOP }; /// \~chinese 操作相机的子线程 \~english thread of camera operation class DeviceControlThread : public QThread { Q_OBJECT public: explicit DeviceControlThread(QObject *parent = nullptr); virtual ~DeviceControlThread(); static DeviceControlThread* instance(); void StartProbe(); void StartOpen(int nIndex); void StartClose(int nIndex); void StartGrab(int nIndex); void StartStopGrab(int nIndex); QStringList GetDeviceList() const; bool IsCamOpened() const { return mOpenedFlag > 0; } protected: void run(); bool runProbe(); bool runOpen(int nIndex); bool runClose(int nIndex); bool runGrab(int nIndex); bool runStopGrab(int nIndex); /// \~chinese 待操作的相机及操作类型 \~english The control index and type of next camera to operate QQueue> mCtrlInfo; /// \~chinese 用于保护上述操作信息的互斥锁 \~english The mutex to protect the control info QMutex mCtrlMutex; /// \~chinese 扫描到的相机列表 \~english Camera list of scan result QVector mCameras; /// \~chinese 打开的相机标志 \~endlish Flag of camera opened QAtomicInt mOpenedFlag; signals: void signalControlFinish(int nIndex, ITK_DEVICE_CONTROL_TYPE nType, bool bSuccess); QString signalSelectGrabConfig(const QString& devName); void signalImageGrabbed(const QString& devName, const QImage& img); }; #endif // CAMERAOPERATIONTHREAD_H