//
//  "$Id: Camera.h 4 2011-09-14 14:13:30Z xiaoyongli $"
//
//  Copyright (c)2008-2008, ZheJiang JuFeng Technology Stock CO.LTD.
//  All Rights Reserved.
//
//	Description:	
//	Revisions:		Year-Month-Day  SVN-Author  Modification
//
#ifndef __CAMERA_H__
#define __CAMERA_H__ 

#ifdef __cplusplus
extern "C" {
#endif
#include "xm_type.h"
#include "xm_comm_video.h"
#ifdef SOC_NONE
#include "mpi_vencTx.h"
#endif

#define GET_REJECT_SHAKE_TIME(cfgTime)  ((cfgTime)*20)
#define BYTE		unsigned char
#define WORD	unsigned short

//ºÍAHD_NextChipÒ»ÖÂ
// 3MP 13x; 4MP 14x; 5M 15x
typedef enum {
	SENSOR_CHIP_UNKNOW	=	0,
	SENSOR_CHIP_H42		=	92,
	SENSOR_CHIP_AR0140	=	94,
	SENSOR_CHIP_AR0130	=	95,
	SENSOR_CHIP_SC1035	=	96,	
	SENSOR_CHIP_SC1037	=	97,
	SENSOR_CHIP_H81		=	98,
	SENSOR_CHIP_H65		=	99,
	
	SENSOR_CHIP_SP140A	=	81,
	SENSOR_CHIP_H62		=	82,
	SENSOR_CHIP_BG0703	=	83,
	SENSOR_CHIP_SC1145	=	84,
	SENSOR_CHIP_SC1135	=	85,
	SENSOR_CHIP_OV9732	=	86,
	SENSOR_CHIP_OV9750	=	87,
	SENSOR_CHIP_SP1409	=	88,
	SENSOR_CHIP_MIS1002	=	89,
	
	SENSOR_CHIP_SC2045	=	21,
	SENSOR_CHIP_IMX222	=	22,
	SENSOR_CHIP_IMX322	=	23,
	SENSOR_CHIP_AR0237_IR	=	24,
	SENSOR_CHIP_SC2035	=	25,
	SENSOR_CHIP_F02		=	26,
	SENSOR_CHIP_AR0237	=	27,
	SENSOR_CHIP_IMX323	=	28,
	SENSOR_CHIP_PS5220	=	29,
	
	SENSOR_CHIP_SC2135	=	71,
	SENSOR_CHIP_F22 	=	72,
	SENSOR_CHIP_BG0803 	=	73,
	SENSOR_CHIP_PS5230 	=	74,
	SENSOR_CHIP_PS3210 	=	75,
	SENSOR_CHIP_GC2023 	=	76,
	SENSOR_CHIP_SC2145	=	77,
	SENSOR_CHIP_HNX083	=	78,
	SENSOR_CHIP_HNX993	=	79,
	
	SENSOR_CHIP_SC1235	=	50,
	SENSOR_CHIP_BF3016	=	51,
	SENSOR_CHIP_IMX307 	=	52,
	SENSOR_CHIP_SC2235E	=	53,	
	
	SENSOR_CHIP_BG0806 	=	60,
	SENSOR_CHIP_IMX291 	=	61,
	SENSOR_CHIP_PS5250	=	62,
	SENSOR_CHIP_SC2235	=	63,
	SENSOR_CHIP_SC2145H	=	64,
	SENSOR_CHIP_GC2033 	=	65,
	SENSOR_CHIP_F28 	=	66,
	SENSOR_CHIP_SC2235P =	67,
	SENSOR_CHIP_MIS2236 =	68,
	SENSOR_CHIP_SC2315 	=	69,
	
	SENSOR_CHIP_AR0330 	=	130,
	SENSOR_CHIP_SC3035 	=	131,
	SENSOR_CHIP_AUGE 	=	132,
	SENSOR_CHIP_OV4689 	=	140,
	SENSOR_CHIP_SC4236 	=	141,
	SENSOR_CHIP_K02 	=	142,
	SENSOR_CHIP_PS5510 	=	150,
	SENSOR_CHIP_K03 	=	151,
	SENSOR_CHIP_SC5035 	=	152,
	SENSOR_CHIP_SC5235 	=	153,
	SENSOR_CHIP_SC5300 	=	154,
	SENSOR_CHIP_IMX335 	=	155,
	SENSOR_CHIP_SC5239 	=	156,

	SENSOR_CHIP_OV12895 	=	180,
	SENSOR_CHIP_APOLLO 	=	181,
}XM_SENSOR_CHIP;


enum dvr_info_cmd_hs
{
	PRODUCT_TYPE 		= 0,
	VIDEO_CHANNEL 		= 1,
	AUDIO_CHANNEL 		= 2,
	ALARM_IN 			= 3,
	ALARM_OUT			= 4,
	FVIDEO_CHIP			= 5,
	DSP_CHIP 			= 6,
	ANALOG_AUDIO_MODE	= 7,
	TALKBACK			= 8,
	BVIDEO_CHIP			= 9,
	STORE_INTERFACE 	= 10,
	MATRIX		 		= 11,
	WIRELESS_INTERFACE	= 12,
	HD_ENCODE			= 13,
	HD_VERSION 			= 14,
	VD_INTERFACE        = 15,
	NET_INTERFACE       = 16,
	HD_INFO_LEN			= 17
};


enum netmode{
	NET_LAN = 0,
	NET_WLAN_8188EU
};

typedef enum _resolution_bit_{
	RSLTION_BIT_720P = 0,
	RSLTION_BIT_960P,
	RSLTION_BIT_1080P,
	RSLTION_BIT_1536P,
	RSLTION_BIT_4MP,
	RSLTION_BIT_5MP,
	RSLTION_BIT_8MP,

	RSLTION_BIT_BUTT
}RSLTION_BIT;


typedef enum{
	IPC_UNKNOWN = 0x2000,
	IPC_50X10 = 0x2001, 																					  
	IPC_53X13 = 0x2002,
	IPC_RA50X10 = 0x2003,
	IPC_50X10_XYD = 0x2004,
	IPC_50X10_SW = 0x2005,		
	IPC_53X13_SWI = 0x2006,		//IPC_53X13_SWI	·Éµú
	IPC_RA50X10_C = 0x2007,
	IPC_RA53X13 = 0x2008,
	IPC_53X13_SW = 0x2009,		
	IPC_53X13_SWL = 0x200A,	// IPC_53X13_SWL	°×¹âµÆ·Éµú
	IPC_RA53X13_C = 0x200B,
	IPC_50X10_SWC = 0x200C,
	IPC_50X20_SWL = 0x200E, 
	IPC_50X20_SWI = 0x200F, 
	IPC_53X13_XYD = 0x2010,
	IPC_RA50X20_C = 0x2011,	
	IPC_50X30_SWL = 0x2012,
	IPC_50X10_SWCL = 0x2013,
	IPC_53X13_SWCL = 0x2014,
	IPC_50X20_SWCL = 0x2018,
	IPC_50X30_SWI = 0x2015,
	IPC_RA50X20 = 0x2016,
	IPC_50X20_SWC = 0x2017,
	IPC_50X10_SW_S = 0x2019,//32M
	IPC_53X13_SWL_S = 0x201A,
	IPC_50X10_SWC_S = 0x201B,
	IPC_RA50X10_C_S = 0x201C,
	IPC_53X13_SWI_S = 0x201D,
	IPC_XM530_RA50X20 = 0x3001,
	IPC_XM530_80X20 = 0x3002,
	IPC_XM530_80X50 = 0x3005,
	XM350AI_60X20	= 0x6000,	// ÁÙÊ±Çø·Ö
	NR_IPC
}IPC_NICKNAME_E;

typedef enum {
	BLIGHT_CLOSE = 0x10,
	BLIGHT_OPEN = 0x11,
	CLIGHT_CLOSE = 0x20,
	MUSICLIGHT_OPEN = 0x21,
	MOODLIGHT_OPEN = 0x22,
}enLIGHT_CTRL;


typedef struct xm_COORD_S
{
    XM_S32 s32X;
    XM_S32 s32Y;
}COORD_S;

/************************************************************************
 *
 *»ñÈ¡É豸µÄÌØ¶¨Ãû³ÆID
 * ·µ»ØÃ¶¾ÙIPC_NICKNAME_E
 *
 ************************************************************************/
extern int get_hwinfo(int info_cmd);
extern int GetProductNickName(void);
/************************************************************************
½Ó¿ÚËùÔÚ¿â: 	libdvr.so
º¯Êý¹¦ÄÜ: 		»ñÈ¡ProductDefinitionÀïµÄ²úÆ·ÐͺÅ
ÊäÈë²ÎÊý:		´æ´¢×Ö·û´®µÄµØÖ·
·µ»Ø²ÎÊý:		0:	³É¹¦
					-1:	ʧ°Ü
 ************************************************************************/
int GetProductString(char *pString);

///±àÂëÆ÷¾²Ì¬²ÎÊý
typedef struct ENCODE_STATICPARAM
{
	char reserved[2];
	int  profile;    
	int level;
	int reserved1[4];
} ENCODE_STATICPARAM;


#define NAME_LEN  16
typedef struct ispconfig_json_s 
{
	char deviceType[NAME_LEN];
	char oemName[NAME_LEN];
	unsigned char u8InfraredIO;
	unsigned char u8InfraredSwap;
	unsigned char u8IrCutIO;
	unsigned char u8IrCutSwap;

/*****************************************
u8IRLed: (0: default   ³£¹æÄ£×é)
	bit0: 	(1: Èí¼þ¿ØÖƵÆ(WL/IR)        0: Ó²¼þ¿ØÖƵÆ(³£¹æ))
	bit4:	(1: Ó²¹âÃô					0: Èí¹âÃô)
*****************************************/
	unsigned char u8IRLed;
} ISPCONFIG_JSON_S;

/*
typedef enum WB_MODE
{
	WB_DISABLE,			// ½ûÖ¹
	WB_AUTO,			// ×Ô¶¯
	WB_DAYLIGHT,		// ÈÕ¹â 6500k
	WB_CLOUDY,			// ÒõÌì 7500k
	WB_INCANDESCENCE,	// °×Èȹâ 5000k
	WB_FLUORESCENT,		// ÈÕ¹âµÆ 4400k
	WB_TUNGSTEN,			// ÎÙË¿µÆ 2800k
	WB_MANUAL			// ÊÖ¶¯
}WB_MODE;
*/
typedef enum IRCUT_SWITCH_MODE
{
	IRCUT_SYN_INFRARED,
	IRCUT_SWITCH_AUTO,
	IRCUT_BUTT
}IRCUT_SWITCH_MODE;
typedef enum DNC_MODE
{
	DNC_AUTO,			// ×Ô¶¯Çл»
	DNC_MULTICOLOR,		// ²ÊÉ«
	DNC_BLACKWHITE,		// Ç¿ÖÆÎªºÚ°×ģʽ
	DNC_INTE_WHITE_INF, //ÖÇÄܾ¯½ä
	DNC_WHITELAMP_AUTO, //ÖÇÄÜů¹â
	DNC_IRLAMP_AUTO,	//ÖÇÄܺìÍâ
	DNC_LP_MODE,		//³µÅÆÄ£Ê½
	DNC_BUTT
}DNC_MODE;

typedef enum IRCUT_MODE
{
	IRCUT_NIGHT,///ÍíÉÏ
	IRCUT_DAY,///°×ÌìÂË¹âÆ¬
	IRCUT_AUTO,
}IRCUT_MODE;

typedef enum CAMERA_SCENE
{
	SCENE_AUTO,
	SCENE_INDOOR,
	SCENE_OUTDOOR,
	SCENE_BUTT,
}CAMERA_SCENE;
typedef enum IRCUT_SWITCH_DIRECTION
{
	NORMAL_DIRECTION,
//	CONTRARY_DIRECTION
}IRCUT_SWITCH_DIRECTION;

typedef struct XM_MOVEMENT_DATA_S
{
	 int 	reg_addr; 
	 int 	data; 
	 int   mode;
}MOVEMENT_DATA_S ;

/// ÊÓÆµÑÕÉ«¸ñʽ
typedef struct CAMERA_COLOR{
	unsigned char	Brightness;		///< ÁÁ¶È£¬È¡Öµ0-100¡£
	unsigned char	Contrast;		///< ¶Ô±È¶È£¬È¡Öµ0-100¡£
	unsigned char 	Saturation;		///< ±¥ºÍ¶È£¬È¡Öµ0-100¡£
	unsigned char 	Hue;			///< É«µ÷£¬È¡Öµ0-100¡£
	unsigned char 	Gain;			///< ÔöÒæ£¬È¡Öµ0-100¡£bit7ÖÃλ±íʾ×Ô¶¯ÔöÒæ£¬ÆäËûλ±»ºöÂÔ¡£
	unsigned char	WhiteBalance;	///< ×Ô¶¯°×µçƽ¿ØÖÆ£¬bit7ÖÃλ±íʾ¿ªÆô×Ô¶¯¿ØÖÆ.0x0,0x1,0x2·Ö±ð´ú±íµÍ,ÖÐ,¸ßµÈ¼¶
	unsigned short	Acutance;       	///< Èñ¶È£¬È¡Öµ0-15, µÚ8λ±íʾˮƽÈñ¶È£¬¸ß8Ϊ±íʾ´¹Ö±Èñ¶È¡£
}CAMERA_COLOR;	// ºÍVIDEO_COLORÒ»ÖÂ


// ±àÂë²ÎÊý
typedef struct tagCAPTURE_FORMAT
{
    BYTE    Compression;        /*!< ѹËõģʽ */
    BYTE    BitRateControl;     /*!< ÂëÁ÷¿ØÖÆ */
    BYTE    ImageSize;          /*!< ͼÏñ·Ö±æÂÊ */
    BYTE    ImageQuality;       /*!< ͼÏñ»­ÖÊ */
    BYTE    FramesPerSecond;    /*!< Ö¡ÂÊ */
    BYTE    AVOption;           /*!< ÒôÊÓÆµÑ¡Ïî */
    WORD    BitRate;            ///< ²Î¿¼ÂëÁ÷Öµ£¬KbpsΪµ¥Î»
    BYTE    GOP;                /*< Ö¡¼ä¸ôµÄÊýÖµ£¬½¨ÒéÖµ49¡«99*/
    BYTE    reserved[3];        /*< ±£Áô×Ö½Ú*/
} CAPTURE_FORMAT;


typedef struct stCAM_INIT_DATE
{
	XM_S32 mask;			//ÑÚÂë
	XM_U8 u8GammaDay;
	XM_U8 u8GammaNight;
	XM_U8 u8LumDefDay;
	XM_U8 u8LumDefNight;
	XM_U8 u8InfrGpioNum;		// µÆ°åGPIO
	XM_U16 u16GainDef;			// x1
	XM_U16 u16GainDefSD;		// x1
	XM_U16 u16GainMax;			// x1
	XM_U32 u32DnThrDay[5];
	XM_U32 u32DnThrNight[5];
	XM_U32 u32EshutterLvEn;		// E Shutter enable level
	XM_U32 u32EshutterLvDis;		// E Shutter Disbale level	

	XM_U32 u32awb_agc;			// bit7: En  bit0~bit6: Choice
	XM_U32 u32AgcSLvlAwb;		// >= limit awb gain
	XM_U32 u32AgcELvlAwb;		// <= not limit awb gain
	XM_U32 u32CscLumCon;		// HighByte -> LowByte [Lum Con]
	XM_U32 u32CscAcutance;		// Autance
	XM_U32 u32CscHueSat;		// HighByte -> LowByte [Hue Sat]

	XM_S32 s32TgtNum;	//[0,3]
	XM_U32 au32TgtExp[4];
	XM_U32 au32TgtLum[4];
	XM_U32 u32FlashExtCfgEn;		// 0xA55A: Enable
	XM_U32 u32GammaAgc;		// bit7: En  bit0~bit6: Choice
	XM_U32 u32GamAgcStartLvl;	// > StartLevel  use AgcGamma
	XM_U32 u32GamAgcEndLvl;		// < EndLevel use NormalGamma
	XM_S32 s32Rvs;				// Bit0: Infrared swap
}CAM_INIT_DATA;

//·µ»ØVI´°¿Ú³ß´çµÄ½á¹¹Ìå
typedef struct st_VI_WIN_S
{
    XM_U32 u32Width;
    XM_U32 u32Height;
    XM_U32 u32TotalWidth;
    XM_U32 u32TotalHeight;
}VI_WIN_S;


// ÉèÖÃ°×Æ½ºâ²ÎÊý
int camera_set_wb_mode(unsigned int mode);


/*************************************************************************
º¯Êý¹¦ÄÜ:	»ñÈ¡/ÉèÖà ÈÕҹģʽ
ÊäÈë²ÎÊý:	0:	Auto
				1:    Color
				2: 	BW
note:
*************************************************************************/
int camera_get_dnc_mode(XM_U32 *pMode);
int camera_set_dnc_mode(unsigned int mode);


// »ñȡ֧³ÖµÄÆØ¹âµÈ¼¶Êý
// ·µ»ØÖµ<0£¬»ñȡʧ°Ü£¬>=0±íʾµÈ¼¶Êý£¬¾ßÌåµÈ¼¶±£´æÔÚÊý×éspeedsÖС£
// speedsÊý×鳤¶È±ØÐë×ã¹»´ó£¬È¡16²î²»¶àÁË¡£
int camera_get_exposure_speeds(int vstd, unsigned int *speeds);


/*************************************************************************
º¯Êý¹¦ÄÜ:	ÆØ¹âģʽÉèÖÃ
ÊäÈë²ÎÊý:	level:	0		×Ô¶¯ÆØ¹â
						1~9		ÊÖ¶¯ÆØ¹â(¹Ì¶¨¼¸µµ)	
				value1:	ÆØ¹âÏÂÏÞ(min,us)
				value2:	ÆØ¹âÉÏÏÞ(max,us)
note:	
	×Ô¶¯ÆØ¹â(ÉÏÏÂÏÞÎÞЧ)  		level :0
	ÊÖ¶¯ÆØ¹â(¹Ì¶¨¼¸µµ)			level :1~9
*************************************************************************/
int camera_get_exposure_level(int *pLevel, XM_U32 *pValue1, XM_U32 *pValue2);
int camera_set_exposure_level(int level, unsigned int value1, unsigned int value2);

/*******************************************************************
º¯Êý¹¦ÄÜ:	ÉèÖÃ/»ñÈ¡×Ô¶¯ÔöÒæ
ÊäÈë²ÎÊý:	s32GainMax:	×î´óÔöÒæ	( 0~100	def: 50)
				s32AutoEn:	AutoGain ʹÄÜ	(0~1		def: 1)
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0 	³É¹¦
				-1	³ö´í
Note:			Lycai
*******************************************************************/
int camera_get_gain(int *pGainLevel, int *pAutoEn);
int camera_set_gain(int s32GainMax, int s32AutoEn);


// ÉèÖòο¼µçƽֵ
// level:²Î¿¼µçƽֵ£¬È¡Öµ0-100¡£
int camera_get_refrence_level(void);
int camera_set_refrence_level(int level);


// »ñȡƽ¾ùÁÁ¶ÈÖµ
int camera_get_luminance(void);

//»ñȡ״̬Âë,>=0±íʾ״̬Õý³£,<0±íʾ״̬Òì³£
int camera_get_status(int *status);

//ÓÃÓÚµ÷ÊÔ
int camera_debug(char *cmd);

//·µ»Øxm 2a¿âµÄ°æ±¾ÐÅÏ¢
int camera_aew_get_version(char *str);

//·µ»ØWBÔöÒæ
void  camera_get_wb_params(void *param);

//ÉèÖÃ×Ô¶¯¹âȦģʽ
int camera_set_aperture(unsigned int mode);

//ÉèÖñ³¹â²¹³¥Ä£Ê½
int camera_get_blc(XM_U32 *pMode);
int camera_set_blc(unsigned int mode);

// ÉèÖÃÇ龰ģʽ
int camera_get_scene(CAMERA_SCENE* pScene);
int camera_set_scene(CAMERA_SCENE scene);


/*******************************************************************
º¯Êý¹¦ÄÜ:	»ñÈ¡µç×ÓÂý¿ìÃÅ״̬(µ±Ç°)
ÊäÈë²ÎÊý:	ÎÞ
Êä³ö²ÎÊý:	*pu8EShutterSts:
					 fps' = fps*0x10/gu8EshutterSts
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	ʧ°Ü
*******************************************************************/
int camera_get_es_status(XM_U8 *pu8EShutterSts);



/*************************************************************************
º¯Êý¹¦ÄÜ: 	½µÖ¡¹¦ÄÜ£¨Ê¹ÄÜ£©
ÊäÈë²ÎÊý:	es_shutter: 
					0:		1/1
					2:		1/2
					4:		1/3
					6:		1/4
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_get_es_shutter(int *pEshutterLevel);
int camera_set_es_shutter(int es_shutter);
///¿ªÆôÈÕ¹âµÆ·ÀÉÁ¹¦ÄÜ
//en = 0 ²»¿ªÆô en= 1¿ªÆô
int camera_get_reject_flicker(int *pEn);
int camera_set_reject_flicker(int en);

// ÈÕÒ¹Çл»ãÐÖµ
int camera_get_dnc_thr(int *pDnc_thr);
int camera_set_dnc_thr(int dnc_thr); 		//ÈÕҹת»»ãÐÖµ 10-50£¬Ä¬ÈÏ30

/*******************************************************************
º¯Êý¹¦ÄÜ:	»ñÈ¡/ÉèÖà ÈÕÒ¹µ÷½ÚÁéÃô¶È
ÊäÈë²ÎÊý:	ÎÞ
Êä³ö²ÎÊý:	* pLevel:	µÈ¼¶(1~10)
·µ»Ø²ÎÊý:	0 	³É¹¦
				-1	³ö´í
Note:			Lycai
*******************************************************************/
int camera_get_ae_sensitivity(int*pLevel);
int camera_set_ae_sensitivity(int ae_sensitivity); ///aeÁéÃô¶ÈÅäÖà 1-10£¬Ä¬ÈÏΪ5

/*******************************************************************
º¯Êý¹¦ÄÜ:	»ñÈ¡/ÉèÖà AEµ÷½ÚÁéÃô¶È
ÊäÈë²ÎÊý:	ÎÞ
Êä³ö²ÎÊý:	* pLevel:	µÈ¼¶(1~10)
·µ»Ø²ÎÊý:	0 	³É¹¦
				-1	³ö´í
Note:			Lycai
*******************************************************************/
int camera_get_ae_sensitivity2(int* pLevel);
int camera_set_ae_sensitivity2(int level);


//int camera_set_RGBGain(int channel, int gainval);//ÉèÖÃRGBÔöÒæ1 REDͨµÀ  2 GREENͨµÀ  3BLUEͨµÀ
int camera_get_Infrared(void);//»ñÈ¡É豸ºìÍâ״̬ 1±íʾºìÍâ´ò¿ª 0±íʾ¹Ø±Õ 2±íʾоƬ²»Ö§³Ö
int camera_set_Ircut(int mode);//ÅäÖÃircut״̬
int camera_save_debug_cmd(char *cmd);

/*******************************************************************
º¯Êý¹¦ÄÜ:	»ñÈ¡/ÉèÖÃÈÕÒ¹½µÔëµÈ¼¶
ÊäÈë²ÎÊý:	daynight:		0(Day)	1(Night)
				nf_level: 		0~5   Def:3
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0 	³É¹¦
				-1	³ö´í
Note:			Lycai
*******************************************************************/
int CameraGetNFLevel(int daynight, int *pNrLevel);
int CameraSetNFLevel(int daynight, int nf_level);
//swap 0:Õý³£Ðò 1£º·´Ðò
int CameraGetSwapICR(int *pSwap);
int CameraSwapICR(int swap);

int test_movement(int x,int y,int z);

int movement_ircut(int level);

int movement_gpioset(int addr,int mode);

int movement_addrset(MOVEMENT_DATA_S *);

// DWDR
int camera_get_wdr(int* pLevel, int* pEnable);
int camera_set_wdr(int level, int enable);


int Camera_Get_StyleMode(int *pChoice);
int Camera_Set_StyleMode(int choice);		//ÊäÈë²ÎÊý:   0, 1, 2

int Camera_Get_DebugFile(char *fliename, unsigned int choice, unsigned int depth);

int Movement_LumTarget_Change(int lum_now);		//¸Ä±äÄ¿±êÁÁ¶È

int Camera_Get_DebugFile(char *fliename, unsigned int choice, unsigned int depth);

int camera_scan_task(XM_U32 u32Tms);

// IR-CUT ģʽ
int camera_get_ircut_mode(int *pIrcutMode);
int camera_set_ircut_mode(int ircut_mode);

// ¾µÏñ
int camera_get_mirror(int *pMirror);
int camera_set_mirror(int mirror);

// ·­×ª
int camera_get_flip(int *pFlip);
int camera_set_flip(int flip);


/*************************************************************************
º¯Êý¹¦ÄÜ: 	ͼÏñÑÕÉ«(Web) ½Ó¿Ú
ÊäÈë²ÎÊý:	channel:	 ÎÞЧ
				pColor:
					Brightness: ÁÁ¶È(0~100)
					Contrast: ¶Ô±È¶È(0~100)
					Saturation: ±¥ºÍ¶È(0~100)
					Hue:	É«¶È(0~100)
					Acutance: Èñ»¯(0~15)
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_get_color(int channel, CAMERA_COLOR * pColor);
int camera_set_color(int channel, CAMERA_COLOR * pColor);


/*************************************************************************
º¯Êý¹¦ÄÜ: 	»ñÈ¡/ÉèÖà ÊÓÆµÖÆÊ½(PAL/NTSC)
ÊäÈë²ÎÊý:	channel:	 ÎÞЧ
				u32Vstd: 0:(UN)
						1:PAL
						2:NTSC
Êä³ö²ÎÊý:	*pu32Vstd	0:(UN)
							1:PAL
							2:NTSC
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_get_vstd(int channel,unsigned int *pu32Vstd);
int camera_set_vstd(int channel,unsigned int u32Vstd);



// u32Level: 	0~100
// def:		0
/*************************************************************************
º¯Êý¹¦ÄÜ: 	»ñÈ¡/ÉèÖà ȥα²Ê
ÊäÈë²ÎÊý:	u32Level: 	0~100(def:0)
Êä³ö²ÎÊý:	pu32Level:	µ±Ç°µÈ¼¶
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_antiFalseColor(unsigned int u32Level);
int camera_get_antiFalseColor(unsigned int *pu32Level);

// u32Level: 	0~100
// def:		0
/*************************************************************************
º¯Êý¹¦ÄÜ: 	»ñÈ¡/ÉèÖà ȥ¾â³Ý
ÊäÈë²ÎÊý:	u32Level: 	0~100(def:0)
Êä³ö²ÎÊý:	pu32Level:	µ±Ç°µÈ¼¶
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_sawtooth(unsigned int u32Level);
int camera_get_sawtooth(unsigned int *pu32Level);

//·ÀºìÍâ¹ýÆØ¹¦ÄÜ
//Enable = 0 ²»¿ªÆô Enable = 1¿ªÆô
int camera_set_hlc(int Enable);
int camera_get_hlc(int *pEnable);


/*************************************************************************
º¯Êý¹¦ÄÜ: 	camera_set_format
ÊäÈë²ÎÊý:	chn
				u32Type: 0MainStream	1:SubStream1	2:SubStream2
				pstFormat: encode paramer
Êä³ö²ÎÊý:	none
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_format(int chn, unsigned int u32Type,const CAPTURE_FORMAT *pstFormat);


/*************************************************************************
º¯Êý¹¦ÄÜ: 	½µÖ¡À©Õ¹¹¦ÄÜ(XM320ʹÓÃ)
ÊäÈë²ÎÊý:	u8Mode:		1: Read 	
							2: Write
				pu8Status: 			fps
							0:		1/1
							2:		1/2
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_es_shutter_ex(XM_U8 u8Mode, XM_U8 *pu8Status);


/*************************************************************************
º¯Êý¹¦ÄÜ: 	²úÆ·ÐͺÅ(¶Á/д)
ÊäÈë²ÎÊý:	u8Mode:		1: Read 	
							2: Write
				*pu32ProductType:	²úÆ·ÐͺÅ
Êä³ö²ÎÊý:	*pu32ProductType:	²úÆ·ÐͺÅ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_productType(XM_U8 u8Mode, XM_U32 *pu32ProductType);



/*************************************************************************
º¯Êý¹¦ÄÜ: 	»ñÈ¡/ÉèÖÃÄÚ²¿²ÎÊý
ÊäÈë²ÎÊý:	pstCamearPara: Ö¸Ïò²ÎÊýµØÖ·
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_para_get(CAM_INIT_DATA *pstCamearPara);
int camera_para_set(CAM_INIT_DATA *pstCamearPara);



/*************************************************************************
º¯Êý¹¦ÄÜ: 	ÉèÖÃ/»ñÈ¡ ÏÞÖÆAWBÉ«ÎÂ
ÊäÈë²ÎÊý:	u8MinCt: 	×îµÍÉ«ÎÂ	bit7: En  bit0~bit6: Choice
			u32Start: 	¿ªÊ¼ÏÞÖÆÔöÒæ(x1024)
			u32End: 	·Å¿ªÏÞÖÆÔöÒæ(x1024)
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_awbLimit_set(XM_U8 u8MinCt, XM_U32 u32Start, XM_U32 u32End);
int camera_awbLimit_get(XM_U8 *pu8MinCt, XM_U32 *pu32Start, XM_U32 *pu32End);

/*************************************************************************
º¯Êý¹¦ÄÜ: 	ÉèÖÃ/»ñÈ¡ BurstʹÄÜ(BW)
ÊäÈë²ÎÊý:	u8Enable: 0:Disable 	1:Enable
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_bwBurst_set(XM_U8 u8Enable);
int camera_bwBurst_get(XM_U8 *pu8Enable);



int camera_get_vdaMovState(XM_U32 *pData);


int camera_set_wbRB(XM_U8 u8Data);
int camera_get_wbRB(XM_U8 *pu8Data);

int camera_set_wbGM(XM_U8 u8Data);
int camera_get_wbGM(XM_U8 *pu8Data);

int camera_set_encoderinfo(XM_U8 *pu8Dta);

/*************************************************************************
º¯Êý¹¦ÄÜ:	»ñÈ¡ÈÕҹ״̬
Êä³ö²ÎÊý:	pu8Mode:
					0:	Color
					1:    BW
note:
*************************************************************************/
int camera_get_dn_state(XM_U8 *pu8Mode);


/*************************************************************************
º¯Êý¹¦ÄÜ:	±àÂë/ÖÆÊ½/·Ö±æÂÊ Ä£Ê½Çл»
Êä³ö²ÎÊý:	u8Mode:
					0x00:AHD	0x01:CVI		0x02:TVI		0x10:XVI
				u8VstdMode:	
					1: PAL	2:NTSC
				u8RlstMode:
					0:1M 1:2M 3:3M 4:4M 5:5M
note:
*************************************************************************/
int camera_set_isp_para(XM_U8 u8Mode, XM_U8 u8VstdMode, XM_U8 u8RlstMode);
int camera_get_isp_para(XM_U8 *pu8Mode);


int camera_set_language(int s32Language);



/*************************************************************************
º¯Êý¹¦ÄÜ: 	ÅäÖÃ/»ñÈ¡ LEDģʽ
ÊäÈë²ÎÊý:	ps32Mode:	0xAB(	A:	0: IR   1: WL   --- ½ö¶ÁȡʱÓÐЧ
							 	B:	0:Auto  1:Manual  2:Intelligence)
				ps32State: 	0:Close 1:Open
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_ledMode(int s32Mode, int s32State);
int camera_get_ledMode(int *ps32Mode, int *ps32State);

/*************************************************************************
º¯Êý¹¦ÄÜ: 	ÅäÖà LEDÀàÐÍ
ÊäÈë²ÎÊý:	s32Type:	0: IR   1: WL  2:Double
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_ledType(int s32Type);
int camera_get_ledType(int *ps32Type);




/*****************************************************************************
º¯Êý¹¦ÄÜ:	Íⲿµ÷ÊÔÑ¡Ôñgamma
ÊäÈë²ÎÊý:    	u32Gamma: [High Byte->Low Byte] = [u8IdxWgt(Idx2)  u8Idx2  u8Idx1]
				u8Idx1:	0: 		disable gamma  (ÏßÐÔ)
						1~15:	LinearGamma
						128~255:	WdrGamma
				u8Idx2:	0: 		disable gamma  (ÏßÐÔ)
						0~15:	LinearGamma
						128~255:	WdrGamma
				u8IdxWgt: (0~255)
						u8Idx1 Weight: 255-u8IdxWgt
						u8Idx2 Weight: u8IdxWgt				
·µ»Ø²ÎÊý:    0: ³É¹¦ -1: ʧ°Ü
*****************************************************************************/
int camera_set_gamma(XM_U32 u32Gamma);
int camera_get_gamma(XM_U32 *pu32Gamma);


int camera_set_smartVda(XM_U8 u8MovFlg);
int camera_get_smartVda(XM_U8 *pu8MovFlg);


/*************************************************************************
º¯Êý¹¦ÄÜ: 	»ñÈ¡Îȶ¨×´Ì¬(µÆÅÝ)
ÊäÈë²ÎÊý:	ÎÞ
Êä³ö²ÎÊý:	pu8StateFlg
					0: Îȶ¨
					1: ²Ù×÷LED
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_get_stabState(XM_U8 *pu8StateFlg);

/*************************************************************************
º¯Êý¹¦ÄÜ: 	»ñÈ¡ ±¨¾¯LED³ÖÐøÊ±¼ä(ms)
ÊäÈë²ÎÊý:	s32Tms:  ³ÖÐøÊ±¼ä(ms) ----(¾«¶È100ms)
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_ledHold(int s32Tms);


/*************************************************************************
º¯Êý¹¦ÄÜ: 	2Mץͼ½Ó¿Ú
ÊäÈë²ÎÊý:	ÎÞ
Êä³ö²ÎÊý:	pstSnapVFInfo
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_snap(VIDEO_FRAME_INFO_S *pstSnapVFInfo);


/*************************************************************************
º¯Êý¹¦ÄÜ: 	ÅäÖÃͼÏñ×ø±ê
ÊäÈë²ÎÊý:	mode: ±£Áô
				stCoord: ×ø±êÐÅÏ¢
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_coord(int mode, COORD_S stCoord);

/*************************************************************************
º¯Êý¹¦ÄÜ: 	ÅäÖÃͼÏñ×ø±ê
ÊäÈë²ÎÊý:	pstViWin 
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_get_vi_resolution(VI_WIN_S *pstViWin);


int camera_init(XM_U32 *pu32ProductType);



typedef struct st_AIRSLT_INFO_S
{
    XM_U8 u8AlarmFlg;	//1: ´¥·¢±¨¾¯   	0:δ´¥·¢
    XM_U32 u32TargetNum;	// Ä¿±ê¸öÊý;
    XM_U32 u32Info[64];		// ±¨¾¯ÐÅÏ¢(×ø±êµÈ)
}AIRSLT_INFO_S;


/*************************************************************************
º¯Êý¹¦ÄÜ: 		ÅäÖÃÖÇÄܱ¨¾¯ÐÅÏ¢(ÈËÐμì²â)
ÊäÈë²ÎÊý:		u8Cmd:  ±¨¾¯Âë
			pstAiInfoRlst:	±¨¾¯ÐÅÏ¢
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_aiInfo(XM_U8 u8Cmd, AIRSLT_INFO_S *pstAiInfoRlst);



/*************************************************************************
º¯Êý¹¦ÄÜ: 		ÅäÖÃÈËÐηÀ¹ýÆØÊ¹ÄÜ
ÊäÈë²ÎÊý:		en:	1:ʹÄÜ   0:½ûÄÜ
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_set_aeweight(int en);
int camera_get_aeweight(int *ps32En);


/*************************************************************************
º¯Êý¹¦ÄÜ:		ÅäÖÃÈíºìÍâãÐÖµ
ÊäÈë²ÎÊý:		dnc_thr:
			 1~5(default:3) (ԽС£¬Ô½ÔçÇкڰ×)
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1: ³ö´í
*************************************************************************/
int camera_set_softIr_thr(int dnc_thr);


#ifdef SOC_NONE
int camera_get_txAttr(XM_U8 *pu8En, VENC_TX_ATTR *pstTxAttr);
int camera_set_txAttr(XM_U8 u8En, VENC_TX_ATTR stTxAttr);
#endif




//#if(defined SOC_ALIOS) || (defined SOC_XMSDK)
typedef struct xm_CAMERACFG_TO_ISP
{
	unsigned int u32ProductType;
	unsigned int u32StdType;		// 0: unknow 1:PAL 2:NTSC
	unsigned int u32RsltType;		// 0: 720P	1:1080P	2:960P 3:1536P		101:P1080_S1 	102:P1080_S2

	/****************************
	u32IRLed:  
		bit31:
			0	not use
			1	use
		bit0:
			0  	ÆÕͨģʽ£¨ºìÍâͬ²½/×Ô¶¯Í¬²½... (Ó²¼þ¿ØÖƺìÍâµÆ)£©
			1	Èí¼þ¿ØÖƵÆ
		bit4:
			0	Èí¹âÃô
			1	Ó²¹âÃô
	****************************/
	unsigned int u32IRLed;
	unsigned int au32RsltCh[4][4];	// (Ch0_Width Ch0_Height Ch1_Width Ch1_Height) * 4

	/****************************
	u32Infrared:  
		bit31:
			0	not use
			1	use
		bit0: InfraredSwap
		bit8~bit15: InfraredGPIO (0xFF: choice by source)
	****************************/
	unsigned int u32Infrared;

	/****************************
	u32IrCut:  
		bit31:
			0	not use
			1	use
		bit0: IRCUT Swap
		bit8~bit15: InfraredGPIO (0xFF: choice by source)
	****************************/
	unsigned int u32IrCut;
	unsigned int au32Rsv[10];
}CAMERACFG_TO_ISP;

/*************************************************************************
º¯Êý¹¦ÄÜ: 	´´½¨ISPÏà¹ØÒµÎñ(Æô¶¯Í¼ÏñÏà¹Ø´¦Àí)
ÊäÈë²ÎÊý:	pstViWin 
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:	0:	³É¹¦
				-1:	³ö´í
*************************************************************************/
int camera_isp_task(CAMERACFG_TO_ISP *pstCfg);


/*************************************************************************
º¯Êý¹¦ÄÜ:	ͼÏñÏà¹Ø½øÐÐÍ˳ö²Ù×÷
ÊäÈë²ÎÊý:	ÎÞ
Êä³ö²ÎÊý:	ÎÞ
·µ»Ø²ÎÊý:		0:	³É¹¦
			-1:	³ö´í
*************************************************************************/
int camera_exit(void);


/***************************************************************
º¯Êý¹¦ÄÜ:	È¥Îí¹¦ÄÜ
ÊäÈë²ÎÊý:	enable:	´ò¿ª¹Ø±Õ[0,1]
				level:	Ç¿¶ÈµÈ¼¶[0,100]
·µ»Ø²ÎÊý:	0:		³É¹¦
				-1:		³ö´í
***************************************************************/
int Camera_SetClearFog(int enable, int level);


//#endif

#ifdef __cplusplus
}
#endif

#endif