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