jianbin.chang常健彬 ce734d1af1 厂家提供原始代码
2025-07-17 08:39:15 +08:00

178 lines
5.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef cammer_H
#define cammer_H
#include <windows.h>
#include <process.h>
#include <QWidget>
#include "IMVApi.h"
#include "MessageQue.h"
#include <QElapsedTimer>
#include <QMutex>
// 状态栏统计信息
// 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<CFrameInfo> 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<FrameStatInfo> 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