89 lines
3.3 KiB
C++
89 lines
3.3 KiB
C++
#pragma once
|
||
#include "ICamera.h"
|
||
#include "GalaxyIncludes.h"
|
||
#include <mutex>
|
||
#include <atomic>
|
||
#include <string>
|
||
|
||
// 大恒相机实现类
|
||
class GalaxyCamera : public ICamera {
|
||
public:
|
||
GalaxyCamera();
|
||
~GalaxyCamera() override;
|
||
|
||
// ICamera 接口实现
|
||
bool Init(const std::string& sdkPath) override;
|
||
std::vector<DeviceInfo> Discover() override;
|
||
bool Open(const std::string& deviceID) override;
|
||
void Close() override;
|
||
bool SetROI(int x, int y, int w, int h) override;
|
||
|
||
// 连续采集模式(视频流)
|
||
|
||
bool StartStreaming(FrameCallback callback) override;
|
||
void StopStreaming() override;
|
||
bool IsStreaming() const override;
|
||
bool GrabCurrentFrame(ImageBuffer& out) override;
|
||
|
||
// 单帧采集模式(触发模式)
|
||
bool Capture(ImageBuffer& out) override;
|
||
|
||
bool GetIntValue(const std::string& name, int& value) override;
|
||
bool SetIntValue(const std::string& name, int value) override;
|
||
bool GetFloatValue(const std::string& name, float& value) override;
|
||
bool SetFloatValue(const std::string& name, float value) override;
|
||
bool IsConnected() override;
|
||
CameraBrand GetBrand() const override { return CameraBrand::Galaxy; }
|
||
void Cleanup() override;
|
||
|
||
// 静态函数:全局SDK清理(程序退出时调用)
|
||
static void UninitSDK();
|
||
|
||
private:
|
||
//---------------------------------------------------------------------------------
|
||
/**
|
||
\brief 用户继承采集事件处理类
|
||
*/
|
||
//----------------------------------------------------------------------------------
|
||
class CaptureEventHandler : public ICaptureEventHandler {
|
||
public:
|
||
CaptureEventHandler(GalaxyCamera* pCamera) : m_pCamera(pCamera) {}
|
||
|
||
void DoOnImageCaptured(CImageDataPointer& objImageDataPointer, void* pUserParam) override;
|
||
|
||
private:
|
||
GalaxyCamera* m_pCamera;
|
||
};
|
||
|
||
// SDK对象
|
||
CGXDevicePointer m_objDevicePtr; // 设备句柄
|
||
CGXStreamPointer m_objStreamPtr; // 流对象
|
||
CGXFeatureControlPointer m_objFeatureControlPtr; // 远程属性控制器
|
||
CGXFeatureControlPointer m_objStreamFeatureControlPtr; // 流层控制器
|
||
|
||
// 采集回调处理
|
||
CaptureEventHandler* m_pCaptureEventHandler;
|
||
|
||
// 设备信息缓存
|
||
GxIAPICPP::gxdeviceinfo_vector m_vectorDeviceInfo;
|
||
|
||
// 状态标志
|
||
bool m_bIsOpen; // 设备是否打开
|
||
std::atomic<bool> m_bIsStreaming; // 是否正在流模式
|
||
std::atomic<bool> m_bHasNewFrame; // 是否有新帧
|
||
|
||
// 帧数据相关
|
||
mutable std::mutex m_frameMutex; // 帧数据互斥锁
|
||
FrameCallback m_frameCallback; // 帧回调函数
|
||
ImageBufferPtr m_latestFramePtr; // 最新帧缓存
|
||
|
||
// SDK全局状态(静态成员)
|
||
static bool s_sdkInitialized; // SDK是否已初始化
|
||
static int s_instanceCount; // 实例计数
|
||
static std::mutex s_sdkMutex; // SDK操作互斥锁
|
||
|
||
// 辅助函数
|
||
void processFrame(CImageDataPointer& objImageDataPointer); // 处理采集到的帧
|
||
PixelFormat convertPixelFormat(GX_PIXEL_FORMAT_ENTRY gxFormat); // 转换像素格式
|
||
};
|