#ifndef cammer_H #define cammer_H #include #include #include #include "IMVApi.h" #include "MessageQue.h" #include #include // 状态栏统计信息 // Status bar statistics struct FrameStatInfo { quint32 m_nFrameSize; // 帧大小, 单位: 字节 | frame size ,length :byte qint64 m_nPassTime; // 接收到该帧时经过的纳秒数 | The number of nanoseconds passed when the frame was received FrameStatInfo(int nSize, qint64 nTime) : m_nFrameSize(nSize), m_nPassTime(nTime) { } }; // 帧信息 // frame imformation class CFrameInfo { public: CFrameInfo() { m_pImageBuf = NULL; m_nBufferSize = 0; m_nWidth = 0; m_nHeight = 0; m_ePixelType = gvspPixelMono8; m_nPaddingX = 0; m_nPaddingY = 0; m_nTimeStamp = 0; } ~CFrameInfo() { } public: unsigned char* m_pImageBuf; int m_nBufferSize; int m_nWidth; int m_nHeight; IMV_EPixelType m_ePixelType; int m_nPaddingX; int m_nPaddingY; uint64_t m_nTimeStamp; }; namespace Ui { class cammer; } class cammer : public QWidget { Q_OBJECT public: explicit cammer(QWidget *parent = 0); ~cammer(); // 枚举触发方式 // Enumeration trigger mode enum ETrigType { trigContinous = 0, // 连续拉流 | continue grabbing trigSoftware = 1, // 软件触发 | software trigger trigLine = 2, // 外部触发 | external trigger }; // void setxiangsu(IMV_Frame frame); bool diaoyong(); // 打开相机 // open cmaera bool CameraOpen(void); // 关闭相机 // close camera bool CameraClose(void); // 开始采集 // start grabbing bool CameraStart(void); // 停止采集 // stop grabbing bool CameraStop(void); // 切换采集方式、触发方式 (连续采集、外部触发、软件触发) // Switch acquisition mode and triggering mode (continuous acquisition, external triggering and software triggering) bool CameraChangeTrig(ETrigType trigType = trigContinous); // 执行一次软触发 // Execute a soft trigger bool ExecuteSoftTrig(void); // 设置曝光 // set exposuse time bool SetExposeTime(double dExposureTime); bool SetExpose(); // 设置增益 // set gain bool SetAdjustPlus(double dGainRaw); // 设置当前相机 // set current camera void SetCamera(const QString& strKey); // 状态栏统计信息 // Status bar statistics void recvNewFrame(quint32 frameSize); void resetStatistic(); QString getStatistic(); void updateStatistic(); void display(); bool SaveImageToFile(IMV_Frame* pFrame, IMV_ESaveFileType saveFormat); private: // 设置显示频率,默认一秒钟显示30帧 // Set the display frequency to display 30 frames in one second by default void setDisplayFPS(int nFPS); // 计算该帧是否显示 // Calculate whether the frame is displayed bool isTimeToDisplay(); // 窗口关闭响应函数 // Window close response function void closeEvent(QCloseEvent * event); private slots: // 显示一帧图像 // display a frame image bool ShowImage(unsigned char* pRgbFrameBuf, int nWidth, int nHeight, uint64_t nPixelFormat); signals: // 显示图像的信号,在displayThread中发送该信号,在主线程中显示 // Display the signal of the image, send the signal in displaythread, and display it in the main thread bool signalShowImage(unsigned char* pRgbFrameBuf, int nWidth, int nHeight, uint64_t nPixelFormat); void xinhao(QString p); public: TMessageQue m_qDisplayFrameQueue; // 显示队列 | diaplay queue bool diaoyong2(); // IMV_API int IMV_CALL IMV_GetFrame(IN IMV_HANDLE handle, OUT IMV_Frame* // pFrame, // IN unsigned int timeoutMS); void zhuapai(); void tingzhuapai(); void setxijun(); void setmic(); private: Ui::cammer *ui; QString m_currentCameraKey; // 当前相机key | current camera key IMV_HANDLE handle; // 相机句柄 | camera handle // 控制显示帧率 | Control display frame rate QMutex m_mxTime; int m_nDisplayInterval; // 显示间隔 | diaplay time internal uint64_t m_nFirstFrameTime; // 第一帧的时间戳 | Time stamp of the first frame uint64_t m_nLastFrameTime; // 上一帧的时间戳 | Timestamp of previous frame QElapsedTimer m_elapsedTimer; // 用来计时,控制显示帧率 | Used to time and control the display frame rate // 状态栏统计信息 // Status bar statistics typedef std::list FrameList; FrameList m_listFrameStatInfo; QMutex m_mxStatistic; quint64 m_nTotalFrameCount; // 收到的总帧数 | recieve all frames QString m_strStatistic; // 统计信息, 不包括错误 | Statistics, excluding errors bool m_bNeedUpdate; bool m_isExitDisplayThread; HANDLE m_threadHandle; }; #endif // cammer_H