firmware/br-ext-chip-xiongmai/package/xiongmai-osdrv2/files/include/isp/xm_ae_comm.h

299 lines
7.9 KiB
C
Raw Blame History

/******************************************************************************
Copyright (C), 2015-2020, XM. Co., Ltd.
******************************************************************************
File Name : xm_ae_common.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 __XM_AE_COMM_H__
#define __XM_AE_COMM_H__
#include "xm_type.h"
#define XM_AE_LIB_NAME "xm_ae_lib"
#define XM_AWB_LIB_NAME "xm_awb_lib"
/************************** ae ctrl cmd **************************************/
typedef enum xm_AE_CTRL_CMD_E
{
AE_DEBUG_ATTR_SET,
AE_DEBUG_ATTR_GET,
AE_CTRL_BUTT,
} AE_CTRL_CMD_E;
typedef struct xm_AE_DBG_ATTR_S
{
XM_BOOL bAeBypass;
XM_BOOL bFrameEndUpdateMode;
XM_U32 u32MaxAgain;
XM_U32 u32MinAgin;
XM_U32 u32MaxDgain;
XM_U32 u32MinDgain;
XM_U32 u32MaxIspDgain;
XM_U32 u32MinIspDgain;
XM_U32 u32MaxIntTime;
XM_U32 u32MinIntTime;
XM_U32 u32Compensation;
#if 0
XM_U32 BlackLevel_R;
XM_U32 BlackLevel_Gr;
XM_U32 BlackLevel_Gb;
XM_U32 BlackLevel_B;
#endif
XM_U32 u32Hist01;
XM_U32 u32Hist12;
XM_U32 u32Hist34;
XM_U32 u32Hist45;
XM_BOOL bManualExposureEn;
XM_BOOL bManualAgainEn;
XM_BOOL bManualDgainEn;
XM_BOOL bManualIspDgainEn;
XM_U32 u32ManualExposureLines;
XM_U32 u32ManualAgain;
XM_U32 u32ManualDgain;
XM_U32 u32ManualIspDgain;
XM_U32 au32AeWeights[255];
}AE_DBG_ATTR_S;
typedef struct xm_AE_DBG_STATUS_S
{
XM_U32 u32FrmNumBgn;
XM_U32 u32FullLines;
XM_U32 u32IntTime;
XM_U32 u32Again;
XM_U32 u32AgainShift;
XM_U32 u32Dgain;
XM_U32 u32DgainShift;
XM_U32 u32IspDgain;
XM_U32 u32IspDgainShift;
XM_U32 u32Exposure;
XM_U32 u32Increment;
XM_U32 u32HistBalance;
XM_S32 u32HistError;
XM_U32 u32ExpoureStep;
XM_U32 u32FrmNumEnd;
}AE_DBG_STATUS_S;
/************************** sensor's interface to ae *********************/
/* eg: 0.35db, enAccuType=AE_ACCURACY_DB, f32Accuracy=0.35
* and the multiply of 0.35db is power(10, (0.35/20))
* eg: 1/16, 2/16, 3/16 multiplies, enAccuType=AE_ACCURACY_LINEAR, f32Accuracy=0.0625
* eg: 1,2,4,8,16 multiplies, enAccuType=AE_ACCURACY_DB, f32Accuracy=6
*/
typedef enum xm_AE_ACCURACY_E
{
AE_ACCURACY_DB = 0,
AE_ACCURACY_LINEAR,
AE_ACCURACY_TABLE,
AE_ACCURACY_BUTT,
} AE_ACCURACY_E;
typedef struct xm_AE_ACCURACY_S
{
AE_ACCURACY_E enAccuType;
float f32Accuracy;
} AE_ACCURACY_S;
typedef struct xm_AE_SENSOR_DEFAULT_S
{
XM_U8 u8AeCompensation;
XM_U8 u8UpdateMode; // 0: Old 1:New(sns_regs)
XM_U32 u32LinesPer500ms;
XM_U32 u32FlickerFreq;
XM_U32 u32FullLinesStd;
XM_U32 u32MaxIntTime; /* unit is line */
XM_U32 u32MinIntTime;
XM_U32 u32MaxIntTimeTarget;
XM_U32 u32MinIntTimeTarget;
XM_U32 u32MaxAgain;
XM_U32 u32MinAgain;
XM_U32 u32MaxAgainTarget;
XM_U32 u32MinAgainTarget;
AE_ACCURACY_S stAgainAccu;
XM_U32 u32MaxDgain;
XM_U32 u32MinDgain;
XM_U32 u32MaxDgainTarget;
XM_U32 u32MinDgainTarget;
AE_ACCURACY_S stDgainAccu;
XM_U32 u32MaxISPDgain;
XM_U32 u32MinISPDgain;
XM_U32 u32MaxISPDgainTarget;
XM_U32 u32MinISPDgainTarget;
XM_U32 u32ISPDgainShift;
/****** <20><><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>*****/
XM_U32 u32LinePixel; // 1<><31><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
XM_U32 u32TimeFinePoint; // < u32TimeFinePoint<6E><74><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8>
/********************************
u32UpdateCfg:
bit[0~7] period
bit[8~15] shut
bit[16~23] snsGain
bit[24~31] ispGain
********************************/
XM_U32 u32UpdateCfg;
XM_U32 u32MaxAllgain;
XM_U32 u32InitExp[4];
/********************************
u16AlgMode:
0x00: fix V1
0x01: first V1, after stab bypass AE
0x10: fix V2
0x11: first V2, after stab bypass AE
0x20: first V2, after stab V1
********************************/
XM_U16 u16AlgMode;
XM_BOOL bDelayCfg;
} AE_SENSOR_DEFAULT_S;
typedef struct xm_AE_SENSOR_DEFAULT_V2_S
{
XM_U32 u32MinIntTime;
XM_U32 u32MaxIntTime; /* unit is line */
XM_U32 u32MinAgain;
XM_U32 u32MaxAgain;
XM_U32 u32MinDgain;
XM_U32 u32MaxDgain;
XM_U32 u32MaxISPDgain;
/********************************
u32UpdateCfg:
bit[0~7] period
bit[8~15] shut
bit[16~23] snsGain
bit[24~31] ispGain
********************************/
XM_U32 u32UpdateCfg;
XM_U32 u32InitExp[4];
/********************************
u16AlgMode:
0x00: fix V1
0x01: first V1, after stab bypass AE
0x10: fix V2
0x11: first V2, after stab bypass AE
0x20: first V2, after stab V1
********************************/
XM_U16 u16AlgMode;
} AE_SENSOR_DEFAULT_V2_S;
typedef struct xm_AE_SENSOR_GAININFO_S
{
XM_U32 u32SnsTimes; //10bit precision
XM_U32 u32GainDb; // gain step in db
} AE_SENSOR_GAININFO_S;
typedef struct xm_AE_SENSOR_SHUTINFO_S
{
XM_U64 u64Exp; //10bit precision
XM_U32 u32Ofst; //10bit precision
XM_U32 u32ShutDb;
} AE_SENSOR_SHUTINFO_S;
typedef enum xm_ISP_SNS_TYPE_E
{
ISP_SNS_I2C_TYPE = 0,
ISP_SNS_SSP_TYPE,
ISP_SNS_TYPE_BUTT,
} ISP_SNS_TYPE_E;
typedef struct hiISP_I2C_DATA_S
{
XM_BOOL bUpdate;
XM_U8 u8DelayFrmNum;
XM_U8 u8IntPos;
XM_U32 u32RegAddr;
XM_U32 u32Data;
} ISP_I2C_DATA_S;
typedef struct hiISP_SSP_DATA_S
{
XM_BOOL bUpdate;
XM_U8 u8DelayFrmNum;
XM_U8 u8IntPos;
XM_U32 u32DevAddr;
XM_U32 u32DevAddrByteNum;
XM_U32 u32RegAddr;
XM_U32 u32RegAddrByteNum;
XM_U32 u32Data;
XM_U32 u32DataByteNum;
} ISP_SSP_DATA_S;
typedef struct xm_ISP_SNS_REGS_INFO_S
{
ISP_SNS_TYPE_E enSnsType;
XM_U32 u32RegNum;
XM_U8 u8Cfg2ValidDelayMax;
union
{
ISP_I2C_DATA_S *pstI2CData;
ISP_SSP_DATA_S *pstSspData;
};
} ISP_SNS_REGS_INFO_S;
typedef struct xm_AE_SENSOR_EXP_FUNC_S
{
XM_S32(*pfn_cmos_get_ae_default)(AE_SENSOR_DEFAULT_S *pstAeSnsDft);
/* the function of sensor set fps */
XM_VOID(*pfn_cmos_fps_set)(XM_U8 u8Fps, AE_SENSOR_DEFAULT_S *pstAeSnsDft);
XM_S32(*pfn_cmos_fps_get)(XM_U8 *pu8Fps);
XM_VOID(*pfn_cmos_slow_framerate_set)(XM_U16 u16SlowFrameRate, AE_SENSOR_DEFAULT_S *pstAeSnsDft);
/* while isp notify ae to update sensor regs, ae call these funcs. */
XM_VOID(*pfn_cmos_inttime_update)(XM_U32 u32IntTime);
XM_VOID(*pfn_cmos_gains_update)(XM_U32 u32Again, XM_U32 u32Dgain);
XM_VOID(*pfn_cmos_shut_calc_table)(XM_S32 s32IntTime,AE_SENSOR_SHUTINFO_S *pstAeSnsShutInfo);
XM_VOID(*pfn_cmos_gains_update2)(XM_S32 s32DGain,const AE_SENSOR_DEFAULT_S *pstAeSnsDft);
XM_VOID (*pfn_cmos_again_calc_table)(XM_U32 u32InTimes, AE_SENSOR_GAININFO_S *pstAeSnsGainInfo);
XM_VOID (*pfn_cmos_dgain_calc_table)(XM_U32 u32InTimes, AE_SENSOR_GAININFO_S *pstAeSnsGainInfo);
XM_S32(*pfn_cmos_get_sns_reg_info)(ISP_SNS_REGS_INFO_S *pstSnsRegsInfo);
XM_S32(*pfn_cmos_write_register)(XM_U32 addr, XM_U32 data);
XM_S32(*pfn_cmos_read_register)(XM_U32 addr);
} AE_SENSOR_EXP_FUNC_S;
typedef struct xm_AE_SENSOR_REGISTER_S
{
AE_SENSOR_EXP_FUNC_S stSnsExp;
} AE_SENSOR_REGISTER_S;
typedef struct xm_ISP_AE_VARLED_REGISTER_S
{
XM_BOOL bEnable;
ISP_OP_TYPE_E enOpType;
XM_U32 u32ManualLvl;
XM_U32 u32LvlNow; //RO
XM_U32 u32AutoSpeed; //0~255(default:128)
XM_U32 u32MaxLvl;
XM_U32 u32MinLvl;
XM_U32 u32ExpThreshold_1; // <: weaken
XM_U32 u32ExpThreshold_2; // >: enhance
XM_S32(*pfn_varLED_init)(XM_VOID);
XM_VOID(*pfn_varLED_update)(XM_U32 u32Lvl);
XM_VOID(*pfn_varLED_calc_table)(XM_U32 u32InTimes, AE_SENSOR_GAININFO_S *pstAeSnsGainInfo);
}ISP_AE_VARLED_REGISTER_S;
#endif