
#ifndef _MV_CAMERA_PARAMS_H_
#define _MV_CAMERA_PARAMS_H_

#include "PixelType.h"

#ifndef __cplusplus
typedef char    bool;
#define true    1
#define false   0
#endif

/// \~chinese 设备类型定义    \~english Device Type Definition
#define MV_UNKNOW_DEVICE        0x00000000          ///< \~chinese 未知设备类型，保留意义       \~english Unknown Device Type, Reserved 
#define MV_GIGE_DEVICE          0x00000001          ///< \~chinese GigE设备                     \~english GigE Device
#define MV_1394_DEVICE          0x00000002          ///< \~chinese 1394-a/b 设备                \~english 1394-a/b Device
#define MV_USB_DEVICE           0x00000004          ///< \~chinese USB 设备                     \~english USB Device
#define MV_CAMERALINK_DEVICE    0x00000008          ///< \~chinese CameraLink设备               \~english CameraLink Device

/// \~chinese GigE设备信息    \~english GigE device info
typedef struct _MV_GIGE_DEVICE_INFO_
{
    unsigned int        nIpCfgOption;                  ///< [OUT] \~chinese IP配置选项                   \~english IP Configuration Options
    unsigned int        nIpCfgCurrent;                 ///< [OUT] \~chinese 当前IP配置                   \~english IP Configuration:bit31-static bit30-dhcp bit29-lla
    unsigned int        nCurrentIp;                    ///< [OUT] \~chinese 当前IP地址                   \~english Current Ip
    unsigned int        nCurrentSubNetMask;            ///< [OUT] \~chinese 当前子网掩码                 \~english Curtent Subnet Mask
    unsigned int        nDefultGateWay;                ///< [OUT] \~chinese 当前网关                     \~english Current Gateway
    unsigned char       chManufacturerName[32];        ///< [OUT] \~chinese 制造商名称                   \~english Manufacturer Name
    unsigned char       chModelName[32];               ///< [OUT] \~chinese 型号名称                     \~english Model Name
    unsigned char       chDeviceVersion[32];           ///< [OUT] \~chinese 设备版本                     \~english Device Version 
    unsigned char       chManufacturerSpecificInfo[48];///< [OUT] \~chinese 制造商的具体信息             \~english Manufacturer Specific Information
    unsigned char       chSerialNumber[16];            ///< [OUT] \~chinese 序列号                       \~english Serial Number
    unsigned char       chUserDefinedName[16];         ///< [OUT] \~chinese 用户自定义名称               \~english User Defined Name 
    unsigned int        nNetExport;                    ///< [OUT] \~chinese 网口IP地址                   \~english NetWork IP Address

    unsigned int        nReserved[4];                  ///<       \~chinese 预留                         \~english Reserved
}MV_GIGE_DEVICE_INFO;

#define INFO_MAX_BUFFER_SIZE 64                        ///<     \~chinese 最大的数据信息大小    \~english Maximum data information size

/// \~chinese USB设备信息    \~english USB device info
typedef struct _MV_USB3_DEVICE_INFO_
{
    unsigned char       CrtlInEndPoint;                             ///< [OUT] \~chinese 控制输入端点         \~english Control input endpoint
    unsigned char       CrtlOutEndPoint;                            ///< [OUT] \~chinese 控制输出端点         \~english Control output endpoint
    unsigned char       StreamEndPoint;                             ///< [OUT] \~chinese 流端点               \~english Flow endpoint
    unsigned char       EventEndPoint;                              ///< [OUT] \~chinese 事件端点             \~english Event endpoint
    unsigned short      idVendor;                                   ///< [OUT] \~chinese 供应商ID号           \~english Vendor ID Number
    unsigned short      idProduct;                                  ///< [OUT] \~chinese 产品ID号             \~english Device ID Number
    unsigned int        nDeviceNumber;                              ///< [OUT] \~chinese 设备序列号           \~english Device Serial Number
    unsigned char       chDeviceGUID[INFO_MAX_BUFFER_SIZE];         ///< [OUT] \~chinese 设备GUID号           \~english Device GUID Number
    unsigned char       chVendorName[INFO_MAX_BUFFER_SIZE];         ///< [OUT] \~chinese 供应商名字           \~english Vendor Name
    unsigned char       chModelName[INFO_MAX_BUFFER_SIZE];          ///< [OUT] \~chinese 型号名字             \~english Model Name
    unsigned char       chFamilyName[INFO_MAX_BUFFER_SIZE];         ///< [OUT] \~chinese 家族名字             \~english Family Name
    unsigned char       chDeviceVersion[INFO_MAX_BUFFER_SIZE];      ///< [OUT] \~chinese 设备版本             \~english Device Version
    unsigned char       chManufacturerName[INFO_MAX_BUFFER_SIZE];   ///< [OUT] \~chinese 制造商名字           \~english Manufacturer Name
    unsigned char       chSerialNumber[INFO_MAX_BUFFER_SIZE];       ///< [OUT] \~chinese 序列号               \~english Serial Number
    unsigned char       chUserDefinedName[INFO_MAX_BUFFER_SIZE];    ///< [OUT] \~chinese 用户自定义名字       \~english User Defined Name
    unsigned int        nbcdUSB;                                    ///< [OUT] \~chinese 支持的USB协议        \~english Support USB Protocol
    unsigned int        nDeviceAddress;                             ///< [OUT] \~chinese 设备地址             \~english Device Address

    unsigned int        nReserved[2];                               ///<       \~chinese 预留                 \~english Reserved
}MV_USB3_DEVICE_INFO;

/// \~chinese CameraLink设备信息    \~english CameraLink device info
typedef struct _MV_CamL_DEV_INFO_
{
    unsigned char       chPortID[INFO_MAX_BUFFER_SIZE];             ///< [OUT] \~chinese 端口号                       \~english Port ID
    unsigned char       chModelName[INFO_MAX_BUFFER_SIZE];          ///< [OUT] \~chinese 型号名字                     \~english Model Name
    unsigned char       chFamilyName[INFO_MAX_BUFFER_SIZE];         ///< [OUT] \~chinese 名称                         \~english Family Name
    unsigned char       chDeviceVersion[INFO_MAX_BUFFER_SIZE];      ///< [OUT] \~chinese 设备版本                     \~english Device Version
    unsigned char       chManufacturerName[INFO_MAX_BUFFER_SIZE];   ///< [OUT] \~chinese 制造商名字                   \~english Manufacturer Name
    unsigned char       chSerialNumber[INFO_MAX_BUFFER_SIZE];       ///< [OUT] \~chinese 序列号                       \~english Serial Number

    unsigned int        nReserved[38];                              ///<       \~chinese 预留                         \~english Reserved
}MV_CamL_DEV_INFO;

/// \~chinese 设备信息    \~english Device info
typedef struct _MV_CC_DEVICE_INFO_
{
    unsigned short      nMajorVer;                  ///< [OUT] \~chinese 主要版本                                 \~english Major Version
    unsigned short      nMinorVer;                  ///< [OUT] \~chinese 次要版本                                 \~english Minor Version
    unsigned int        nMacAddrHigh;               ///< [OUT] \~chinese 高MAC地址                                \~english High MAC Address
    unsigned int        nMacAddrLow;                ///< [OUT] \~chinese 低MAC地址                                \~english Low MAC Address

    unsigned int        nTLayerType;                ///< [OUT] \~chinese 设备传输层协议类型，e.g. MV_GIGE_DEVICE  \~english Device Transport Layer Protocol Type, e.g. MV_GIGE_DEVICE

    unsigned int        nReserved[4];               ///<       \~chinese 预留                                     \~english Reserved

    union
    {
        MV_GIGE_DEVICE_INFO stGigEInfo;             ///< [OUT] \~chinese GigE设备信息                             \~english GigE Device Info
        MV_USB3_DEVICE_INFO stUsb3VInfo;            ///< [OUT] \~chinese USB设备信息                              \~english USB Device Info
        MV_CamL_DEV_INFO    stCamLInfo;             ///< [OUT] \~chinese CameraLink设备信息                          \~english CameraLink Device Info
        // more ...
    }SpecialInfo;

}MV_CC_DEVICE_INFO;

#define MV_MAX_TLS_NUM          8                  ///< \~chinese 最多支持的传输层实例个数    \~english The maximum number of supported transport layer instances
#define MV_MAX_DEVICE_NUM      256                 ///< \~chinese 最大支持的设备个数          \~english The maximum number of supported devices

/// \~chinese 设备信息列表    \~english Device Information List
typedef struct _MV_CC_DEVICE_INFO_LIST_
{
    unsigned int        nDeviceNum;                         ///< [OUT] \~chinese 在线设备数量       \~english Online Device Number
    MV_CC_DEVICE_INFO*  pDeviceInfo[MV_MAX_DEVICE_NUM];     ///< [OUT] \~chinese 支持最多256个设备  \~english Support up to 256 devices

}MV_CC_DEVICE_INFO_LIST;

/// \~chinese 通过GenTL枚举到的Interface信息    \~english Interface Information with GenTL
typedef struct _MV_GENTL_IF_INFO_
{
    unsigned char       chInterfaceID[INFO_MAX_BUFFER_SIZE];	///< [OUT] \~chinese GenTL接口ID              \~english Interface ID
    unsigned char       chTLType[INFO_MAX_BUFFER_SIZE];			///< [OUT] \~chinese 传输层类型               \~english GenTL Type
    unsigned char       chDisplayName[INFO_MAX_BUFFER_SIZE];	///< [OUT] \~chinese Interface显示名称        \~english Display Name
    unsigned int        nCtiIndex;								///< [OUT] \~chinese GenTL的cti文件索引       \~english The Index of Cti Files

    unsigned int        nReserved[8];                           ///<       \~chinese 预留                     \~english Reserved
}MV_GENTL_IF_INFO;

#define MV_MAX_GENTL_IF_NUM      256                            ///<       \~chinese 最大支持的GenTL接口数量    \~english The maximum number of GenTL interface supported
/// \~chinese 通过GenTL枚举到的接口信息列表    \~english Inferface Information List with GenTL
typedef struct _MV_GENTL_IF_INFO_LIST_
{
    unsigned int        nInterfaceNum;							///< [OUT] \~chinese 在线接口数量             \~english Online Inferface Number
    MV_GENTL_IF_INFO*   pIFInfo[MV_MAX_GENTL_IF_NUM];			///< [OUT] \~chinese 支持最多256个接口        \~english Support up to 256 inferfaces

}MV_GENTL_IF_INFO_LIST;

/// \~chinese 通过GenTL枚举到的设备信息    \~english Device Information with GenTL
typedef struct _MV_GENTL_DEV_INFO_
{
    unsigned char       chInterfaceID[INFO_MAX_BUFFER_SIZE];    ///< [OUT] \~chinese GenTL接口ID              \~english Interface ID
    unsigned char       chDeviceID[INFO_MAX_BUFFER_SIZE];       ///< [OUT] \~chinese 设备ID                   \~english Device ID
    unsigned char       chVendorName[INFO_MAX_BUFFER_SIZE];     ///< [OUT] \~chinese 供应商名字               \~english Vendor Name
    unsigned char       chModelName[INFO_MAX_BUFFER_SIZE];      ///< [OUT] \~chinese 型号名字                 \~english Model Name
    unsigned char       chTLType[INFO_MAX_BUFFER_SIZE];         ///< [OUT] \~chinese 传输层类型               \~english GenTL Type
    unsigned char       chDisplayName[INFO_MAX_BUFFER_SIZE];    ///< [OUT] \~chinese 设备显示名称             \~english Display Name
    unsigned char       chUserDefinedName[INFO_MAX_BUFFER_SIZE];///< [OUT] \~chinese 用户自定义名字           \~english User Defined Name
    unsigned char       chSerialNumber[INFO_MAX_BUFFER_SIZE];   ///< [OUT] \~chinese 序列号                   \~english Serial Number
    unsigned char       chDeviceVersion[INFO_MAX_BUFFER_SIZE];  ///< [OUT] \~chinese 设备版本号               \~english Device Version
    unsigned int        nCtiIndex;								///< [OUT] \~chinese GenTL的cti文件索引       \~english The Index of Cti Files

    unsigned int        nReserved[8];                           ///<       \~chinese 预留                     \~english Reserved
}MV_GENTL_DEV_INFO;

#define MV_MAX_GENTL_DEV_NUM      256                           ///<       \~chinese 最大支持的GenTL设备数量    \~english The maximum number of GenTL devices supported
/// \~chinese 通过GenTL枚举到的设备信息列表    \~english Device Information List with GenTL
typedef struct _MV_GENTL_DEV_INFO_LIST_
{
    unsigned int        nDeviceNum;                             ///< [OUT] \~chinese 在线设备数量             \~english Online Device Number
    MV_GENTL_DEV_INFO*  pDeviceInfo[MV_MAX_GENTL_DEV_NUM];      ///< [OUT] \~chinese 支持最多256个设备        \~english Support up to 256 devices

}MV_GENTL_DEV_INFO_LIST;

/// \~chinese 设备的访问模式    \~english Device Access Mode
/// \~chinese 独占权限，其他APP只允许读CCP寄存器                        \~english Exclusive authority, other APP is only allowed to read the CCP register
#define MV_ACCESS_Exclusive                                         1
/// \~chinese 可以从5模式下抢占权限，然后以独占权限打开                 \~english You can seize the authority from the 5 mode, and then open with exclusive authority
#define MV_ACCESS_ExclusiveWithSwitch                               2
/// \~chinese 控制权限，其他APP允许读所有寄存器                         \~english Control authority, allows other APP reading all registers
#define MV_ACCESS_Control                                           3
/// \~chinese 可以从5的模式下抢占权限，然后以控制权限打开               \~english You can seize the authority from the 5 mode, and then open with control authority
#define MV_ACCESS_ControlWithSwitch                                 4
/// \~chinese 以可被抢占的控制权限打开                                  \~english Open with seized control authority
#define MV_ACCESS_ControlSwitchEnable                               5
/// \~chinese 可以从5的模式下抢占权限，然后以可被抢占的控制权限打开     \~english You can seize the authority from the 5 mode, and then open with seized control authority
#define MV_ACCESS_ControlSwitchEnableWithKey                        6
/// \~chinese 读模式打开设备，适用于控制权限下                          \~english Open with read mode and is available under control authority
#define MV_ACCESS_Monitor                                           7

/// \~chinese Chunk内容    \~english The content of ChunkData
typedef struct _MV_CHUNK_DATA_CONTENT_
{
    unsigned char*      pChunkData;          ///< [OUT] \~chinese Chunk数据                \~english Chunk Data
    unsigned int        nChunkID;            ///< [OUT] \~chinese Chunk ID                 \~english Chunk ID
    unsigned int        nChunkLen;           ///< [OUT] \~chinese Chunk的长度              \~english Chunk Length

    unsigned int        nReserved[8];        ///<       \~chinese 预留                     \~english Reserved

}MV_CHUNK_DATA_CONTENT;

/// \~chinese 输出帧的信息    \~english Output Frame Information
typedef struct _MV_FRAME_OUT_INFO_EX_
{
    unsigned short      nWidth;             ///< [OUT] \~chinese 图像宽                   \~english Image Width
    unsigned short      nHeight;            ///< [OUT] \~chinese 图像高                   \~english Image Height
    enum MvGvspPixelType     enPixelType;   ///< [OUT] \~chinese 像素格式                 \~english Pixel Type

    unsigned int        nFrameNum;          ///< [OUT] \~chinese 帧号                     \~english Frame Number
    unsigned int        nDevTimeStampHigh;  ///< [OUT] \~chinese 时间戳高32位             \~english Timestamp high 32 bits
    unsigned int        nDevTimeStampLow;   ///< [OUT] \~chinese 时间戳低32位             \~english Timestamp low 32 bits
    unsigned int        nReserved0;         ///< [OUT] \~chinese 保留，8字节对齐          \~english Reserved, 8-byte aligned
    int64_t             nHostTimeStamp;     ///< [OUT] \~chinese 主机生成的时间戳         \~english Host-generated timestamp

    unsigned int        nFrameLen;          ///< [OUT] \~chinese 帧的长度                 \~english The Length of Frame

    /// \~chinese 设备水印时标    \~english Device frame-specific time scale
    unsigned int        nSecondCount;       ///< [OUT] \~chinese 秒数                     \~english The Seconds
    unsigned int        nCycleCount;        ///< [OUT] \~chinese 周期数                   \~english The Count of Cycle
    unsigned int        nCycleOffset;       ///< [OUT] \~chinese 周期偏移量               \~english The Offset of Cycle

    float               fGain;              ///< [OUT] \~chinese 增益                     \~english Gain
    float               fExposureTime;      ///< [OUT] \~chinese 曝光时间                 \~english Exposure Time
    unsigned int        nAverageBrightness; ///< [OUT] \~chinese 平均亮度                 \~english Average brightness

    /// \~chinese 白平衡相关    \~english White balance
    unsigned int        nRed;               ///< [OUT] \~chinese 红色                     \~english Red
    unsigned int        nGreen;             ///< [OUT] \~chinese 绿色                     \~english Green
    unsigned int        nBlue;              ///< [OUT] \~chinese 蓝色                     \~english Blue

    unsigned int        nFrameCounter;      ///< [OUT] \~chinese 总帧数                   \~english Frame Counter
    unsigned int        nTriggerIndex;      ///< [OUT] \~chinese 触发计数                 \~english Trigger Counting

    unsigned int        nInput;             ///< [OUT] \~chinese 输入                     \~english Input
    unsigned int        nOutput;            ///< [OUT] \~chinese 输出                     \~english Output

    /// \~chinese ROI区域    \~english ROI Region
    unsigned short      nOffsetX;           ///< [OUT] \~chinese 水平偏移量               \~english OffsetX
    unsigned short      nOffsetY;           ///< [OUT] \~chinese 垂直偏移量               \~english OffsetY
    unsigned short      nChunkWidth;        ///< [OUT] \~chinese Chunk宽                  \~english The Width of Chunk
    unsigned short      nChunkHeight;       ///< [OUT] \~chinese Chunk高                  \~english The Height of Chunk

    unsigned int        nLostPacket;        ///< [OUT] \~chinese 本帧丢包数               \~english Lost Packet Number In This Frame

    unsigned int        nUnparsedChunkNum;  ///< [OUT] \~chinese 未解析的Chunkdata个数    \~english Unparsed Chunk Number
    union
    {
        MV_CHUNK_DATA_CONTENT* pUnparsedChunkContent;///< [OUT] \~chinese 未解析的Chunk   \~english Unparsed Chunk Content
        int64_t nAligning;                  ///< [OUT] \~chinese 校准                     \~english Aligning
    }UnparsedChunkList;

    unsigned int        nReserved[36];      ///<       \~chinese 预留                     \~english Reserved
}MV_FRAME_OUT_INFO_EX;

/// \~chinese 图像结构体，输出图像指针地址及图像信息    \~english Image Struct, output the pointer of Image and the information of the specific image
typedef struct _MV_FRAME_OUT_
{
    unsigned char*      pBufAddr;           ///< [OUT] \~chinese 图像指针地址             \~english  pointer of image
    MV_FRAME_OUT_INFO_EX    stFrameInfo;    ///< [OUT] \~chinese 图像信息                 \~english information of the specific image

    unsigned int        nRes[16];           ///<       \~chinese 预留                     \~english Reserved
}MV_FRAME_OUT;

/// \~chinese 取流策略    \~english The strategy of Grabbing
typedef enum _MV_GRAB_STRATEGY_
{
    MV_GrabStrategy_OneByOne          = 0,  ///< \~chinese 从旧到新一帧一帧的获取图像（默认为该策略）           \~english Grab One By One
    MV_GrabStrategy_LatestImagesOnly  = 1,  ///< \~chinese 获取列表中最新的一帧图像（同时清除列表中的其余图像） \~english Grab The Latest Image
    MV_GrabStrategy_LatestImages      = 2,  ///< \~chinese 获取列表中最新的图像，个数由OutputQueueSize决定，范围为1-ImageNodeNum，设置成1等同于LatestImagesOnly,设置成ImageNodeNum等同于OneByOne \~english Grab The Latest Images
    MV_GrabStrategy_UpcomingImage     = 3,  ///< \~chinese 等待下一帧图像                                       \~english Grab The Upcoming Image

}MV_GRAB_STRATEGY;

/// \~chinese 网络传输的相关信息    \~english Network transmission information
typedef struct _MV_NETTRANS_INFO_
{
    int64_t             nReceiveDataSize;           ///< [OUT] \~chinese 已接收数据大小 [统计StartGrabbing和StopGrabbing之间的数据量] \~english Received Data Size  [Calculate the Data Size between StartGrabbing and StopGrabbing]
    int                 nThrowFrameCount;           ///< [OUT] \~chinese 丢帧数量                                                     \~english Throw frame number
    unsigned int        nNetRecvFrameCount;         ///< [OUT] \~chinese 已接收的帧数                                                 \~english Received Frame Count
    int64_t             nRequestResendPacketCount;  ///< [OUT] \~chinese 请求重发包数                                                 \~english Request Resend Packet Count
    int64_t             nResendPacketCount;         ///< [OUT] \~chinese 重发包数                                                     \~english Resend Packet Count

}MV_NETTRANS_INFO;

/// \~chinese 信息类型    \~english Information Type
#define MV_MATCH_TYPE_NET_DETECT             0x00000001      ///< \~chinese 网络流量和丢包信息              \~english Network traffic and packet loss information
#define MV_MATCH_TYPE_USB_DETECT             0x00000002      ///< \~chinese host接收到来自U3V设备的字节总数 \~english The total number of bytes host received from U3V device

/// \~chinese 全匹配的一种信息结构体    \~english A fully matched information structure
typedef struct _MV_ALL_MATCH_INFO_
{
    unsigned int        nType;          ///< [IN]  \~chinese 需要输出的信息类型，e.g. MV_MATCH_TYPE_NET_DETECT \~english Information type need to output ,e.g. MV_MATCH_TYPE_NET_DETECT
    void*               pInfo;          ///< [OUT] \~chinese 输出的信息缓存，由调用者分配                      \~english Output information cache, which is allocated by the caller
    unsigned int        nInfoSize;      ///< [IN]  \~chinese 信息缓存的大小                                   \ ~english Information cache size

}MV_ALL_MATCH_INFO;

/// \~chinese 网络流量和丢包信息反馈结构体，对应类型为 MV_MATCH_TYPE_NET_DETECT    \~english Network traffic and packet loss feedback structure, the corresponding type is MV_MATCH_TYPE_NET_DETECT
typedef struct _MV_MATCH_INFO_NET_DETECT_
{
    int64_t             nReceiveDataSize;                   ///< [OUT] \~chinese 已接收数据大小 [统计StartGrabbing和StopGrabbing之间的数据量] \~english Received data size 
    int64_t             nLostPacketCount;                   ///< [OUT] \~chinese 丢失的包数量                                                 \~english Number of packets lost
    unsigned int        nLostFrameCount;                    ///< [OUT] \~chinese 丢帧数量                                                     \~english Number of frames lost
    unsigned int        nNetRecvFrameCount;                 ///< [OUT] \~chinese 保留                                                         \~english Received Frame Count
    int64_t             nRequestResendPacketCount;          ///< [OUT] \~chinese 请求重发包数                                                 \~english Request Resend Packet Count
    int64_t             nResendPacketCount;                 ///< [OUT] \~chinese 重发包数                                                     \~english Resend Packet Count
}MV_MATCH_INFO_NET_DETECT;

/// \~chinese host收到从u3v设备端的总字节数，对应类型为 MV_MATCH_TYPE_USB_DETECT    \~english The total number of bytes host received from the u3v device side, the corresponding type is MV_MATCH_TYPE_USB_DETECT
typedef struct _MV_MATCH_INFO_USB_DETECT_
{
    int64_t             nReceiveDataSize;      ///< [OUT] \~chinese 已接收数据大小 [统计OpenDevicce和CloseDevice之间的数据量] \~english Received data size
    unsigned int        nReceivedFrameCount;   ///< [OUT] \~chinese 已收到的帧数                                              \~english Number of frames received
    unsigned int        nErrorFrameCount;      ///< [OUT] \~chinese 错误帧数                                                  \~english Number of error frames
    unsigned int        nReserved[2];          ///<       \~chinese 保留                                                      \~english Reserved
}MV_MATCH_INFO_USB_DETECT;

/// \~chinese 显示帧信息   \~english Display frame information
typedef struct _MV_DISPLAY_FRAME_INFO_
{
    void*               hWnd;                 ///< [IN] \~chinese 窗口句柄       \~english HWND
    unsigned char*      pData;                ///< [IN] \~chinese 显示的数据     \~english Data Buffer
    unsigned int        nDataLen;             ///< [IN] \~chinese 数据长度       \~english Data Size
    unsigned short      nWidth;               ///< [IN] \~chinese 图像宽         \~english Width
    unsigned short      nHeight;              ///< [IN] \~chinese 图像高         \~english Height
    enum MvGvspPixelType    enPixelType;      ///< [IN] \~chinese 像素格式       \~english Pixel format
    unsigned int        nRes[4];              ///<      \~chinese 保留           \~english Reserved

}MV_DISPLAY_FRAME_INFO;

/// \~chinese 保存的3D数据格式    \~english The saved format for 3D data
enum MV_SAVE_POINT_CLOUD_FILE_TYPE
{
    MV_PointCloudFile_Undefined        = 0,  ///< \~chinese 未定义的点云格式    \~english Undefined point cloud format
    MV_PointCloudFile_PLY              = 1,  ///< \~chinese PLY点云格式         \~english The point cloud format named PLY
    MV_PointCloudFile_CSV              = 2,  ///< \~chinese CSV点云格式         \~english The point cloud format named CSV
    MV_PointCloudFile_OBJ              = 3,  ///< \~chinese OBJ点云格式         \~english The point cloud format named OBJ
};

/// \~chinese 保存3D数据到缓存    \~english Save 3D data to buffer
typedef struct _MV_SAVE_POINT_CLOUD_PARAM_
{
    unsigned int        nLinePntNum;                    ///< [IN]  \~chinese每一行点的数量，即图像宽     \~english The number of points in each row,which is the width of the image
    unsigned int        nLineNum;                       ///< [IN]  \~chinese行数，即图像高               \~english The number of rows,which is the height of the image

    MvGvspPixelType     enSrcPixelType;                 ///< [IN]  \~chinese输入数据的像素格式           \~english The pixel format of the input data
    unsigned char*      pSrcData;                       ///< [IN]  \~chinese输入数据缓存                 \~english Input data buffer
    unsigned int        nSrcDataLen;                    ///< [IN]  \~chinese输入数据大小                 \~english Input data size

    unsigned char*      pDstBuf;                        ///< [OUT] \~chinese输出像素数据缓存             \~english Output pixel data buffer
    unsigned int        nDstBufSize;                    ///< [IN]  \~chinese提供的输出缓冲区大小(nLinePntNum * nLineNum * (16*3 + 4) + 2048) \~english Output buffer size provided(nLinePntNum * nLineNum * (16*3 + 4) + 2048) 
    unsigned int        nDstBufLen;                     ///< [OUT] \~chinese输出像素数据缓存长度         \~english Output pixel data buffer size
    MV_SAVE_POINT_CLOUD_FILE_TYPE enPointCloudFileType; ///< [IN]  \~chinese提供输出的点云文件类型       \~english Output point data file type provided

    unsigned int        nReserved[8];                   ///<       \~chinese 保留字段                    \~english Reserved Field

}MV_SAVE_POINT_CLOUD_PARAM;

/// \~chinese 保存图片格式    \~english Save image type
enum MV_SAVE_IAMGE_TYPE
{
    MV_Image_Undefined                 = 0,   ///< \~chinese 未定义的图像格式      \~english Undefined Image Type
    MV_Image_Bmp                       = 1,   ///< \~chinese BMP图像格式           \~english BMP Image Type
    MV_Image_Jpeg                      = 2,   ///< \~chinese JPEG图像格式          \~english Jpeg Image Type
    MV_Image_Png                       = 3,   ///< \~chinese PNG图像格式           \~english Png  Image Type
    MV_Image_Tif                       = 4,   ///< \~chinese TIFF图像格式          \~english TIFF Image Type
};

/// \~chinese 图片保存参数    \~english Save Image Parameters
typedef struct _MV_SAVE_IMAGE_PARAM_T_EX_
{
    unsigned char*      pData;              ///< [IN]  \~chinese 输入数据缓存                     \~english Input Data Buffer
    unsigned int        nDataLen;           ///< [IN]  \~chinese 输入数据大小                     \~english Input Data Size
    enum MvGvspPixelType    enPixelType;    ///< [IN]  \~chinese 输入数据的像素格式               \~english Input Data Pixel Format
    unsigned short      nWidth;             ///< [IN]  \~chinese 图像宽                           \~english Image Width
    unsigned short      nHeight;            ///< [IN]  \~chinese 图像高                           \~english Image Height

    unsigned char*      pImageBuffer;       ///< [OUT] \~chinese 输出图片缓存                     \~english Output Image Buffer
    unsigned int        nImageLen;          ///< [OUT] \~chinese 输出图片大小                     \~english Output Image Size
    unsigned int        nBufferSize;        ///< [IN]  \~chinese 提供的输出缓冲区大小             \~english Output buffer size provided
    enum MV_SAVE_IAMGE_TYPE enImageType;    ///< [IN]  \~chinese 输出图片格式                     \~english Output Image Format
    unsigned int        nJpgQuality;        ///< [IN]  \~chinese JPG编码质量(50-99]，其它格式无效 \~english Encoding quality(50-99]，Other formats are invalid

    ///< [IN]     \~chinese Bayer的插值方法 0-快速 1-均衡 2-最优（如果传入其它值则默认为最优）
    ///< [IN]     \~english Bayer interpolation method  0-Fast 1-Equilibrium 2-Optimal
    unsigned int        iMethodValue;       ///< [IN]  \~chinese 插值方法                         \~english Method Value
    unsigned int        nReserved[3];       ///<       \~chinese 预留                             \~english Reserved

}MV_SAVE_IMAGE_PARAM_EX;

/// \~chinese 保存BMP、JPEG、PNG、TIFF图片文件的参数    \~english Save BMP、JPEG、PNG、TIFF image file parameters
typedef struct _MV_SAVE_IMG_TO_FILE_PARAM_
{
    enum MvGvspPixelType    enPixelType;    ///< [IN] \~chinese输入数据的像素格式               \~english The pixel format of the input data
    unsigned char*      pData;              ///< [IN] \~chinese 输入数据缓存                    \~english Input Data Buffer
    unsigned int        nDataLen;           ///< [IN] \~chinese 输入数据大小                    \~english Input Data Size
    unsigned short      nWidth;             ///< [IN] \~chinese 图像宽                          \~english Image Width
    unsigned short      nHeight;            ///< [IN] \~chinese 图像高                          \~english Image Height
    enum MV_SAVE_IAMGE_TYPE enImageType;    ///< [IN] \~chinese 输入图片格式                    \~english Input Image Format
    unsigned int        nQuality;           ///< [IN] \~chinese JPG编码质量(50-99]，PNG编码质量[0-9]，其它格式无效 \~english JPG Encoding quality(50-99],PNG Encoding quality[0-9]，Other formats are invalid
    char                pImagePath[256];    ///< [IN] \~chinese 输入文件路径                    \~english Input file path

    ///< [IN]     \~chinese Bayer的插值方法 0-快速 1-均衡 2-最优（如果传入其它值则默认为最优）
    ///< [IN]     \~english Bayer interpolation method  0-Fast 1-Equilibrium 2-Optimal
    int                 iMethodValue;       ///< [IN] \~chinese 插值方法                        \~english Method Value
    unsigned int        nReserved[8];       ///<      \~chinese 预留                            \~english Reserved

}MV_SAVE_IMG_TO_FILE_PARAM;

/// \~chinese 旋转角度    \~english Rotation angle
typedef enum _MV_IMG_ROTATION_ANGLE_
{
    MV_IMAGE_ROTATE_90  = 1,
    MV_IMAGE_ROTATE_180 = 2,
    MV_IMAGE_ROTATE_270 = 3,

}MV_IMG_ROTATION_ANGLE;

/// \~chinese 图像旋转结构体    \~english Rotate image structure
typedef struct _MV_CC_ROTATE_IMAGE_PARAM_T_
{
    enum MvGvspPixelType    enPixelType;        ///< [IN]  \~chinese 像素格式(仅支持Mono8/RGB24/BGR24)  \~english Pixel format(Only support Mono8/RGB24/BGR24)
    unsigned int        nWidth;             ///< [IN][OUT]  \~chinese 图像宽                    \~english Width
    unsigned int        nHeight;            ///< [IN][OUT]  \~chinese 图像高                    \~english Height

    unsigned char*      pSrcData;           ///< [IN]  \~chinese 输入数据缓存                   \~english Input data buffer
    unsigned int        nSrcDataLen;        ///< [IN]  \~chinese 输入数据大小                   \~english Input data size

    unsigned char*      pDstBuf;            ///< [OUT] \~chinese 输出数据缓存                   \~english Output data buffer
    unsigned int        nDstBufLen;         ///< [OUT] \~chinese 输出数据大小                   \~english Output data size
    unsigned int        nDstBufSize;        ///< [IN]  \~chinese 提供的输出缓冲区大小           \~english Provided outbut buffer size

    MV_IMG_ROTATION_ANGLE enRotationAngle;  ///< [IN]  \~chinese 旋转角度                       \~english Rotation angle

    unsigned int        nRes[8];            ///<       \~chinese 预留                           \~english Reserved
}MV_CC_ROTATE_IMAGE_PARAM;

/// \~chinese 翻转类型    \~english Flip type
typedef enum _MV_IMG_FLIP_TYPE_
{
    MV_FLIP_VERTICAL   = 1,
    MV_FLIP_HORIZONTAL = 2,

}MV_IMG_FLIP_TYPE;

/// \~chinese 图像翻转结构体    \~english Flip image structure
typedef struct _MV_CC_FLIP_IMAGE_PARAM_T_
{
    enum MvGvspPixelType    enPixelType;        ///< [IN]  \~chinese 像素格式(仅支持Mono8/RGB24/BGR24)  \~english Pixel format(Only support Mono8/RGB24/BGR24)
    unsigned int        nWidth;             ///< [IN]  \~chinese 图像宽                         \~english Width
    unsigned int        nHeight;            ///< [IN]  \~chinese 图像高                         \~english Height

    unsigned char*      pSrcData;           ///< [IN]  \~chinese 输入数据缓存                   \~english Input data buffer
    unsigned int        nSrcDataLen;        ///< [IN]  \~chinese 输入数据大小                   \~english Input data size

    unsigned char*      pDstBuf;            ///< [OUT] \~chinese 输出数据缓存                   \~english Output data buffer
    unsigned int        nDstBufLen;         ///< [OUT] \~chinese 输出数据大小                   \~english Output data size
    unsigned int        nDstBufSize;        ///< [IN]  \~chinese 提供的输出缓冲区大小           \~english Provided outbut buffer size

    MV_IMG_FLIP_TYPE    enFlipType;         ///< [IN]  \~chinese 翻转类型                       \~english Flip type

    unsigned int        nRes[8];            ///<       \~chinese 预留                           \~english Reserved
}MV_CC_FLIP_IMAGE_PARAM;

/// \~chinese 图像转换结构体    \~english Pixel convert structure
typedef struct _MV_PIXEL_CONVERT_PARAM_T_
{
    unsigned short      nWidth;             ///< [IN]  \~chinese 图像宽                          \~english Width
    unsigned short      nHeight;            ///< [IN]  \~chinese 图像高                          \~english Height

    enum MvGvspPixelType    enSrcPixelType; ///< [IN]  \~chinese 源像素格式                      \~english Source pixel format
    unsigned char*      pSrcData;           ///< [IN]  \~chinese 输入数据缓存                    \~english Input data buffer
    unsigned int        nSrcDataLen;        ///< [IN]  \~chinese 输入数据大小                    \~english Input data size

    enum MvGvspPixelType    enDstPixelType; ///< [IN]  \~chinese 目标像素格式                    \~english Destination pixel format
    unsigned char*      pDstBuffer;         ///< [OUT] \~chinese 输出数据缓存                    \~english Output data buffer
    unsigned int        nDstLen;            ///< [OUT] \~chinese 输出数据大小                    \~english Output data size
    unsigned int        nDstBufferSize;     ///< [IN]  \~chinese 提供的输出缓冲区大小            \~english Provided outbut buffer size

    unsigned int        nRes[4];            ///<       \~chinese 预留                            \~english Reserved
}MV_CC_PIXEL_CONVERT_PARAM;

/// \~chinese 色彩矫正参数    \~english Color correction param
typedef struct _MV_CC_CCM_PARAM_T_
{
    bool                bCCMEnable;         ///< [IN]  \~chinese 色彩校正使能                    \~english Color correction enable
    int                 nCCMat[9];          ///< [IN]  \~chinese 色彩矫正矩阵(-8192~8192)        \~english Color correction matrix

    unsigned int        nRes[8];            ///<       \~chinese 预留                            \~english Reserved
}MV_CC_CCM_PARAM;

/// \~chinese 噪声特性类型    \~english Noise feature type
typedef enum _MV_CC_BAYER_NOISE_FEATURE_TYPE
{
    MV_CC_BAYER_NOISE_FEATURE_TYPE_INVALID = 0, ///<        \~chinese 无效值                        \~english Invalid
    MV_CC_BAYER_NOISE_FEATURE_TYPE_PROFILE = 1, ///<        \~chinese 噪声曲线                      \~english Noise curve
    MV_CC_BAYER_NOISE_FEATURE_TYPE_LEVEL   = 2, ///<        \~chinese 噪声水平                      \~english Noise level
    MV_CC_BAYER_NOISE_FEATURE_TYPE_DEFAULT = 1, ///<        \~chinese 默认值                        \~english Default

}MV_CC_BAYER_NOISE_FEATURE_TYPE;

/// \~chinese Bayer格式降噪特性信息    \~english Denoise profile info
typedef struct _MV_CC_BAYER_NOISE_PROFILE_INFO_T_
{
    unsigned int        nVersion;           ///<  \~chinese 版本                           \~english version
    MV_CC_BAYER_NOISE_FEATURE_TYPE enNoiseFeatureType;  ///<  \~chinese 噪声特性类型       \~english noise feature type
    enum MvGvspPixelType    enPixelType;    ///<  \~chinese 图像格式                       \~english image format
    int                 nNoiseLevel;        ///<  \~chinese 平均噪声水平                   \~english noise level
    unsigned int        nCurvePointNum;     ///<  \~chinese 曲线点数                       \~english curve point number
    int*                nNoiseCurve;        ///<  \~chinese 噪声曲线                       \~english noise curve
    int*                nLumCurve;          ///<  \~chinese 亮度曲线                       \~english luminance curve

    unsigned int        nRes[8];            ///<       \~chinese 预留                           \~english Reserved

}MV_CC_BAYER_NOISE_PROFILE_INFO;

/// \~chinese Bayer格式噪声估计参数    \~english Bayer noise estimate param
typedef struct _MV_CC_BAYER_NOISE_ESTIMATE_PARAM_T_
{
    unsigned int        nWidth;             ///< [IN]  \~chinese 图像宽(大于等于8)              \~english Width
    unsigned int        nHeight;            ///< [IN]  \~chinese 图像高(大于等于8)              \~english Height
    enum MvGvspPixelType    enPixelType;    ///< [IN]  \~chinese 像素格式                       \~english Pixel format

    unsigned char*      pSrcData;           ///< [IN]  \~chinese 输入数据缓存                   \~english Input data buffer
    unsigned int        nSrcDataLen;        ///< [IN]  \~chinese 输入数据大小                   \~english Input data size

    unsigned int        nNoiseThreshold;    ///< [IN]  \~chinese 噪声阈值(0-4095)               \~english Noise Threshold

    unsigned char*      pCurveBuf;          ///< [IN]  \~chinese 用于存储噪声曲线和亮度曲线（需要外部分配，缓存大小：4096 * sizeof(int) * 2）     \~english Buffer used to store noise and brightness curves, size:4096 * sizeof(int) * 2)
    MV_CC_BAYER_NOISE_PROFILE_INFO stNoiseProfile; ///< [OUT]  \~chinese 降噪特性信息               \~english Denoise profile

    unsigned int        nThreadNum;         ///< [IN]  \~chinese 线程数量，0表示算法库根据硬件自适应；1表示单线程（默认）；大于1表示线程数目      \~english Thread number, 0 means that the library is adaptive to the hardware, 1 means single thread(Default value), Greater than 1 indicates the number of threads

    unsigned int        nRes[8];            ///<       \~chinese 预留                           \~english Reserved

}MV_CC_BAYER_NOISE_ESTIMATE_PARAM;

/// \~chinese Bayer格式空域降噪参数    \~english Bayer spatial Denoise param
typedef struct _MV_CC_BAYER_SPATIAL_DENOISE_PARAM_T_
{
    unsigned int        nWidth;             ///< [IN]  \~chinese 图像宽(大于等于8)              \~english Width
    unsigned int        nHeight;            ///< [IN]  \~chinese 图像高(大于等于8)              \~english Height
    enum MvGvspPixelType    enPixelType;        ///< [IN]  \~chinese 像素格式                       \~english Pixel format

    unsigned char*      pSrcData;           ///< [IN]  \~chinese 输入数据缓存                   \~english Input data buffer
    unsigned int        nSrcDataLen;        ///< [IN]  \~chinese 输入数据大小                   \~english Input data size
     
    unsigned char*      pDstBuf;            ///< [OUT] \~chinese 输出降噪后的数据               \~english Output data buffer
    unsigned int        nDstBufSize;        ///< [IN]  \~chinese 提供的输出缓冲区大小           \~english Provided outbut buffer size
    unsigned int        nDstBufLen;         ///< [OUT] \~chinese 输出降噪后的数据长度           \~english Output data length

    MV_CC_BAYER_NOISE_PROFILE_INFO stNoiseProfile; ///< [IN]  \~chinese 降噪特性信息(来源于噪声估计)   \~english Denoise profile
    unsigned int        nDenoiseStrength;   ///< [IN]  \~chinese 降噪强度(0-100)                \~english nDenoise Strength   
    unsigned int        nSharpenStrength;   ///< [IN]  \~chinese 锐化强度(0-32)                 \~english Sharpen Strength
    unsigned int        nNoiseCorrect;      ///< [IN]  \~chinese 噪声校正系数(0-1280)           \~english Noise Correct  

    unsigned int        nThreadNum;         ///< [IN]  \~chinese 线程数量，0表示算法库根据硬件自适应；1表示单线程（默认）；大于1表示线程数目         \~english Thread number, 0 means that the library is adaptive to the hardware, 1 means single thread(Default value), Greater than 1 indicates the number of threads

    unsigned int        nRes[8];            ///<       \~chinese 预留                           \~english Reserved

}MV_CC_BAYER_SPATIAL_DENOISE_PARAM;

/// \~chinese 水印信息      \~english  Frame-specific information
typedef struct _MV_CC_FRAME_SPEC_INFO_
{
    /// \~chinese 设备水印时标    \~english Device frame-specific time scale
    unsigned int        nSecondCount;       ///< [OUT] \~chinese 秒数                     \~english The Seconds
    unsigned int        nCycleCount;        ///< [OUT] \~chinese 周期数                   \~english The Count of Cycle
    unsigned int        nCycleOffset;       ///< [OUT] \~chinese 周期偏移量               \~english The Offset of Cycle

    float               fGain;              ///< [OUT] \~chinese 增益                     \~english Gain
    float               fExposureTime;      ///< [OUT] \~chinese 曝光时间                 \~english Exposure Time
    unsigned int        nAverageBrightness; ///< [OUT] \~chinese 平均亮度                 \~english Average brightness

    /// \~chinese 白平衡相关    \~english White balance
    unsigned int        nRed;               ///< [OUT] \~chinese 红色                     \~english Red
    unsigned int        nGreen;             ///< [OUT] \~chinese 绿色                     \~english Green
    unsigned int        nBlue;              ///< [OUT] \~chinese 蓝色                     \~english Blue

    unsigned int        nFrameCounter;      ///< [OUT] \~chinese 总帧数                   \~english Frame Counter
    unsigned int        nTriggerIndex;      ///< [OUT] \~chinese 触发计数                 \~english Trigger Counting

    unsigned int        nInput;             ///< [OUT] \~chinese 输入                     \~english Input
    unsigned int        nOutput;            ///< [OUT] \~chinese 输出                     \~english Output

    /// \~chinese ROI区域    \~english ROI Region
    unsigned short      nOffsetX;           ///< [OUT] \~chinese 水平偏移量               \~english OffsetX
    unsigned short      nOffsetY;           ///< [OUT] \~chinese 垂直偏移量               \~english OffsetY
    unsigned short      nFrameWidth;        ///< [OUT] \~chinese 水印宽                  \~english The Width of Chunk
    unsigned short      nFrameHeight;       ///< [OUT] \~chinese 水印高                  \~english The Height of Chunk

    unsigned int        nReserved[16];      ///<       \~chinese 预留                     \~english Reserved
}MV_CC_FRAME_SPEC_INFO;

/// \~chinese 无损解码参数    \~english High Bandwidth decode structure
typedef struct _MV_CC_HB_DECODE_PARAM_T_
{
    unsigned char*      pSrcBuf;            ///< [IN]  \~chinese 输入数据缓存                    \~english Input data buffer
    unsigned int        nSrcLen;            ///< [IN]  \~chinese 输入数据大小                    \~english Input data size

    unsigned int        nWidth;             ///< [OUT] \~chinese 图像宽                          \~english Width
    unsigned int        nHeight;            ///< [OUT] \~chinese 图像高                          \~english Height
    unsigned char*      pDstBuf;            ///< [OUT] \~chinese 输出数据缓存                    \~english Output data buffer
    unsigned int        nDstBufSize;        ///< [IN]  \~chinese 提供的输出缓冲区大小            \~english Provided output buffer size
    unsigned int        nDstBufLen;         ///< [OUT] \~chinese 输出数据大小                    \~english Output data size
    MvGvspPixelType     enDstPixelType;     ///< [OUT] \~chinese 输出的像素格式                  \~english Output pixel format

    MV_CC_FRAME_SPEC_INFO stFrameSpecInfo;  ///< [OUT] \~chinese 水印信息                        \~english Frame Spec Info

    unsigned int        nRes[8];            ///<       \~chinese 预留                            \~english Reserved

}MV_CC_HB_DECODE_PARAM;

/// \~chinese 录像格式定义    \~english Record Format Type
typedef enum _MV_RECORD_FORMAT_TYPE_
{
    MV_FormatType_Undefined     = 0,        ///< \~chinese 未定义的录像格式                     \~english Undefined Recode Format Type
    MV_FormatType_AVI           = 1,        ///< \~chinese AVI录像格式                          \~english AVI Recode Format Type

}MV_RECORD_FORMAT_TYPE;

/// \~chinese 录像参数    \~english Record Parameters
typedef struct _MV_CC_RECORD_PARAM_T_
{
    enum MvGvspPixelType    enPixelType;    ///< [IN] \~chinese 输入数据的像素格式                                  \~english Pixel Type

    unsigned short      nWidth;             ///< [IN] \~chinese 图像宽(指定目标参数时需为2的倍数)                   \~english Width
    unsigned short      nHeight;            ///< [IN] \~chinese 图像高(指定目标参数时需为2的倍数)                   \~english Height

    float               fFrameRate;         ///< [IN] \~chinese 帧率fps(大于1/16)                                   \~english The Rate of Frame
    unsigned int        nBitRate;           ///< [IN] \~chinese 码率kbps(128kbps-16Mbps)                            \~english The Rate of Bitrate

    MV_RECORD_FORMAT_TYPE enRecordFmtType;  ///< [IN] \~chinese 录像格式                                            \~english Recode Format Type

    char*               strFilePath;        ///< [IN] \~chinese 录像文件存放路径(如果路径中存在中文，需转成utf-8)   \~english File Path

    unsigned int        nRes[8];            ///<      \~chinese 预留                                                \~english Reserved

}MV_CC_RECORD_PARAM;

/// \~chinese 传入的图像数据    \~english Input Data
typedef struct _MV_CC_INPUT_FRAME_INFO_T_
{
    unsigned char*      pData;              ///< [IN] \~chinese 图像数据指针    \~english Record Data
    unsigned int        nDataLen;           ///< [IN] \~chinese 图像大小        \~english The Length of Record Data

    unsigned int        nRes[8];            ///<      \~chinese 预留            \~english Reserved

}MV_CC_INPUT_FRAME_INFO;

/// \~chinese 采集模式    \~english Acquisition mode
typedef enum _MV_CAM_ACQUISITION_MODE_
{
    MV_ACQ_MODE_SINGLE      = 0,            ///< \~chinese 单帧模式             \~english Single Mode
    MV_ACQ_MODE_MUTLI       = 1,            ///< \~chinese 多帧模式             \~english Multi Mode
    MV_ACQ_MODE_CONTINUOUS  = 2,            ///< \~chinese 持续采集模式         \~english Continuous Mode

}MV_CAM_ACQUISITION_MODE;

/// \~chinese 增益模式    \~english Gain Mode
typedef enum _MV_CAM_GAIN_MODE_
{
    MV_GAIN_MODE_OFF        = 0,            ///< \~chinese 关闭                 \~english Single Mode
    MV_GAIN_MODE_ONCE       = 1,            ///< \~chinese 一次                 \~english Multi Mode
    MV_GAIN_MODE_CONTINUOUS = 2,            ///< \~chinese 连续                 \~english Continuous Mode

}MV_CAM_GAIN_MODE;

/// \~chinese 曝光模式    \~english Exposure Mode
typedef enum _MV_CAM_EXPOSURE_MODE_
{
    MV_EXPOSURE_MODE_TIMED          = 0,    ///< \~chinese 时间             \~english Timed
    MV_EXPOSURE_MODE_TRIGGER_WIDTH  = 1,    ///< \~chinese 触发脉冲宽度     \~english TriggerWidth
}MV_CAM_EXPOSURE_MODE;

/// \~chinese 自动曝光模式    \~english Auto Exposure Mode
typedef enum _MV_CAM_EXPOSURE_AUTO_MODE_
{
    MV_EXPOSURE_AUTO_MODE_OFF        = 0,  ///< \~chinese 关闭              \~english Off
    MV_EXPOSURE_AUTO_MODE_ONCE       = 1,  ///< \~chinese 一次              \~english Once
    MV_EXPOSURE_AUTO_MODE_CONTINUOUS = 2,  ///< \~chinese 连续              \~english Continuous

}MV_CAM_EXPOSURE_AUTO_MODE;

/// \~chinese 触发模式    \~english Trigger Mode
typedef enum _MV_CAM_TRIGGER_MODE_
{
    MV_TRIGGER_MODE_OFF         = 0,      ///< \~chinese 关闭               \~english Off
    MV_TRIGGER_MODE_ON          = 1,      ///< \~chinese 打开               \~english ON

}MV_CAM_TRIGGER_MODE;

/// \~chinese Gamma选择器    \~english Gamma Selector
typedef enum _MV_CAM_GAMMA_SELECTOR_
{
    MV_GAMMA_SELECTOR_USER      = 1,    ///< \~chinese 用户                 \~english Gamma Selector User
    MV_GAMMA_SELECTOR_SRGB      = 2,    ///< \~chinese sRGB                 \~english Gamma Selector sRGB

}MV_CAM_GAMMA_SELECTOR;

/// \~chinese 白平衡    \~english White Balance
typedef enum _MV_CAM_BALANCEWHITE_AUTO_
{
    MV_BALANCEWHITE_AUTO_OFF            = 0,    ///< \~chinese 关闭         \~english Off
    MV_BALANCEWHITE_AUTO_ONCE           = 2,    ///< \~chinese 一次         \~english Once
    MV_BALANCEWHITE_AUTO_CONTINUOUS     = 1,    ///< \~chinese 连续         \~english Continuous

}MV_CAM_BALANCEWHITE_AUTO;

/// \~chinese 触发源    \~english Trigger Source
typedef enum _MV_CAM_TRIGGER_SOURCE_
{
    MV_TRIGGER_SOURCE_LINE0             = 0,    ///< \~chinese Line0        \~english Line0
    MV_TRIGGER_SOURCE_LINE1             = 1,    ///< \~chinese Line1        \~english Line0
    MV_TRIGGER_SOURCE_LINE2             = 2,    ///< \~chinese Line2        \~english Line0
    MV_TRIGGER_SOURCE_LINE3             = 3,    ///< \~chinese Line3        \~english Line3
    MV_TRIGGER_SOURCE_COUNTER0          = 4,    ///< \~chinese Conuter0     \~english Conuter0

    MV_TRIGGER_SOURCE_SOFTWARE          = 7,    ///< \~chinese 软触发       \~english Software
    MV_TRIGGER_SOURCE_FrequencyConverter= 8,    ///< \~chinese 变频器       \~english Frequency Converter

}MV_CAM_TRIGGER_SOURCE;

/// \~chinese GigEVision IP配置    \~english GigEVision IP Configuration
#define MV_IP_CFG_STATIC        0x05000000      ///< \~chinese 静态         \~english Static
#define MV_IP_CFG_DHCP          0x06000000      ///< \~chinese DHCP         \~english DHCP
#define MV_IP_CFG_LLA           0x04000000      ///< \~chinese LLA          \~english LLA

/// \~chinese GigEVision网络传输模式    \~english GigEVision Net Transfer Mode
#define MV_NET_TRANS_DRIVER     0x00000001      ///< \~chinese 驱动         \~english Driver
#define MV_NET_TRANS_SOCKET     0x00000002      ///< \~chinese Socket       \~english Socket

/// \~chinese CameraLink波特率    \~english CameraLink Baud Rates (CLUINT32)
#define MV_CAML_BAUDRATE_9600            0x00000001     ///< \~chinese 9600         \~english 9600
#define MV_CAML_BAUDRATE_19200           0x00000002     ///< \~chinese 19200        \~english 19200
#define MV_CAML_BAUDRATE_38400           0x00000004     ///< \~chinese 38400        \~english 38400
#define MV_CAML_BAUDRATE_57600           0x00000008     ///< \~chinese 57600        \~english 57600
#define MV_CAML_BAUDRATE_115200          0x00000010     ///< \~chinese 115200       \~english 115200
#define MV_CAML_BAUDRATE_230400          0x00000020     ///< \~chinese 230400       \~english 230400
#define MV_CAML_BAUDRATE_460800          0x00000040     ///< \~chinese 460800       \~english 460800
#define MV_CAML_BAUDRATE_921600          0x00000080     ///< \~chinese 921600       \~english 921600
#define MV_CAML_BAUDRATE_AUTOMAX         0x40000000     ///< \~chinese 最大值       \~english Auto Max

/// \~chinese 异常消息类型    \~english Exception message type
#define MV_EXCEPTION_DEV_DISCONNECT     0x00008001      ///< \~chinese 设备断开连接              \~english The device is disconnected
#define MV_EXCEPTION_VERSION_CHECK      0x00008002      ///< \~chinese SDK与驱动版本不匹配       \~english SDK does not match the driver version

/// \~chinese Event事件回调信息\    \~english Event callback infomation
#define MAX_EVENT_NAME_SIZE     128                     ///< \~chinese 设备Event事件名称最大长度 \~english Max length of event name
typedef struct _MV_EVENT_OUT_INFO_
{
    char                EventName[MAX_EVENT_NAME_SIZE]; ///< [OUT] \~chinese Event名称     \~english Event name

    unsigned short      nEventID;                       ///< [OUT] \~chinese Event号       \~english Event ID
    unsigned short      nStreamChannel;                 ///< [OUT] \~chinese 流通道序号    \~english Circulation number

    unsigned int        nBlockIdHigh;                   ///< [OUT] \~chinese 帧号高位      \~english BlockId high
    unsigned int        nBlockIdLow;                    ///< [OUT] \~chinese 帧号低位      \~english BlockId low

    unsigned int        nTimestampHigh;                 ///< [OUT] \~chinese 时间戳高位    \~english Timestramp high
    unsigned int        nTimestampLow;                  ///< [OUT] \~chinese 时间戳低位    \~english Timestramp low

    void*               pEventData;                     ///< [OUT] \~chinese Event数据     \~english Event data
    unsigned int        nEventDataSize;                 ///< [OUT] \~chinese Event数据长度 \~english Event data len

    unsigned int        nReserved[16];                  ///<       \~chinese 预留          \~english Reserved
}MV_EVENT_OUT_INFO;

/// \~chinese 文件存取    \~english File Access
typedef struct _MV_CC_FILE_ACCESS_T
{
    const char*         pUserFileName;                  ///< [IN] \~chinese 用户文件名     \~english User file name
    const char*         pDevFileName;                   ///< [IN] \~chinese 设备文件名     \~english Device file name

    unsigned int        nReserved[32];                  ///<      \~chinese 预留           \~english Reserved
}MV_CC_FILE_ACCESS;

/// \~chinese 文件存取进度    \~english File Access Progress
typedef struct _MV_CC_FILE_ACCESS_PROGRESS_T
{
    int64_t             nCompleted;                     ///< [OUT] \~chinese 已完成的长度   \~english Completed Length
    int64_t             nTotal;                         ///< [OUT] \~chinese 总长度         \~english Total Length

    unsigned int        nReserved[8];                   ///<       \~chinese 预留           \~english Reserved
}MV_CC_FILE_ACCESS_PROGRESS;

/// \~chinese Gige的传输类型    \~english The transmission type of Gige
typedef enum _MV_GIGE_TRANSMISSION_TYPE_
{
    MV_GIGE_TRANSTYPE_UNICAST                = 0x0,             ///< \~chinese 表示单播(默认)                           \~english Unicast mode
    MV_GIGE_TRANSTYPE_MULTICAST              = 0x1,             ///< \~chinese 表示组播                                 \~english Multicast mode
    MV_GIGE_TRANSTYPE_LIMITEDBROADCAST       = 0x2,             ///< \~chinese 表示局域网内广播，暂不支持               \~english Limited broadcast mode,not support
    MV_GIGE_TRANSTYPE_SUBNETBROADCAST        = 0x3,             ///< \~chinese 表示子网内广播，暂不支持                 \~english Subnet broadcast mode,not support
    MV_GIGE_TRANSTYPE_CAMERADEFINED          = 0x4,             ///< \~chinese 表示从设备获取，暂不支持                 \~english Transtype from camera,not support
    MV_GIGE_TRANSTYPE_UNICAST_DEFINED_PORT   = 0x5,             ///< \~chinese 表示用户自定义应用端接收图像数据Port号   \~english User Defined Receive Data Port
    MV_GIGE_TRANSTYPE_UNICAST_WITHOUT_RECV   = 0x00010000,      ///< \~chinese 表示设置了单播，但本实例不接收图像数据   \~english Unicast without receive data
    MV_GIGE_TRANSTYPE_MULTICAST_WITHOUT_RECV = 0x00010001,      ///< \~chinese 表示组播模式，但本实例不接收图像数据     \~english Multicast without receive data
}MV_GIGE_TRANSMISSION_TYPE;

/// \~chinese 传输模式，可以为单播模式、组播模式等    \~english Transmission type
typedef struct _MV_TRANSMISSION_TYPE_T
{
    MV_GIGE_TRANSMISSION_TYPE   enTransmissionType;            ///< [IN] \~chinese 传输模式                                  \~english Transmission type
    unsigned int        nDestIp;                               ///< [IN] \~chinese 目标IP，组播模式下有意义                  \~english Destination IP
    unsigned short      nDestPort;                             ///< [IN] \~chinese 目标Port，组播模式下有意义                \~english Destination port

    unsigned int        nReserved[32];                         ///<      \~chinese 预留                                      \~english Reserved
}MV_TRANSMISSION_TYPE;

/// \~chinese 动作命令信息    \~english Action Command
typedef struct _MV_ACTION_CMD_INFO_T
{
    unsigned int        nDeviceKey;        ///< [IN] \~chinese 设备密钥                                      \~english Device Key;
    unsigned int        nGroupKey;         ///< [IN] \~chinese 组键                                          \~english Group Key
    unsigned int        nGroupMask;        ///< [IN] \~chinese 组掩码                                        \~english Group Mask

    unsigned int        bActionTimeEnable; ///< [IN] \~chinese 只有设置成1时Action Time才有效，非1时无效     \~english Action Time Enable
    int64_t             nActionTime;       ///< [IN] \~chinese 预定的时间，和主频有关                        \~english Action Time

    const char*         pBroadcastAddress; ///< [IN] \~chinese 广播包地址                                    \~english Broadcast Address
    unsigned int        nTimeOut;          ///< [IN] \~chinese 等待ACK的超时时间，如果为0表示不需要ACK       \~english TimeOut

    unsigned int        bSpecialNetEnable; ///< [IN] \~chinese 只有设置成1时指定的网卡IP才有效，非1时无效    \~english Special IP Enable
    unsigned int        nSpecialNetIP;     ///< [IN] \~chinese 指定的网卡IP                                  \~english Special Net IP address

    unsigned int        nReserved[14];     ///<      \~chinese 预留                                          \~english Reserved

}MV_ACTION_CMD_INFO;

/// \~chinese 动作命令返回信息    \~english Action Command Result
typedef struct _MV_ACTION_CMD_RESULT_T
{
    unsigned char       strDeviceAddress[12 + 3 + 1];   ///< [OUT] \~chinese 设备IP         \~english IP address of the device

    int                 nStatus;                        ///< [OUT] \~chinese 状态码         \~english status code returned by the device
                                                        //1.0x0000:success.
                                                        //2.0x8001:Command is not supported by the device.
                                                        //3.0x8013:The device is not synchronized to a master clock to be used as time reference.
                                                        //4.0x8015:A device queue or packet data has overflowed.
                                                        //5.0x8016:The requested scheduled action command was requested at a time that is already past.

    unsigned int        nReserved[4];                   ///<      \~chinese 预留         \~english Reserved

}MV_ACTION_CMD_RESULT;

/// \~chinese 动作命令返回信息列表    \~english Action Command Result List
typedef struct _MV_ACTION_CMD_RESULT_LIST_T
{
    unsigned int        nNumResults;                    ///< [OUT] \~chinese 返回值个数     \~english Number of returned values
    MV_ACTION_CMD_RESULT*   pResults;                   ///< [OUT] \~chinese 动作命令结果   \~english Reslut of action command

}MV_ACTION_CMD_RESULT_LIST;

/// \~chinese 每个节点对应的接口类型    \~english Interface type corresponds to each node 
enum MV_XML_InterfaceType
{
    IFT_IValue,         ///< \~chinese Value                        \~english IValue interface
    IFT_IBase,          ///< \~chinese Base                         \~english IBase interface
    IFT_IInteger,       ///< \~chinese Integer                      \~english IInteger interface
    IFT_IBoolean,       ///< \~chinese Boolean                      \~english IBoolean interface
    IFT_ICommand,       ///< \~chinese Command                      \~english ICommand interface
    IFT_IFloat,         ///< \~chinese Float                        \~english IFloat interface
    IFT_IString,        ///< \~chinese String                       \~english IString interface
    IFT_IRegister,      ///< \~chinese Register                     \~english IRegister interface
    IFT_ICategory,      ///< \~chinese Category                     \~english ICategory interface
    IFT_IEnumeration,   ///< \~chinese Enumeration                  \~english IEnumeration interface
    IFT_IEnumEntry,     ///< \~chinese EnumEntry                    \~english IEnumEntry interface
    IFT_IPort,          ///< \~chinese Port                         \~english IPort interface
};

/// \~chinese 节点的访问模式    \~english Node Access Mode
enum MV_XML_AccessMode
{
    AM_NI,              ///< \~chinese 不可实现                     \~english Not implemented
    AM_NA,              ///< \~chinese 不可用                       \~english Not available
    AM_WO,              ///< \~chinese 只写                         \~english Write Only
    AM_RO,              ///< \~chinese 只读                         \~english Read Only
    AM_RW,              ///< \~chinese 读写                         \~english Read and Write
    AM_Undefined,       ///< \~chinese 未定义                       \~english Object is not yet initialized
    AM_CycleDetect,     ///< \~chinese 内部用于AccessMode循环检测   \~english used internally for AccessMode cycle detection
};

#define MV_MAX_XML_SYMBOLIC_NUM      64                         /// \~chinese 最大XML符号数               \~english Max XML Symbolic Number 
/// \~chinese 枚举类型值    \~english Enumeration Value
typedef struct _MVCC_ENUMVALUE_T
{
    unsigned int        nCurValue;                              ///< [OUT] \~chinese 当前值               \~english Current Value
    unsigned int        nSupportedNum;                          ///< [OUT] \~chinese 数据的有效数据个数   \~english Number of valid data
    unsigned int        nSupportValue[MV_MAX_XML_SYMBOLIC_NUM]; ///< [OUT] \~chinese 支持的枚举值         \~english Support Value 

    unsigned int        nReserved[4];                           ///<       \~chinese 预留                 \~english Reserved
}MVCC_ENUMVALUE;

/// \~chinese Int类型值    \~english Int Value
typedef struct _MVCC_INTVALUE_T
{
    unsigned int        nCurValue;      ///< [OUT] \~chinese 当前值               \~english Current Value
    unsigned int        nMax;           ///< [OUT] \~chinese 最大值               \~english Max
    unsigned int        nMin;           ///< [OUT] \~chinese 最小值               \~english Min
    unsigned int        nInc;           ///< [OUT] \~chinese                      \~english Inc

    unsigned int        nReserved[4];   ///<       \~chinese 预留                 \~english Reserved
}MVCC_INTVALUE;

/// \~chinese Int类型值Ex    \~english Int Value Ex
typedef struct _MVCC_INTVALUE_EX_T
{
    int64_t             nCurValue;      ///< [OUT] \~chinese 当前值               \~english Current Value
    int64_t             nMax;           ///< [OUT] \~chinese 最大值               \~english Max
    int64_t             nMin;           ///< [OUT] \~chinese 最小值               \~english Min
    int64_t             nInc;           ///< [OUT] \~chinese Inc                  \~english Inc

    unsigned int        nReserved[16];  ///<       \~chinese 预留                 \~english Reserved
}MVCC_INTVALUE_EX;

/// \~chinese Float类型值    \~english Float Value
typedef struct _MVCC_FLOATVALUE_T
{
    float               fCurValue;      ///< [OUT] \~chinese 当前值               \~english Current Value
    float               fMax;           ///< [OUT] \~chinese 最大值               \~english Max
    float               fMin;           ///< [OUT] \~chinese 最小值               \~english Min

    unsigned int        nReserved[4];   ///<       \~chinese 预留                 \~english Reserved
}MVCC_FLOATVALUE;

/// \~chinese String类型值    \~english String Value
typedef struct _MVCC_STRINGVALUE_T
{
    char                chCurValue[256]; ///< [OUT] \~chinese 当前值              \~english Current Value

    int64_t             nMaxLength;      ///< [OUT] \~chinese 最大长度            \~english MaxLength
    unsigned int        nReserved[2];    ///<       \~chinese 预留                \~english Reserved
}MVCC_STRINGVALUE;

#endif /* _MV_CAMERA_PARAMS_H_ */
