83 lines
2.2 KiB
C++
83 lines
2.2 KiB
C++
#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
|