GrabBag/Device/HikDevice/Inc/IHikDevice.h

203 lines
5.8 KiB
C
Raw Normal View History

#ifndef IHIKDEVICE_H
#define IHIKDEVICE_H
#include <functional>
#include <string>
#include <vector>
// 海康相机配置结构体
struct HikDeviceConfig
{
std::string name; // 相机名称
std::string ip; // IP地址
int port = 8000; // 端口号
std::string username; // 用户名
std::string password; // 密码
int channelNo = 1; // 通道号
int streamType = 0; // 码流类型 0-主码流 1-子码流
bool enabled = true; // 是否启用
};
// 海康相机工作状态
enum class EHikDeviceStatus
{
Disconnected = 0, // 断开连接
Connected, // 已连接
Previewing, // 正在预览
Reconnecting, // 重连中
Error // 错误状态
};
// 海康异常类型
enum class EHikExceptionType
{
None = 0,
Reconnect, // 预览时重连
PreviewException, // 预览异常
SerialException, // 透明通道异常
AlarmReconnect, // 报警重连
ExchangeException // 用户交换异常
};
// 解码帧信息
struct HikFrameInfo
{
int width = 0; // 图像宽度
int height = 0; // 图像高度
int frameType = 0; // 帧类型
long long timestamp = 0; // 时间戳
};
// 解码后的帧数据回调
// 参数: pRGBData-RGB数据, dataSize-数据大小, frameInfo-帧信息, pUser-用户数据
using HikDecodedFrameCallback = std::function<void(unsigned char* pRGBData, int dataSize,
const HikFrameInfo& frameInfo, void* pUser)>;
// 设备状态回调
// 参数: status-设备状态, pUser-用户数据
using HikDeviceStatusCallback = std::function<void(EHikDeviceStatus status, void* pUser)>;
// 异常回调
// 参数: exceptionType-异常类型, pUser-用户数据
using HikExceptionCallback = std::function<void(EHikExceptionType exceptionType, void* pUser)>;
/**
* @brief
*
* HCNetSDK和PlayM4解码库
*/
class IHikDevice
{
public:
virtual ~IHikDevice() = default;
/**
* @brief
* @param ppDevice
* @return 0:, :
*/
static int CreateObject(IHikDevice** ppDevice);
/**
* @brief SDK
* @return 0:, :
*/
virtual int InitSDK() = 0;
/**
* @brief SDK
*/
virtual void CleanupSDK() = 0;
/**
* @brief
* @param config
* @return 0:, :
*/
virtual int Login(const HikDeviceConfig& config) = 0;
/**
* @brief
*/
virtual void Logout() = 0;
/**
* @brief
* @return true:, false:
*/
virtual bool IsLoggedIn() const = 0;
/**
* @brief
* @return 0:, :
*/
virtual int StartPreview() = 0;
/**
* @brief
* @param hWnd 使nullptr则使用软解码回调
* @return 0:, :
*/
virtual int StartPreviewEx(void* hWnd) = 0;
/**
* @brief
*/
virtual void StopPreview() = 0;
/**
* @brief
* @return true:, false:
*/
virtual bool IsPreviewing() const = 0;
/**
* @brief
* @return
*/
virtual EHikDeviceStatus GetStatus() const = 0;
/**
* @brief
* @param callback
* @param pUser
*/
virtual void SetDecodedFrameCallback(HikDecodedFrameCallback callback, void* pUser) = 0;
/**
* @brief
* @param callback
* @param pUser
*/
virtual void SetStatusCallback(HikDeviceStatusCallback callback, void* pUser) = 0;
/**
* @brief
* @param callback
* @param pUser
*/
virtual void SetExceptionCallback(HikExceptionCallback callback, void* pUser) = 0;
/**
* @brief RGB数据
* @param pBuffer ()
* @param bufferSize
* @param frameInfo ()
* @return , -1
*/
virtual int GetCurrentFrame(unsigned char* pBuffer, int bufferSize, HikFrameInfo& frameInfo) = 0;
/**
* @brief
* @return
*/
virtual const HikDeviceConfig& GetConfig() const = 0;
/**
* @brief
* @param filePath
* @param isJpeg true:JPEG格式, false:BMP格式
* @return 0:, :
*/
virtual int CaptureToFile(const std::string& filePath, bool isJpeg = true) = 0;
/**
* @brief
* @param command
* @param stop true:, false:
* @param speed (1-7)
* @return 0:, :
*/
virtual int PTZControl(int command, bool stop, int speed = 4) = 0;
/**
* @brief OSD显示
* @param showChanName
* @param showOsd OSD()
* @return 0:, :
*/
virtual int ConfigureOSD(bool showChanName, bool showOsd) = 0;
};
#endif // IHIKDEVICE_H