mirror of https://github.com/OpenIPC/firmware.git
344 lines
8.3 KiB
C
344 lines
8.3 KiB
C
/******************************************************************************
|
|
Copyright (C), 2015-2020, XM. Co., Ltd.
|
|
******************************************************************************
|
|
File Name : xm_common_3a.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_COMM_3A_H__
|
|
#define __XM_COMM_3A_H__
|
|
|
|
#include "xm_common.h"
|
|
#include "xm_comm_isp.h"
|
|
|
|
|
|
|
|
#define MAX_REGISTER_ALG_LIB_NUM 2
|
|
|
|
typedef enum xm_ISP_ALG_MOD_E
|
|
{
|
|
ISP_ALG_AE = 0,
|
|
ISP_ALG_AF,
|
|
ISP_ALG_AWB,
|
|
ISP_ALG_ANTIFOG,
|
|
ISP_ALG_BLC,
|
|
ISP_ALG_DP,
|
|
ISP_ALG_DRC,
|
|
ISP_ALG_DEMOSAIC,
|
|
ISP_ALG_GAMMA,
|
|
ISP_ALG_GAMMAFE,
|
|
ISP_ALG_GE,
|
|
ISP_ALG_NEW_ANTIFOG,
|
|
ISP_ALG_NR,
|
|
ISP_ALG_SHARPEN,
|
|
ISP_ALG_SHADING,
|
|
|
|
ISP_ALG_BUTT,
|
|
} ISP_ALG_MOD_E;
|
|
|
|
typedef enum xm_ISP_CTRL_CMD_E
|
|
{
|
|
ISP_WDR_MODE_SET = 8000,
|
|
ISP_PROC_WRITE,
|
|
|
|
ISP_AE_FPS_BASE_SET,
|
|
ISP_AWB_ISO_SET, /* set iso, change saturation when iso change */
|
|
ISP_AE_INTTIME_GET,
|
|
ISP_AWB_INTTIME_SET,
|
|
|
|
ISP_CHANGE_IMAGE_MODE_SET,
|
|
ISP_CTRL_CMD_BUTT,
|
|
} ISP_CTRL_CMD_E;
|
|
|
|
typedef struct xm_ISP_CTRL_PROC_WRITE_S
|
|
{
|
|
XM_CHAR *pcProcBuff;
|
|
XM_U32 u32BuffLen;
|
|
XM_U32 u32WriteLen; /* The len count should contain '\0'. */
|
|
} ISP_CTRL_PROC_WRITE_S;
|
|
|
|
/******************************** AE *************************************/
|
|
/* the init param of ae alg */
|
|
typedef struct xm_ISP_AE_PARAM_S
|
|
{
|
|
SENSOR_ID SensorId;
|
|
|
|
XM_U32 u32MaxIspDgain;
|
|
XM_U32 u32MinIspDgain;
|
|
XM_U32 u32IspDgainShift;
|
|
XM_U8 u8FrameRate;
|
|
} ISP_AE_PARAM_S;
|
|
|
|
/* the statistics of ae alg */
|
|
typedef struct xm_ISP_AE_STAT_1_S
|
|
{
|
|
XM_U32 au32MeteringHist[16];
|
|
} ISP_AE_STAT_1_S;
|
|
|
|
typedef struct xm_ISP_AE_STAT_2_S
|
|
{
|
|
XM_U32 au32MeteringWin[AE_ZONE_ROW][AE_ZONE_COLUMN]; // Y_avg << 8
|
|
} ISP_AE_STAT_2_S;
|
|
|
|
typedef struct xm_ISP_AE_STAT_3_S
|
|
{
|
|
XM_U16 au16MeteringWinV2[ISP_V2_ZONE_ROW][ISP_V2_ZONE_COLUMN];
|
|
} ISP_AE_STAT_3_S;
|
|
|
|
|
|
typedef struct xm_ISP_AE_STAT_S
|
|
{
|
|
XM_U8 u8FrameRate;
|
|
XM_U32 u32FrameCnt;
|
|
XM_U32 au32MeteringWin[AE_ZONE_ROW][AE_ZONE_COLUMN]; // Y_avg << 8
|
|
} ISP_AE_STAT_S;
|
|
|
|
|
|
|
|
typedef struct xm_ISP_AE_INFO_S
|
|
{
|
|
XM_U32 u32FrameCnt; /* the counting of frame */
|
|
XM_U8 u8FrameRate;
|
|
ISP_AE_STAT_1_S stAeStat1;
|
|
ISP_AE_STAT_2_S stAeStat2;
|
|
ISP_AE_STAT_3_S stAeStat3;
|
|
} ISP_AE_INFO_S;
|
|
|
|
|
|
|
|
/* the final calculate of ae alg */
|
|
typedef struct xm_ISP_AE_RESULT_S
|
|
{
|
|
XM_U32 u32IspDgain;
|
|
XM_U32 u32IspDgainShift;
|
|
XM_U32 u32Iso;
|
|
XM_U32 u32Rsv;
|
|
/********************************
|
|
u32UpdateCfg:
|
|
bit[0~7] period
|
|
bit[8~15] shut
|
|
bit[16~23] snsGain
|
|
bit[24~31] ispGain
|
|
********************************/
|
|
XM_U32 u32UpdateCfg;
|
|
|
|
} ISP_AE_RESULT_S;
|
|
|
|
typedef struct xm_ISP_AE_EXP_FUNC_S
|
|
{
|
|
XM_S32 (*pfn_ae_init)(ISP_DEV IspDev, XM_S32 s32Handle, const ISP_AE_PARAM_S *pstAeParam);
|
|
XM_S32 (*pfn_ae_run)(ISP_DEV IspDev, XM_S32 s32Handle,
|
|
const ISP_AE_INFO_S *pstAeInfo,
|
|
ISP_AE_RESULT_S *pstAeResult,
|
|
XM_S32 s32Rsv
|
|
);
|
|
XM_S32 (*pfn_ae_ctrl)(ISP_DEV IspDev, XM_S32 s32Handle, XM_U32 u32Cmd, XM_VOID *pValue);
|
|
XM_S32 (*pfn_ae_exit)(ISP_DEV IspDev, XM_S32 s32Handle);
|
|
} ISP_AE_EXP_FUNC_S;
|
|
|
|
typedef struct xm_ISP_AE_REGISTER_S
|
|
{
|
|
ISP_AE_EXP_FUNC_S stAeExpFunc;
|
|
} ISP_AE_REGISTER_S;
|
|
|
|
|
|
/******************************** AWB *************************************/
|
|
/* the statistics of awb alg */
|
|
typedef struct xm_ISP_AWB_STAT_ZONE_S
|
|
{
|
|
XM_U32 u32Data1; // Wp
|
|
XM_U32 u32Data2; // Cb
|
|
XM_U32 u32Data3; // Cr
|
|
} ISP_AWB_STAT_ZONE_S;
|
|
|
|
|
|
|
|
typedef struct xm_ISP_AWB_STAT_1_S
|
|
{
|
|
ISP_AWB_STAT_ZONE_S stStat1[4][4]; // 4:Chn // 4:Zone
|
|
} ISP_AWB_STAT_1_S;
|
|
|
|
typedef struct xm_ISP_AWB_STAT_2_S
|
|
{
|
|
;
|
|
} ISP_AWB_STAT_2_S;
|
|
|
|
typedef struct xm_ISP_AWB_INFO_S
|
|
{
|
|
XM_U32 u32FrameCnt;
|
|
XM_U32 u32Rsv;
|
|
ISP_AWB_STAT_1_S *pstAwbStat1;
|
|
ISP_AWB_STAT_2_S *pstAwbStat2;
|
|
} ISP_AWB_INFO_S;
|
|
|
|
/* the statistics's attr of awb alg */
|
|
typedef struct xm_ISP_AWB_FT_L_ATTR_S
|
|
{
|
|
XM_BOOL bChange;
|
|
|
|
XM_U32 u32Lh;
|
|
XM_U32 u32Lv;
|
|
XM_U32 u32L45;
|
|
XM_U32 u32L135;
|
|
} ISP_AWB_FT_L_ATTR_S;
|
|
|
|
typedef struct xm_ISP_AWB_FT_K_ATTR_S
|
|
{
|
|
XM_BOOL bChange;
|
|
|
|
XM_U32 u32KCbCr1;
|
|
XM_U32 u32KCbCr2;
|
|
XM_U32 u32KCbCr3;
|
|
XM_U32 u32KCbCr4;
|
|
} ISP_AWB_FT_K_ATTR_S;
|
|
|
|
typedef struct xm_ISP_AWB_WDW_ATTR_S
|
|
{
|
|
XM_BOOL bChange;
|
|
XM_U8 u8Mode;
|
|
XM_U32 u32VBegin;
|
|
XM_U32 u32VEnd;
|
|
XM_U32 u32HBegin;
|
|
XM_U32 u32HEnd;
|
|
} ISP_AWB_WDW_ATTR_S;
|
|
|
|
typedef struct xm_ISP_AWB_BG_ATTR_S
|
|
{
|
|
XM_BOOL bChange;
|
|
XM_U32 u32R_Ch[4];
|
|
XM_U32 u32B_Ch[4];
|
|
} ISP_AWB_BG_ATTR_S;
|
|
|
|
typedef struct xm_ISP_AWB_RESULT_BK_S
|
|
{
|
|
ISP_AWB_FT_L_ATTR_S stFtL;
|
|
ISP_AWB_FT_K_ATTR_S stFtK;
|
|
ISP_AWB_WDW_ATTR_S stWin;
|
|
ISP_AWB_BG_ATTR_S stBg;
|
|
} ISP_AWB_RESULT_BK_S;
|
|
|
|
typedef struct xm_ISP_AWB_RESULT_GAIN_S
|
|
{
|
|
XM_BOOL bChange;
|
|
XM_U32 au32WhiteBalanceGain[3];
|
|
} ISP_AWB_RESULT_GAIN_S;
|
|
|
|
typedef struct xm_ISP_AWB_RESULT_CC_S
|
|
{
|
|
XM_BOOL bChange;
|
|
XM_U16 au16ColorMatrix[12];
|
|
} ISP_AWB_RESULT_CC_S;
|
|
|
|
/* the final calculate of awb alg */
|
|
typedef struct xm_ISP_AWB_RESULT_S
|
|
{
|
|
ISP_AWB_RESULT_GAIN_S *pstRlt_Gain;
|
|
ISP_AWB_RESULT_CC_S *pstRlt_Cc;
|
|
ISP_AWB_RESULT_BK_S *pstRlt_Bk;
|
|
XM_U16 *pstRlt_RGB;
|
|
} ISP_AWB_RESULT_S;
|
|
|
|
typedef struct xm_ISP_AWB_EXP_FUNC_S
|
|
{
|
|
XM_S32 (*pfn_awb_init)(XM_S32 s32Handle, ISP_AWB_RESULT_BK_S* const pstAwbParam,XM_U32 Width,XM_U32 Height);
|
|
XM_S32 (*pfn_awb_run)(XM_S32 s32Handle,
|
|
const ISP_AWB_INFO_S *pstAwbInfo,
|
|
ISP_AWB_RESULT_S *pstAwbResult,
|
|
XM_S32 s32Rsv
|
|
);
|
|
XM_S32 (*pfn_awb_ctrl)(XM_S32 s32Handle, XM_U32 u32Cmd, XM_VOID *pValue);
|
|
XM_S32 (*pfn_awb_exit)(XM_S32 s32Handle);
|
|
} ISP_AWB_EXP_FUNC_S;
|
|
|
|
typedef struct xm_ISP_AWB_REGISTER_S
|
|
{
|
|
ISP_AWB_EXP_FUNC_S stAwbExpFunc;
|
|
} ISP_AWB_REGISTER_S;
|
|
|
|
/******************************** AF *************************************/
|
|
|
|
/* the init param of af alg */
|
|
typedef struct xm_ISP_AF_PARAM_S
|
|
{
|
|
SENSOR_ID SensorId;
|
|
XM_S32 s32Rsv;
|
|
} ISP_AF_PARAM_S;
|
|
|
|
/* the statistics of af alg */
|
|
typedef struct xm_ISP_AF_STAT_S
|
|
{
|
|
XM_U16 u16FocusMetrics; /* The integrated and normalized measure of contrast*/
|
|
XM_U16 u16ThresholdRead; /* The ISP recommend value of AF threshold*/
|
|
XM_U16 u16ThresholdWrite; /* The user defined value of AF threshold (or 0 to use threshold from previous frame)*/
|
|
XM_U16 u16FocusIntensity; /* The average brightness*/
|
|
XM_U8 u8MetricsShift; /* Metrics scaling factor:the bigger value for this register means all zones metrics go higher,0x03 is the default, Range: [0x0, 0xF] */
|
|
XM_U8 u8NpOffset; /* The AF noise profile offset, Range: [0x0, 0xFF] */
|
|
XM_U16 au16ZoneMetrics[AE_ZONE_ROW][AE_ZONE_COLUMN]; /* The zoned measure of contrast*/
|
|
} ISP_AF_STAT_S;
|
|
|
|
typedef struct xm_ISP_AF_INFO_S
|
|
{
|
|
XM_U32 u32FrameCnt;
|
|
|
|
ISP_AF_STAT_S *pstStatistics;
|
|
} ISP_AF_INFO_S;
|
|
|
|
typedef struct xm_ISP_AF_STAT_ATTR_S
|
|
{
|
|
XM_BOOL bChange;
|
|
|
|
XM_U16 u16ThresholdWrite;
|
|
XM_U8 u8MetricsShift;
|
|
XM_U8 u8NpOffset;
|
|
} ISP_AF_STAT_ATTR_S;
|
|
|
|
/* the final calculate of af alg */
|
|
typedef struct xm_ISP_AF_RESULT_S
|
|
{
|
|
ISP_AF_STAT_ATTR_S stStatAttr;
|
|
XM_S32 s32Rsv;
|
|
} ISP_AF_RESULT_S;
|
|
|
|
typedef struct xm_ISP_AF_EXP_FUNC_S
|
|
{
|
|
XM_S32 (*pfn_af_init)(XM_S32 s32Handle, const ISP_AF_PARAM_S *pstAfParam);
|
|
XM_S32 (*pfn_af_run)(XM_S32 s32Handle,
|
|
const ISP_AF_INFO_S *pstAfInfo,
|
|
ISP_AF_RESULT_S *pstAfResult,
|
|
XM_S32 s32Rsv
|
|
);
|
|
XM_S32 (*pfn_af_ctrl)(XM_S32 s32Handle, XM_U32 u32Cmd, XM_VOID *pValue);
|
|
XM_S32 (*pfn_af_exit)(XM_S32 s32Handle);
|
|
} ISP_AF_EXP_FUNC_S;
|
|
|
|
typedef struct xm_ISP_AF_REGISTER_S
|
|
{
|
|
ISP_AF_EXP_FUNC_S stAfExpFunc;
|
|
} ISP_AF_REGISTER_S;
|
|
|
|
typedef struct xm_ALG_LIB_S
|
|
{
|
|
XM_S32 s32Id;
|
|
XM_CHAR acLibName[20];
|
|
} ALG_LIB_S;
|
|
|
|
typedef struct xm_ISP_BIND_ATTR_S
|
|
{
|
|
SENSOR_ID SensorId;
|
|
ALG_LIB_S stAeLib;
|
|
ALG_LIB_S stAfLib;
|
|
ALG_LIB_S stAwbLib;
|
|
} ISP_BIND_ATTR_S;
|
|
|
|
|
|
#endif /*__XM_COMM_SNS_H__ */
|
|
|