unit CameraParamsUnit;

interface

uses
  Windows, SysUtils, Variants, Classes, PixelTypeUnit;

const
  // Definition of correct code
  MV_OK: Integer = $00000000;

  // ch:通用错误码定义:范围0x80000000-0x800000FF | en: Definition of common error code : 0x80000000-0x800000FF
  MV_E_HANDLE: Integer = $80000000;  ///< 错误或无效的句柄 | en:Error or invalid handle
  MV_E_SUPPORT: Integer = $80000001;  ///< 不支持的功能 | en:Not supported function
  MV_E_BUFOVER: Integer = $80000002;  ///< 缓存已满 | en:Cache is full
  MV_E_CALLORDER: Integer = $80000003;  ///< 函数调用顺序错误 | en:Function calling order error
  MV_E_PARAMETER: Integer = $80000004;  ///< 错误的参数 | en:Incorrect parameter
  MV_E_RESOURCE: Integer = $80000006;  ///< 资源申请失败 | en:Applying resource failed
  MV_E_NODATA: Integer = $80000007;  ///< 无数据 | en:No data
  MV_E_PRECONDITION: Integer = $80000008;  ///< 前置条件有误，或运行环境已发生变化 | en:Precondition error, or running environment changed
  MV_E_VERSION: Integer = $80000009;  ///< 版本不匹配 | en:Version mismatches
  MV_E_NOENOUGH_BUF: Integer = $8000000A;  ///< 传入的内存空间不足 | en:Insufficient memory
  MV_E_ABNORMAL_IMAGE: Integer = $8000000B;  ///< 异常图像，可能是丢包导致图像不完整 | en:Abnormal image, maybe incomplete image because of lost packet
  MV_E_LOAD_LIBRARY: Integer = $8000000C;  ///< 动态导入DLL失败 | en:Load library failed
  MV_E_UNKNOW: Integer = $800000FF;  ///< 未知的错误 | en:Unknown error

  // ch:GenICam系列错误:范围0x80000100-0x800001FF | en:GenICam Series Error Codes: Range from 0x80000100 to 0x800001FF
  MV_E_GC_GENERIC: Integer = $80000100;  ///< 通用错误 | en:General error
  MV_E_GC_ARGUMENT: Integer = $80000101;  ///< 参数非法 | en:Illegal parameters
  MV_E_GC_RANGE: Integer   = $80000102;  ///< 值超出范围 | en:The value is out of range
  MV_E_GC_PROPERTY: Integer = $80000103;  ///< 属性 | en:Property
  MV_E_GC_RUNTIME: Integer = $80000104;  ///< 运行环境有问题 | en:Running environment error
  MV_E_GC_LOGICAL: Integer = $80000105;  ///< 逻辑错误 | en:Logical error
  MV_E_GC_ACCESS: Integer  = $80000106;  ///< 节点访问条件有误 | en:Node accessing condition error
  MV_E_GC_TIMEOUT: Integer = $80000107;  ///< 超时 | en:Timeout
  MV_E_GC_DYNAMICCAST: Integer = $80000108;  ///< 转换异常 | en:Transformation exception
  MV_E_GC_UNKNOW: Integer = $800001FF;  ///< GenICam未知错误 | en:GenICam unknown error

  //ch:GigE_STATUS对应的错误码:范围0x80000200-0x800002FF | en:GigE_STATUS Error Codes: Range from 0x80000200 to 0x800002FF
  MV_E_NOT_IMPLEMENTED: Integer = $80000200;  ///< 命令不被设备支持 | en:The command is not supported by device
  MV_E_INVALID_ADDRESS: Integer = $80000201;  ///< 访问的目标地址不存在 | en:The target address being accessed does not exist
  MV_E_WRITE_PROTECT: Integer = $80000202;  ///< 目标地址不可写 | en:The target address is not writable
  MV_E_ACCESS_DENIED: Integer = $80000203;  ///< 设备无访问权限 | en:No permission
  MV_E_BUSY: Integer = $80000204;  ///< 设备忙，或网络断开 | en:Device is busy, or network disconnected
  MV_E_PACKET: Integer = $80000205;  ///< 网络包数据错误 | en:Network data packet error
  MV_E_NETER: Integer = $80000206;  ///< 网络相关错误 | en:Network error
  // GigE相机特有的错误码
  MV_E_IP_CONFLICT = $80000221;  ///< 设备IP冲突 | en:Device IP conflict

  //ch:USB_STATUS对应的错误码:范围0x80000300-0x800003FF | en:USB_STATUS Error Codes: Range from 0x80000300 to 0x800003FF
  MV_E_USB_READ: Integer = $80000300;      ///< 读usb出错 | en:Reading USB error
  MV_E_USB_WRITE: Integer = $80000301;      ///< 写usb出错 | en:Writing USB error
  MV_E_USB_DEVICE: Integer = $80000302;      ///< 设备异常 | en:Device exception
  MV_E_USB_GENICAM: Integer = $80000303;      ///< GenICam相关错误 | en:GenICam error
  MV_E_USB_BANDWIDTH: Integer = $80000304;      ///< 带宽不足  该错误码新增 | en:Insufficient bandwidth, this error code is newly added
  MV_E_USB_DRIVER: Integer = $80000305;      ///< 驱动不匹配或者未装驱动 | en:Driver mismatch or unmounted drive
  MV_E_USB_UNKNOW: Integer = $800003FF;      ///< USB未知的错误 | en:USB unknown error

  //ch:升级时对应的错误码:范围0x80000400-0x800004FF | en:Upgrade Error Codes: Range from 0x80000400 to 0x800004FF
  MV_E_UPG_FILE_MISMATCH: Integer = $80000400; ///< 升级固件不匹配 | en:Firmware mismatches
  MV_E_UPG_LANGUSGE_MISMATCH: Integer = $80000401; ///< 升级固件语言不匹配 | en:Firmware language mismatches
  MV_E_UPG_CONFLICT: Integer = $80000402; ///< 升级冲突（设备已经在升级了再次请求升级即返回此错误） | en:Upgrading conflicted (repeated upgrading requests during device upgrade)
  MV_E_UPG_INNER_ERR: Integer = $80000403; ///< 升级时相机内部出现错误 | en:Camera internal error during upgrade
  MV_E_UPG_UNKNOW: Integer = $800004FF; ///< 升级时未知错误 | en:Unknown error during upgrade


  // ch: 设备类型 | en: device type
  MV_UNKNOW_DEVICE: Integer = $00000000;       // ch:未知设备类型，保留意义 | en:Unknown Device Type, Reserved
  MV_GIGE_DEVICE: Integer = $00000001;         // ch:GigE设备 | en:GigE Device
  MV_1394_DEVICE: Integer = $00000002;         // ch:1394-a/b 设备 | en:1394-a/b Device
  MV_USB_DEVICE: Integer = $00000004;          // ch:USB3.0 设备 | en:USB3.0 Device
  MV_CAMERALINK_DEVICE: Integer = $00000008;   // ch:CameraLink设备 | en:CameraLink Device


// device information
type
  MV_GIGE_DEVICE_INFO = record
    nIpCfgOption: Cardinal;
    nIpCfgCurrent: Cardinal;
    nCurrentIp: Cardinal;
    nCurrentSubNetMask: Cardinal;
    nDefultGateWay: Cardinal;
    chManufacturerName: array[0..31] of Byte;
    chModelName: array[0..31] of Byte;
    chDeviceVersion: array[0..31] of Byte;
    chManufacturerSpecificInfo: array[0..47] of Byte;
    chSerialNumber: array[0..15] of Byte;
    chUserDefinedName: array[0..15] of Byte;
    nNetExport: Cardinal;
    nReserved: array[0..3] of Cardinal;
end;

type
  MV_USB3_DEVICE_INFO = record
    CrtlInEndPoint: Byte;
    CrtlOutEndPoint: Byte;
    StreamEndPoint: Byte;
    EventEndPoint: Byte;
    idVendor: Byte;
    idProduct: Byte;
    nDeviceNumber: Cardinal;
    chDeviceGUID: array[0..63] of Byte;
    chVendorName: array[0..63] of Byte;
    chModelName: array[0..63] of Byte;
    chFamilyName: array[0..63] of Byte;
    chDeviceVersion: array[0..63] of Byte;
    chManufacturerName: array[0..63] of Byte;
    chSerialNumber: array[0..63] of Byte;
    chUserDefinedName: array[0..63] of Byte;
    nbcdUSB: Cardinal;
    nReserved: array[0..2] of Cardinal;
end;

type
  MV_CC_SpecialInfo = record
    case integer of
    0: (stGigEInfo: MV_GIGE_DEVICE_INFO);
    1: (stUsb3VInfo: MV_USB3_DEVICE_INFO);
 end;

 type
  MV_CC_DEVICE_INFO = record
     nMajorVer: Word;
     nMinorVer: Word;
     nMacAddrHigh: Cardinal;
     nMacAddrLow: Cardinal;
     nTLayerType: Cardinal;
     nReserved: array[0..3] of Cardinal;
     SpecialInfo: MV_CC_SpecialInfo;
end;

type
  PMV_CC_DEVICE_INFO_LIST = ^MV_CC_DEVICE_INFO_LIST;
  MV_CC_DEVICE_INFO_LIST = record
    nDeviceNum: Cardinal;
    pDeviceInfo: array[0..255] of ^MV_CC_DEVICE_INFO;
end;


// data type of feature node
type
  PMVCC_INTVALUE = ^MVCC_INTVALUE;
  MVCC_INTVALUE = record
     nCurValue: Cardinal;
     nMax: Cardinal;
     nMin: Cardinal;
     nInc: Cardinal;
     nReserved: array[0..3] of Cardinal;
end;

type
  PMVCC_FLOATVALUE = ^MVCC_FLOATVALUE;
  MVCC_FLOATVALUE = record
     fCurValue: Single;
     fMax: Single;
     fMin: Single;
     nReserved: array[0..3] of Cardinal;
end;


type
  PMVCC_ENUMVALUE = ^MVCC_ENUMVALUE;
  MVCC_ENUMVALUE = record
     nCurValue: Cardinal;
     nSupportedNum: Cardinal;
     nSupportValue: array[0..63] of Cardinal;
     nReserved: array[0..3] of Cardinal;
end;

type
  PMVCC_STRINGVALUE = ^MVCC_STRINGVALUE;
  MVCC_STRINGVALUE = record
     chCurValue: array[0..255] of AnsiChar;
     nReserved: array[0..3] of Cardinal;
end;

// ch:输出帧的信息 | en:Output Frame Information
type
  PMV_FRAME_OUT_INFO_EX = ^MV_FRAME_OUT_INFO_EX;
  MV_FRAME_OUT_INFO_EX = record
     nWidth: Word;  // ch:图像宽 | en:Image Width
     nHeight: Word; // ch:图像高 | en:Image Height
     enPixelType: MvGvspPixelType;
     nFrameNum: Cardinal;  // ch:帧号 | en:Frame Number
     nDevTimeStampHigh: Cardinal;   // ch:时间戳高32位 | en:Timestamp high 32 bits
     nDevTimeStampLow: Cardinal;    // ch:时间戳低32位 | en:Timestamp low 32 bits
     nReserved0: Cardinal;     // ch:保留，8字节对齐 | en:Reserved, 8-byte aligned
     nHostTimeStamp: Int64;    // ch:主机生成的时间戳 | en:Host-generated timestamp

     nFrameLen: Cardinal;

    // ch:以下为chunk新增水印信息 | en:The followings are chunk add frame-specific information
    // ch:设备水印时标 | en:Device frame-specific time scale
     nSecondCount: Cardinal;
     nCycleCount: Cardinal;
     nCycleOffset: Cardinal;

     fGain: Single;
     fExposureTime: Single;
     nAverageBrightness: Cardinal;   // ch:平均亮度 | en:Average brightness

    // ch:白平衡相关 | en:White balance
     nRed: Cardinal;
     nGreen: Cardinal;
     nBlue: Cardinal;

     nFrameCounter: Cardinal;
     nTriggerIndex: Cardinal;   // ch:触发计数 | en:Trigger Counting

     // ch:Line 输入/输出 | en:Line Input/Output
     nInput: Cardinal;
     nOutput: Cardinal;

     // ch:ROI区域 | en:ROI Region
     nOffsetX: Word;
     nOffsetY: Word;
     nChunkWidth: Word;
     nChunkHeight: Word;

     nLostPacket: Cardinal;  // ch:本帧丢包数 | en:Lost Pacekt Number In This Frame

     nReserved: array[0..38] of Cardinal;
end;

// ch:保存图片格式 | en:Save image type
type  MV_SAVE_IAMGE_TYPE = (
       MV_Image_Undefined = 0,
       MV_Image_Bmp = 1,
       MV_Image_Jpeg = 2,
       MV_Image_Png = 3,            // ch:不支持 | en:Not support
       MV_Image_Tif = 4);            // ch:不支持 | en:Not support

// ch:图片保存参数 | en:Save Image Parameters
type
  PMV_SAVE_IMAGE_PARAM_EX = ^MV_SAVE_IMAGE_PARAM_EX;
  MV_SAVE_IMAGE_PARAM_EX = record
     pData: PAnsiChar;  // [IN] ch:输入数据缓存 | en:Input Data Buffer
     nDataLen: Cardinal; // [IN] ch:输入数据大小 | en:Input Data Size
     enPixelType: MvGvspPixelType; // [IN] ch:输入数据的像素格式 | en:Input Data Pixel Format
     nWidth: Word;  // [IN] ch:图像宽 | en:Image Width
     nHeight: Word; // [IN] ch:图像高 | en:Image Height

     pImageBuffer: PAnsiChar;  // [OUT] ch:输出图片缓存 | en:Output Image Buffer
     nImageLen: Cardinal; // [OUT] ch:输出图片大小 | en:Output Image Size
     nBufferSize: Cardinal; // [IN] ch:提供的输出缓冲区大小 | en:Output buffer size provided
     enImageType: MV_SAVE_IAMGE_TYPE;  // [IN] ch:输出图片格式 | en:Output Image Format
     nJpgQuality: Cardinal; // [IN] ch:编码质量, (50-99] | en:Encoding quality, (50-99]

     // [IN]ch:Bayer格式转为RGB24的插值方法  0-最近邻 1-双线性 2-Hamilton （如果传入其它值则默认为最近邻）
	   // [IN]en:Interpolation method of convert Bayer to RGB24  0-nearest neighbour 1-bilinearity 2-Hamilton
     nMethodValue: Cardinal;

     nReserved: array[0..2] of Cardinal;
end;

// ch:设备状态 | en:device state

// ch:采集模式 | en:Acquisition mode
type  MV_CAM_ACQUISITION_MODE = (
       MV_ACQ_MODE_SINGLE = 0,            // ch:单帧模式 | en:Single Mode
       MV_ACQ_MODE_MUTLI = 1,            // ch:多帧模式 | en:Multi Mode
       MV_ACQ_MODE_CONTINUOUS = 1);            // ch:持续采集模式 | en:Continuous Mode

// ch:增益模式 | en:Gain Mode
type  MV_CAM_GAIN_MODE = (
       MV_GAIN_MODE_OFF = 0,            // ch:关闭 | en:Single Mode
       MV_GAIN_MODE_ONCE = 1,            // ch:一次 | en:Multi Mode
       MV_GAIN_MODE_CONTINUOUS = 1);            // ch:连续 | en:Continuous Mode

// ch:曝光模式 | en:Exposure Mode
type  MV_CAM_EXPOSURE_MODE = (
       MV_EXPOSURE_MODE_TIMED = 0,
       MV_EXPOSURE_MODE_TRIGGER_WIDTH = 1);

// ch:自动曝光模式 | en:Auto Exposure Mode
type  MV_CAM_EXPOSURE_AUTO_MODE = (
       MV_EXPOSURE_AUTO_MODE_OFF = 0,            // ch:关闭 | en:Off
       MV_EXPOSURE_AUTO_MODE_ONCE = 1,            // ch:一次 | en:Once
       MV_EXPOSURE_AUTO_MODE_CONTINUOUS = 2);            // ch:连续 | en:Continuous

type  MV_CAM_TRIGGER_MODE = (
       MV_TRIGGER_MODE_OFF = 0,            // ch:关闭 | en:Off
       MV_TRIGGER_MODE_ON = 1);            // ch:打开 | en:ON

type  MV_CAM_GAMMA_SELECTOR = (
       MV_GAMMA_SELECTOR_USER = 0,
       MV_GAMMA_SELECTOR_SRGB = 1);

type  MV_CAM_BALANCEWHITE_AUTO = (
       MV_BALANCEWHITE_AUTO_OFF = 0,
       MV_BALANCEWHITE_AUTO_CONTINUOUS = 1,
       MV_BALANCEWHITE_AUTO_ONCE = 2);

type  MV_CAM_TRIGGER_SOURCE = (
       MV_TRIGGER_SOURCE_LINE0 = 0,
       MV_TRIGGER_SOURCE_LINE1 = 1,
       MV_TRIGGER_SOURCE_LINE2 = 2,
       MV_TRIGGER_SOURCE_LINE3 = 3,
       MV_TRIGGER_SOURCE_COUNTER0 = 4,
       MV_TRIGGER_SOURCE_RESERVED = 5,
       MV_TRIGGER_SOURCE_RESERVED2 = 6,
       MV_TRIGGER_SOURCE_SOFTWARE = 7,
       MV_TRIGGER_SOURCE_FrequencyConverter = 8);

type  MV_GIGE_TRANSMISSION_TYPE = (
       MV_GIGE_TRANSTYPE_UNICAST = $0,      // ch:表示单播(默认) | en:Unicast mode
       MV_GIGE_TRANSTYPE_MULTICAST = $1,    // ch:表示组播 | en:Multicast mode
       MV_GIGE_TRANSTYPE_LIMITEDBROADCAST = $2,  // ch:表示局域网内广播，暂不支持 | en:Limited broadcast mode,not support
       MV_GIGE_TRANSTYPE_SUBNETBROADCAST = $3,   // ch:表示子网内广播，暂不支持 | en:Subnet broadcast mode,not support
       MV_GIGE_TRANSTYPE_CAMERADEFINED = $4,     // ch:表示从相机获取，暂不支持 | en:Transtype from camera,not support
       MV_GIGE_TRANSTYPE_UNICAST_DEFINED_PORT = $5,  // ch:表示用户自定义应用端接收图像数据Port号 | en:User Defined Receive Data Port
       MV_GIGE_TRANSTYPE_UNICAST_WITHOUT_RECV = $00010000,  // ch:表示设置了单播，但本实例不接收图像数据 | en:Unicast without receive data
       MV_GIGE_TRANSTYPE_MULTICAST_WITHOUT_RECV = $00010001);  // ch:表示组播模式，但本实例不接收图像数据 | en:Multicast without receive data

implementation

end.
