#pragma once #include "ICamera.h" #include "GalaxyIncludes.h" #include #include #include // 大恒相机实现类 class GalaxyCamera : public ICamera { public: GalaxyCamera(); ~GalaxyCamera() override; // ICamera 接口实现 bool Init(const std::string& sdkPath) override; std::vector 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 m_bIsStreaming; // 是否正在流模式 std::atomic 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); // 转换像素格式 };