/******************************************************************************
 Copyright (C), 2015-2020, XM. Co., Ltd.
******************************************************************************
File Name	: mpi_isp.h
Version 		: Initial Draft
Author		: XM Isp software group
Created 		: 2015/6/27

Description 	: The common data type defination
Function List	:
History :
1.Date		: 2015/6/27
  Author		: Lycai
  Modification	: creat
******************************************************************************/


#ifndef __MPI_ISP_H__
#define __MPI_ISP_H__

#include "xm_comm_isp.h"
#include "xm_comm_sns.h"
#include "xm_comm_3a.h"
#include "xm_comm_video.h"


/* Firmware Main Operation */
XM_S32 XM_MPI_ISP_Init(ISP_DEV IspDev);
XM_S32 XM_MPI_ISP_MemInit(ISP_DEV IspDev);
XM_S32 XM_MPI_ISP_Run(ISP_DEV IspDev);
XM_S32 XM_MPI_ISP_Exit(ISP_DEV IspDev);

/*******************************************************************************************
º¯ÊýÃû³Æ: XM_MPI_ISP_SetVsyncIntEn
º¯Êý¹¦ÄÜ: ÉèÖÃÊäÈ볡ÖжÏʹÄÜ
ÊäÈë²ÎÊý: 		IspDev:   IspDev
			u8Mode:
				0:Disable(Ç¿ÖÆ)    
				1:Enable(Ç¿ÖÆ)    
				2:»Ö¸´(Ç¿ÖÆ¹Ø ֮ǰµÄ״̬)
Êä³ö²ÎÊý: ÎÞ
·µ»Ø²ÎÊý: -1: ʧ°Ü
		0: ³É¹¦
*******************************************************************************************/
XM_S32 XM_MPI_ISP_SetVsyncIntEn(ISP_DEV IspDev, XM_U8 u8Mode);

XM_S32 XM_MPI_ISP_GetChnAttr(ISP_CHN_ATTR_S *pstChnAttr);
XM_S32 XM_MPI_ISP_SetChnAttr(ISP_CHN_ATTR_S *pstChnAttr);

XM_S32 XM_MPI_ISP_GetFrame(VIDEO_FRAME_INFO_S *pstFrameInfo);
XM_S32 XM_MPI_ISP_ReleaseFrame(VIDEO_FRAME_INFO_S *pstFrameInfo);

XM_S32 XM_MPI_ISP_SensorRegCallBack(SENSOR_ID SensorId, const ISP_SENSOR_REGISTER_S *pstRegister);
XM_S32 XM_MPI_ISP_SensorUnRegCallBack(SENSOR_ID SensorId);


XM_S32 XM_MPI_ISP_SetModuleControl(const ISP_MODULE_CTRL_U *punModCtrl);
XM_S32 XM_MPI_ISP_GetModuleControl(ISP_MODULE_CTRL_U *punModCtrl);

XM_S32 XM_MPI_ISP_SetGammaAttr(const ISP_GAMMA_ATTR_S *pstGammaAttr);
XM_S32 XM_MPI_ISP_GetGammaAttr(ISP_GAMMA_ATTR_S *pstGammaAttr);


XM_S32 XM_MPI_ISP_SetBlackLevelAttr(const ISP_BLACKLVL_ATTR_S *pstBlackLevel);
XM_S32 XM_MPI_ISP_GetBlackLevelAttr(ISP_BLACKLVL_ATTR_S *pstBlackLevel);

/*******************************************************************************************
º¯ÊýÃû³Æ: XM_MPI_ISP_SetRegister
º¯Êý¹¦ÄÜ: ÅäÖüĴæÆ÷Ϊָ¶¨Öµ
ÊäÈë²ÎÊý: u32Addr: ÐèÒª²Ù×÷µÄµØÖ·
		u32Value: ¸ÃµØÖ·ÐèÒªÅäÖõÄÖµ
Êä³ö²ÎÊý: ÎÞ
·µ»Ø²ÎÊý: -1: ʧ°Ü
		0: ³É¹¦
×¢£º
	Èç´øÏµÍ³£¬»áÖØÐÂÓ³Éä
*******************************************************************************************/
XM_S32 XM_MPI_ISP_SetRegister(XM_U32 u32Addr, XM_U32 u32Value);

/*******************************************************************************************
º¯ÊýÃû³Æ: XM_MPI_ISP_GetRegister
º¯Êý¹¦ÄÜ: »ñÈ¡¼Ä´æÆ÷µÄÖµ
ÊäÈë²ÎÊý: u32Addr: ÐèÒª²Ù×÷µÄµØÖ·
		pu32Value: ´æ·Å¶ÁÈ¡µ½µÄÖµ
Êä³ö²ÎÊý: ÎÞ
·µ»Ø²ÎÊý: -1: ʧ°Ü
		0: ³É¹¦
×¢£º
	Èç´øÏµÍ³£¬»áÖØÐÂÓ³Éä
*******************************************************************************************/
XM_S32 XM_MPI_ISP_GetRegister(XM_U32 u32Addr, XM_U32 *pu32Value);

XM_S32 XM_MPI_ISP_SetPubAttr(ISP_DEV IspDev, const ISP_PUB_ATTR_S *pstPubAttr);
XM_S32 XM_MPI_ISP_GetPubAttr(ISP_DEV IspDev, ISP_PUB_ATTR_S *pstPubAttr);

XM_S32 XM_MPI_ISP_SetSaturationAttr(const ISP_SATURATION_ATTR_S *pstSatAttr);
XM_S32 XM_MPI_ISP_GetSaturationAttr(ISP_SATURATION_ATTR_S *pstSatAttr);

// DPC
XM_S32 XM_MPI_ISP_SetStDefectPixelAttr(ISP_STDPC_ATTR_S *pstStDPAttr);
XM_S32 XM_MPI_ISP_GetStDefectPixelAttr(ISP_STDPC_ATTR_S *pstStDPAttr);
XM_S32 XM_MPI_ISP_SetDyDefectPixelAttr(ISP_DYDPC_ATTR_S *pstDyDPAttr);
XM_S32 XM_MPI_ISP_GetDyDefectPixelAttr(ISP_DYDPC_ATTR_S *pstDyDPAttr);


XM_S32 XM_MPI_ISP_SetSharpenAttr(const ISP_SHARPEN_ATTR_S *pstSharpenAttr);
XM_S32 XM_MPI_ISP_GetSharpenAttr(ISP_SHARPEN_ATTR_S *pstSharpenAttr);

XM_S32 XM_MPI_ISP_GetSharpenV2Attr(ISP_SHARPENV2_ATTR_S *pstSharpenAttr);
XM_S32 XM_MPI_ISP_SetSharpenV2Attr(const ISP_SHARPENV2_ATTR_S *pstSharpenAttr);

XM_S32 XM_MPI_ISP_SetNRAttr(const ISP_2DNR_ATTR_S *pstNRAttr);
XM_S32 XM_MPI_ISP_GetNRAttr(ISP_2DNR_ATTR_S *pstNRAttr);

XM_S32 XM_MPI_ISP_Set3DNrAttr(const ISP_3DNR_ATTR_S *pstNRAttr);
XM_S32 XM_MPI_ISP_Get3DNrAttr(ISP_3DNR_ATTR_S *pstNRAttr);

XM_S32 XM_MPI_ISP_Set3DNrV2Attr(const ISP_3DNRV2_ATTR_S *pstNRAttr);
XM_S32 XM_MPI_ISP_Get3DNrV2Attr(ISP_3DNRV2_ATTR_S *pstNRAttr);

XM_S32 XM_MPI_ISP_GetNrInfo(ISP_NR_INFO_S *pstNRInfo);

XM_S32 XM_MPI_ISP_SetCSCAttr(const ISP_CSC_ATTR_S *pstCSCAttr);
XM_S32 XM_MPI_ISP_GetCSCAttr(ISP_CSC_ATTR_S *pstCSCAttr);

// ȥα²Ê
XM_S32 XM_MPI_ISP_SetAntiFalseColorAttr(const ISP_ANTI_FALSECOLOR_S *pstAntiFC);
XM_S32 XM_MPI_ISP_GetAntiFalseColorAttr(ISP_ANTI_FALSECOLOR_S *pstAntiFC);

XM_S32 XM_MPI_ISP_SetChromaAttr(ISP_CHROMA_ATTR_S *pstChromaAttr);
XM_S32 XM_MPI_ISP_GetChromaAttr(ISP_CHROMA_ATTR_S *pstChromaAttr);

XM_S32 XM_MPI_ISP_FpnInit(XM_U8 u8Mode);
XM_S32 XM_MPI_ISP_AWB_REFRESH(ISP_DEV IspDev);

//*pu32AeErr:  err*64
XM_S32 XM_MPI_ISP_StabStats(XM_U32 *pu32AeErr);


XM_S32 XM_MPI_ISP_SetDRCAttr(ISP_DEV IspDev, const ISP_DRC_ATTR_S *pstDRC);
XM_S32 XM_MPI_ISP_GetDRCAttr(ISP_DEV IspDev, ISP_DRC_ATTR_S *pstDRC);

XM_S32 XM_MPI_ISP_SetDeFogAttr(ISP_DEV IspDev, const ISP_DEFOG_ATTR_S *pstDefogAttr);
XM_S32 XM_MPI_ISP_GetDeFogAttr(ISP_DEV IspDev, ISP_DEFOG_ATTR_S *pstDefogAttr);

// ×¢²á³¡Öжϴ¥·¢µÄ»Øµ÷º¯Êý
XM_S32 XM_MPI_ISP_SetVsyncCallback(ISP_DEV IspDev, ISP_VSYNC_CALBAK_S *pstVsyncCalBak);
XM_S32 XM_MPI_ISP_GetVsyncCallback(ISP_DEV IspDev, ISP_VSYNC_CALBAK_S *pstVsyncCalBak);


/*******************************************************************************************
º¯ÊýÃû³Æ: XM_MPI_ISP_Memncpy
º¯Êý¹¦ÄÜ: Äڴ濽±´£¨Ö¸¶¨×Ö½ÚÊý£©
ÊäÈë²ÎÊý: pSrc: ԭʼÊý¾ÝÄÚ´æµØÖ·
			u32Num: Êý¾ÝµÄ´óС£¨×Ö½Ú£©
Êä³ö²ÎÊý: pDst: ¿½±´µÄÄ¿±êµØÖ·
·µ»Ø²ÎÊý: -1: ʧ°Ü
		0: ³É¹¦
*******************************************************************************************/
XM_S32 XM_MPI_ISP_Memncpy(XM_U8 *pDst, XM_U8 *pSrc, XM_U32 u32Num);


/*******************************************************************************************
º¯ÊýÃû³Æ: XM_MPI_ISP_Memset
º¯Êý¹¦ÄÜ: Ö¸¶¨Äڴ棬ָ¶¨´óС£¬ÅäÖóÉÖ¸¶¨Öµ
ÊäÈë²ÎÊý: pu8Addr: ÐèÒª²Ù×÷µÄÊý¾ÝµØÖ·
			u8Ch: Ö¸¶¨ÄÚ´æÐèÒªÅäÖóɵÄÖµ
			u32Num: µØÖ·´óС
Êä³ö²ÎÊý: ÎÞ
·µ»Ø²ÎÊý: -1: ʧ°Ü
		0: ³É¹¦
*******************************************************************************************/
XM_VOID XM_MPI_ISP_Memset(XM_U8 *pu8Addr,XM_U8 u8Ch, XM_U32 u32Num);


XM_S32 XM_MPI_ISP_GetDCIAttr(ISP_DEV IspDev, ISP_DCI_ATTR_S *pstDciAttr);
XM_S32 XM_MPI_ISP_SetDCIAttr(ISP_DEV IspDev, ISP_DCI_ATTR_S *pstDciAttr);

#endif /*__MPI_ISP_H__ */