CameraGrabber/camhandler.h

83 lines
2.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 CAMHANDLER_H
#define CAMHANDLER_H
#include <QDebug>
#include <QImage> // 用于在信号中传输图像数据
#include <QObject>
#include <QString>
#include <QTimer> // 用于驱动采集循环
// eBUS SDK 核心头文件
#include <QThreadPool> // 需要包含 QThreadPool
#include "savetask.h"
#include <PvBuffer.h>
#include <PvDevice.h>
#include <PvDeviceU3V.h>
#include <PvGenCommand.h>
#include <PvGenParameter.h>
#include <PvGenParameterArray.h>
#include <PvImage.h>
#include <PvStream.h>
#include <PvStreamU3V.h>
#include <PvSystem.h>
// 用于流缓冲区数量的定义 (参考例程)
#define BUFFER_COUNT 16
class CamHandler : public QObject
{
Q_OBJECT
public:
explicit CamHandler(const QString &name,QObject *parent = nullptr);
~CamHandler();
// 公有接口:连接/断开/发现
// 注意:已移除 static 关键字,以便使用成员变量 mSystem 进行设备发现
QList<QString> listAvailableDevices();
bool connectToDevice(const QString &aConnectionID);
void disconnectDevice();
// 公有接口:采集控制
void startAcquisition();
void stopAcquisition();
bool state;
bool saveFlag;
QString camName;
// ------------------- 信号 (Signals) -------------------
signals:
void imageReady(const QImage &image); // 发送采集到的图像数据
void logMsg(const QString &msg);
// ------------------- 槽 (Slots) -------------------
public slots:
void onAcquireTimerTimeout(); // 驱动图像采集循环的槽
private:
// eBUS SDK 对象
PvDevice *mDevice;
PvStream *mStream;
// 关键修正PvSystem 实例作为成员变量,其生命周期与 CamHandler 相同
PvSystem mSystem;
// mDeviceInfo 指针,指向 mSystem 内部的有效数据
const PvDeviceInfo *mDeviceInfo;
// 计时和帧控制
QTimer mAcquireTimer;
// 内部帮助函数
const PvDeviceInfo *selectDevice(const QString &aConnectionID);
bool openStream();
void createStreamBuffers();
// 图像采集和转换函数
// 简化onAcquireTimerTimeout 中直接调用 RetrieveBuffer
// bool acquireSingleBuffer(PvBuffer **aBuffer, PvResult *aOperationResult);
QImage convertPvBufferToQImage(PvBuffer *aBuffer);
};
#endif // CAMHANDLER_H