GrabBag/SDK/Device/Galaxy/test/GalaxyCamera.h

89 lines
3.3 KiB
C
Raw Permalink Normal View History

2025-12-10 00:01:32 +08:00
#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); // 转换像素格式
};