GrabBag/SDK/Galaxy/test/GalaxyCamera.h
2025-12-10 00:01:32 +08:00

89 lines
3.3 KiB
C++
Raw 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.

#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); // 转换像素格式
};