#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 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
    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;

///< \~chinese ����������Ϣ��С       \~english Maximum data information size
#define INFO_MAX_BUFFER_SIZE            64

/// \~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 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 Transport Layer Protocol Type
#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 �豸��Ϣ                  \~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 �豸�����Э������     \~english Device Transport Layer Protocol Type

    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;

///< \~chinese ���֧�ֵĴ����ʵ������ \~english The maximum number of supported transport layer instances
#define MV_MAX_TLS_NUM                  8
///< \~chinese ���֧�ֵ��豸����       \~english The maximum number of supported devices
#define MV_MAX_DEVICE_NUM               256

/// \~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ö�ٵ��Ľӿ���Ϣ \~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;

///< \~chinese ���֧�ֵ�GenTL�ӿ�����  \~english The maximum number of GenTL interface supported
#define MV_MAX_GENTL_IF_NUM             256

/// \~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;

///< \~chinese ���֧�ֵ�GenTL�豸����  \~english The maximum number of GenTL devices supported
#define MV_MAX_GENTL_DEV_NUM            256

/// \~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
#define MV_ACCESS_Exclusive                     1                   /// \~chinese ��ռȨ�ޣ�����APPֻ������CCP�Ĵ���                    \~english Exclusive authority, other APP is only allowed to read the CCP register
#define MV_ACCESS_ExclusiveWithSwitch           2                   /// \~chinese ���Դ�5ģʽ����ռȨ�ޣ�Ȼ���Զ�ռȨ�޴�             \~english You can seize the authority from the 5 mode, and then open with exclusive authority
#define MV_ACCESS_Control                       3                   /// \~chinese ����Ȩ�ޣ�����APP���������мĴ���                     \~english Control authority, allows other APP reading all registers
#define MV_ACCESS_ControlWithSwitch             4                   /// \~chinese ���Դ�5��ģʽ����ռȨ�ޣ�Ȼ���Կ���Ȩ�޴�           \~english You can seize the authority from the 5 mode, and then open with control authority
#define MV_ACCESS_ControlSwitchEnable           5                   /// \~chinese �Կɱ���ռ�Ŀ���Ȩ�޴�                              \~english Open with seized control authority
#define MV_ACCESS_ControlSwitchEnableWithKey    6                   /// \~chinese ���Դ�5��ģʽ����ռȨ�ޣ�Ȼ���Կɱ���ռ�Ŀ���Ȩ�޴� \~english You can seize the authority from the 5 mode, and then open with seized control authority
#define MV_ACCESS_Monitor                       7                   /// \~chinese ��ģʽ���豸�������ڿ���Ȩ����                      \~english Open with read mode and is available under control authority

/// \~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�ij���            \~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 ֡�ij���               \~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 ��ȡ�б������µ�ͼ��         \~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 �ѽ������ݴ�С[Start��Stop֮��]    \~english Received Data Size
    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 �ѽ������ݴ�С[Start��Stop֮��]    \~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 �ѽ������ݴ�С [Open��Close֮��]   \~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

    enum 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 length

    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

}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 length
    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 length
    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

    
    unsigned int            iMethodValue;                           ///< [IN]  \~chinese ��ֵ���� 0-���� 1-���� 2-���ţ�����ֵĬ��Ϊ���ţ�  \~english Bayer interpolation method  0-Fast 1-Equilibrium 2-Optimal

    unsigned int            nReserved[3];                           ///<       \~chinese Ԥ��                   \~english Reserved

}MV_SAVE_IMAGE_PARAM_EX;

/// \~chinese ͼƬ�������              \~english Save Image 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 length
    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

    int                     iMethodValue;                           ///< [IN]  \~chinese ��ֵ���� 0-���� 1-���� 2-���ţ�����ֵĬ��Ϊ���ţ�  \~english Bayer interpolation method  0-Fast 1-Equilibrium 2-Optimal

    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 ���ظ�ʽ               \~english Pixel format
    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 length

    unsigned char*          pDstBuf;                                ///< [OUT] \~chinese ������ݻ���           \~english Output data buffer
    unsigned int            nDstBufLen;                             ///< [OUT] \~chinese ������ݳ���           \~english Output data length
    unsigned int            nDstBufSize;                            ///< [IN]  \~chinese �ṩ�������������С   \~english Provided output 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 ���ظ�ʽ               \~english Pixel format
    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 length

    unsigned char*          pDstBuf;                                ///< [OUT] \~chinese ������ݻ���           \~english Output data buffer
    unsigned int            nDstBufLen;                             ///< [OUT] \~chinese ������ݳ���           \~english Output data length
    unsigned int            nDstBufSize;                            ///< [IN]  \~chinese �ṩ�������������С   \~english Provided output 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 length

    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 length
    unsigned int            nDstBufferSize;                         ///< [IN]  \~chinese �ṩ�������������С   \~english Provided output buffer size

    unsigned int            nRes[4];                                ///<       \~chinese Ԥ��                   \~english Reserved

}MV_CC_PIXEL_CONVERT_PARAM;

/// \~chinese Gamma����                 \~english Gamma type
typedef enum _MV_CC_GAMMA_TYPE_
{
    MV_CC_GAMMA_TYPE_NONE               = 0,                        ///< \~chinese ������                       \~english Disable
    MV_CC_GAMMA_TYPE_VALUE              = 1,                        ///< \~chinese Gammaֵ                      \~english Gamma value
    MV_CC_GAMMA_TYPE_USER_CURVE         = 2,                        ///< \~chinese Gamma����                    \~english Gamma curve
                                                                    ///< \~chinese 8λ,���ȣ�256*sizeof(unsigned char)      \~english 8bit,length:256*sizeof(unsigned char)
                                                                    ///< \~chinese 10λ,���ȣ�1024*sizeof(unsigned short)   \~english 10bit,length:1024*sizeof(unsigned short)
                                                                    ///< \~chinese 12λ,���ȣ�4096*sizeof(unsigned short)   \~english 12bit,length:4096*sizeof(unsigned short)
                                                                    ///< \~chinese 16λ,���ȣ�65536*sizeof(unsigned short)  \~english 16bit,length:65536*sizeof(unsigned short)
    MV_CC_GAMMA_TYPE_LRGB2SRGB          = 3,                        ///< \~chinese linear RGB to sRGB           \~english linear RGB to sRGB
    MV_CC_GAMMA_TYPE_SRGB2LRGB          = 4,                        ///< \~chinese sRGB to linear RGB(��ɫ�ʲ�ֵʱ֧�֣�ɫ��У��ʱ��Ч) \~english sRGB to linear RGB

}MV_CC_GAMMA_TYPE;

// Gamma��Ϣ
/// \~chinese Gamma��Ϣ�ṹ��           \~english Gamma info structure
typedef struct _MV_CC_GAMMA_PARAM_T_
{
    MV_CC_GAMMA_TYPE    enGammaType;                                ///< [IN]  \~chinese Gamma����              \~english Gamma type
    float               fGammaValue;                                ///< [IN]  \~chinese Gammaֵ[0.1,4.0]       \~english Gamma value[0.1,4.0]
    unsigned char*      pGammaCurveBuf;                             ///< [IN]  \~chinese Gamma���߻���          \~english Gamma curve buffer
    unsigned int        nGammaCurveBufLen;                          ///< [IN]  \~chinese Gamma���߳���          \~english Gamma curve buffer size

    unsigned int        nRes[8];                                    ///<       \~chinese Ԥ��                   \~english Reserved

}MV_CC_GAMMA_PARAM;

/// \~chinese CCM����                   \~english CCM param
typedef struct _MV_CC_CCM_PARAM_T_
{
    bool                bCCMEnable;                                 ///< [IN]  \~chinese �Ƿ�����CCM            \~english CCM enable
    int                 nCCMat[9];                                  ///< [IN]  \~chinese CCM����(-8192~8192)    \~english Color correction matrix(-8192~8192)

    unsigned int        nRes[8];                                    ///<       \~chinese Ԥ��                   \~english Reserved

}MV_CC_CCM_PARAM;

/// \~chinese CCM����                   \~english CCM param
typedef struct _MV_CC_CCM_PARAM_EX_T_
{
    bool                bCCMEnable;                                 ///< [IN]  \~chinese �Ƿ�����CCM            \~english CCM enable
    int                 nCCMat[9];                                  ///< [IN]  \~chinese CCM����(-65536~65536)  \~english Color correction matrix(-65536~65536)
    unsigned int        nCCMScale;                                  ///< [IN]  \~chinese ����ϵ����2��������,���65536��    \~english Quantitative scale(Integer power of 2, <= 65536)

    unsigned int        nRes[8];                                    ///<       \~chinese Ԥ��                   \~english Reserved

}MV_CC_CCM_PARAM_EX;

/// \~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
    enum 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(128-16*1024)  \~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 Line1
    MV_TRIGGER_SOURCE_LINE2             = 2,                        ///< \~chinese Line2                        \~english Line2
    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 Max length of event name
#define MAX_EVENT_NAME_SIZE             128

/// \~chinese Event�¼��ص���Ϣ\        \~english Event callback infomation
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 ����ɵij���           \~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�ij�ʱʱ�䣬���Ϊ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
};

/// \~chinese ���XML������             \~english Max XML Symbolic Number 
#define MV_MAX_XML_SYMBOLIC_NUM         64
/// \~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_ */