Files
sophgo-forum-service 46ea2997ab isp : add open source code
-1e94c6, remove libcli for isp.
-44d44a, add rvv feature,accelerate mlsc, motion, dis, iir and verified.

Change-Id: I800c07e762bc9b1e73ed55839eed72a8b1fbcb8f
2024-06-21 10:44:22 +08:00

763 lines
25 KiB
C

/*
* Copyright (C) Cvitek Co., Ltd. 2019-2021. All rights reserved.
*
* File Name: aealgo.h
* Description:
*
*/
#ifndef _AE_ALG_H_
#define _AE_ALG_H_
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
#define AE_LIB_VER (1)//U8
#define AE_LIB_SUBVER (53)//U8
#ifndef AAA_PC_PLATFORM
#include <stdio.h>
#include <string.h>
#include "cvi_comm_3a.h"
#include "cvi_ae_comm.h"
#include "cvi_ae.h"
#include "ae_common.h"
#include "cvi_comm_isp.h"
#else
#include <stdio.h>
#include <string.h>
#include "cvi_type.h"
#include "cvi_comm_3a.h"
#include "cvi_ae_comm.h"
#include "cvi_ae.h"
#include "cvi_comm_isp.h"
#endif
#ifndef UNUSED
#define UNUSED(x) (void)(x)
#endif
#define AE_SENSOR_NUM (VI_MAX_PIPE_NUM)
#define AE_GAIN_BASE 1024
#define AE_EVBIAS_BASE 1024
#define AE_WDR_RATIO_BASE 64
#define EXP_COEF_BASE 1024
#define MAX_WDR_FRAME_NUM 2
#define AE_CHANNEL_NUM 4
#define AE_MAX_PERIOD_NUM 5//4 //3
#define AE_DEFAULT_TARGET_LUMA 56
#define AE_MAX_LUMA 1023
#define AE_METER_MIN_LUMA 5
#define HIGH_LIGHT_ZONE_WEIGHT_RATIO_THR 4 // 1/255 = 0. 4%
#define MIN_EVBIAS (AE_GAIN_BASE / 4)
#define MAX_EVBIAS (AE_GAIN_BASE * 4)
#define MIN_ISPDGAIN 1024
#define MAX_ISPDGAIN 32767
#define SENSOR_DGAIN_MAX_NODE_NUM 7
#define MAX_AE_LOG_PATH_LENGTH 128
#define MAX_AE_LOG_FILENAME_LENGTH (MAX_AE_LOG_PATH_LENGTH * 2 + 32)
#define FLOAT_TO_INT_NUMBER 1000000
#define LINEAR_MIN_LVX100 (0)
#define LINEAR_MAX_LVX100 (1500)
#define WDR_MIN_LVX100 (0)
#define WDR_MAX_LVX100 (1500)
#define SUNSET_LV (600)
#define NIGHT_LV (400)
#define TV_ENTRY_WITH_ISPDGAIN_COMPENSATION (EVTT_ENTRY_1_960SEC)
#define AAA_LIMIT(var, min, max) ((var) = ((var) < (min)) ? (min) : (((var) > (max)) ? (max) : (var)))
#define AAA_ABS(a) ((a) > 0 ? (a) : -(a))
#define AAA_MIN(a, b) ((a) < (b) ? (a) : (b))
#define AAA_MAX(a, b) ((a) > (b) ? (a) : (b))
#define AAA_DIV_0_TO_1(a) ((0 == (a)) ? 1 : (a))
typedef enum _CONVERGE_MODE {
CONVERGE_FAST,
CONVERGE_NORMAL,
} CONVERGE_MODE;
typedef enum _ADJUST_ITEM {
ADJ_TV,
ADJ_SV,
} ADJUST_ITEM;
typedef enum _AE_WDR_FRAME {
AE_LE = 0,
AE_SE,
AE_MAX_WDR_FRAME_NUM,
} AE_WDR_FRAME;
typedef enum _AE_SENSOR_MODE {
AE_LINEAR_MODE = 0,
AE_WDR_MODE,
AE_TOTAL_SENSOR_MODE,
} AE_SENSOR_MODE;
typedef enum _AE_ROUTE_CHANGE_ITEM {
AE_CHANGE_NONE = 0,
AE_CHANGE_SHUTTER,
AE_CHANGE_ISO,
AE_CHANGE_AGAIN,
AE_CHANGE_DGAIN,
AE_CHANGE_ISPDGAIN,
AE_CHANGE_SHUTTER_ISO,
} AE_ROUTE_CHANGE_ITEM;
typedef enum _AE_PARAMETER_UPDATE {
AE_EXPOSURE_ATTR_UPDATE,
AE_WDR_EXPOSURE_ATTR_UPDATE,
AE_ROUTE_UPDATE,
AE_ROUTE_EX_UPDATE,
AE_STATISTICS_CONFIG_UPDATE,
AE_SMART_EXPOSURE_ATTR_UPDATE,
AE_IRIS_ATTR_UPDATE,
AE_DC_IRIS_ATTR_UPDATE,
AE_ROUTE_SF_UPDATE,
AE_ROUTE_SF_EX_UPDATE,
AE_UPDATE_ALL,
AE_UPDATE_TOTAL,
} AE_PARAMETER_UPDATE;
typedef enum _AE_METER_WEIGHT {
AE_RGB_WEIGHT,
AE_IR_WEIGHT,
} AE_METER_WEIGHT;
typedef enum _AE_IRIS_STEP {
AE_AV_ENTRY_0,
AE_AV_ENTRY_1,
AE_AV_ENTRY_2,
AE_AV_ENTRY_3,
AE_AV_ENTRY_4,
AE_AV_ENTRY_5,
AE_AV_ENTRY_6,
AE_AV_ENTRY_7,
AE_AV_ENTRY_8,
AE_AV_ENTRY_9,
AE_AV_ENTRY_10,
} AE_IRIS_STEP;
typedef enum _AE_SLOW_SHUTTER_STATUS {
AE_LEAVE_SLOW_SHUTTER,
AE_ENTER_SLOW_SHUTTER,
} AE_SLOW_SHUTTER_STATUS;
typedef enum _AE_GAIN_TYPE {
AE_AGAIN,
AE_DGAIN,
AE_ISPDGAIN,
AE_GAIN_TOTAL,
} AE_GAIN_TYPE;
typedef enum _AE_ISPDGAIN_COMPENSATION {
DISABLE_COMPENSATION,
ENABLE_COMPENSATION,
} AE_ISPDGAIN_COMPENSATION;
typedef enum _AE_ADJUST_TARGET_STATUS {
AE_ADJUST_NONE,
AE_ADJUST_TO_MAX,
AE_ADJUST_TO_MIN,
AE_ADJUST_MIN_TO_MED,
AE_ADJUST_MAX_TO_MED,
} AE_ADJUST_TARGET_STATUS;
typedef enum _AE_MEMORY_ITEM {
AE_BOOT_ITEM,
AE_LOG_ITEM,
AE_TOOL_PARAMETER_ITEM,
} AE_MEMORY_ITEM;
typedef enum _AE_RGB_CHANNEL {
AE_CHANNEL_B,
AE_CHANNEL_GB,
AE_CHANNEL_GR,
AE_CHANNEL_R,
} AE_RGB_CHANNEL;
typedef enum _AE_LOG_LEVEL {
AE_LOG_ALL,
AE_LOG_NO_HISTOGRAM,
AE_LOG_NO_STATISTICS,
} AE_LOG_LEVEL;
typedef enum _DELAY_ITEM {
WHITE_DELAY,
BLACK_DELAY,
} DELAY_ITEM;
typedef enum _LUMA_BASE_E {
GRID_BASE,
HISTOGRAM_BASE,
TOTAL_BASE,
} LUMA_BASE_E;
typedef struct _AE_GAIN {
CVI_U32 u32AGain;
CVI_U32 u32DGain;
CVI_U32 u32ISPDGain;
} AE_GAIN;
typedef struct _AE_FASTBOOT_EXPOSURE {
CVI_U32 u32ExpLine;
AE_GAIN stGain;
} AE_FASTBOOT_EXPOSURE;
typedef struct _SEXPOSURE_TV_SV_CURVE {
CVI_U16 NodeTvEntry;
CVI_U16 NodeSvEntry;
ADJUST_ITEM AdjItem;
AE_GAIN stNodeGain;
CVI_BOOL isMaxTime;
} SEXPOSURE_TV_SV_CURVE, *PSEXPOSURE_TV_SV_CURVE;
typedef struct _AE_EXPOSURE {
CVI_FLOAT fIdealExpTime;
CVI_U32 u32ExpTime;
CVI_FLOAT fIdealExpTimeLine;
CVI_U32 u32ExpTimeLine;
CVI_U32 u32SensorExpTime;
CVI_U32 u32SensorExpTimeLine;
AE_GAIN stExpGain;
AE_GAIN stSensorExpGain;
} AE_EXPOSURE;
typedef struct _AE_APEX {
CVI_S16 s16BVEntry;
CVI_S16 s16TVEntry;
CVI_S16 s16AVEntry;
CVI_S16 s16SVEntry;
} AE_APEX;
typedef struct _AE_RAW_REPLAY_EXP_INFO {
CVI_U32 u32FrameID;
CVI_U32 u32Time[AE_MAX_WDR_FRAME_NUM];
CVI_U32 u32AGain[AE_MAX_WDR_FRAME_NUM];
CVI_U32 u32DGain[AE_MAX_WDR_FRAME_NUM];
CVI_U32 u32ISPDGain[AE_MAX_WDR_FRAME_NUM];
CVI_U32 u32ISO;
CVI_S16 s16LvX100;
} AE_RAW_REPLAY_EXP_INFO;
typedef struct _SENSOR_EXP_INFO {
CVI_U32 u32LinesPer500ms;
CVI_U32 u32FrameLine;
CVI_U32 u32MaxExpLine;
CVI_U32 u32MinExpLine;
CVI_FLOAT f32Accuracy;
CVI_FLOAT f32Offset;
CVI_U32 u32MaxAgain;
CVI_U32 u32MinAgain;
CVI_U32 u32MaxDgain;
CVI_U32 u32MinDgain;
CVI_U8 u8AERunInterval;
CVI_FLOAT f32MaxFps;
CVI_FLOAT f32MinFps;
CVI_U8 u8SensorPeriod;
AE_BLC_TYPE_E enBlcType;
CVI_U8 u8DGainAccuType;
} SENSOR_EXP_INFO;
typedef struct _SAE_INFO {
CVI_U32 u32frmCnt;
CVI_U8 u8GridHNum;
CVI_U8 u8GridVNum;
AE_APEX stApex[AE_MAX_WDR_FRAME_NUM];
AE_APEX stInitApex[AE_MAX_WDR_FRAME_NUM];
AE_APEX stAssignApex[AE_MAX_WDR_FRAME_NUM];
AE_APEX stSmoothApex[AE_MAX_WDR_FRAME_NUM][AE_MAX_PERIOD_NUM];
CVI_S16 s16BvStepEntry[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16SmoothBvStepEntry[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16ConvBvStepEntry[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16lumaBvStepEntry[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16WindowBvStepEntry;
CVI_S16 s16LumaReduceBvStepEntry;
CVI_U8 u8BvStepWeight[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8LumaReduceWeight[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16PreBvEntry[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16AssignEVBIAS[AE_MAX_WDR_FRAME_NUM];
CVI_U16 (*pu16AeStatistics)[AE_ZONE_ROW][AE_ZONE_COLUMN][AE_CHANNEL_NUM];
CVI_U32 (*pu32Histogram)[HIST_NUM];
CVI_U32 u32HistogramTotalCnt[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16CenterG[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16MeterLuma[AE_MAX_WDR_FRAME_NUM][AE_ZONE_ROW][AE_ZONE_COLUMN];
CVI_U16 u16MeterMaxLuma[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16MeterMinLuma[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16FrameLuma[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16BrightQuaG[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8MeterMode[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8ConvergeMode[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8ConvergeSpeed[AE_MAX_WDR_FRAME_NUM];
CVI_BOOL bConvergeStable[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16TargetLuma[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16AdjustTargetLuma[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8AdjustTargetStatus[AE_MAX_WDR_FRAME_NUM];
CVI_U32 u32ISONum[AE_MAX_WDR_FRAME_NUM];
CVI_U32 u32BLCISONum[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16LvX100[AE_MAX_WDR_FRAME_NUM];
CVI_BOOL bIsStable[AE_MAX_WDR_FRAME_NUM];
AE_EXPOSURE stExp[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16ConvergeFrameCnt[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8GridLowRatio[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8GridLowPredictRatio[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16LowRatio[AE_MAX_WDR_FRAME_NUM][TOTAL_BASE];
CVI_U16 u16LowBufRatio[AE_MAX_WDR_FRAME_NUM][TOTAL_BASE];
CVI_U16 u16HighRatio[AE_MAX_WDR_FRAME_NUM][TOTAL_BASE];
CVI_U16 u16HighBufRatio[AE_MAX_WDR_FRAME_NUM][TOTAL_BASE];
CVI_U8 u8MeterGridCnt[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8RouteNum[AE_MAX_WDR_FRAME_NUM];
SEXPOSURE_TV_SV_CURVE *pstAeRoute[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16MinTVEntry;
CVI_S16 s16MaxTVEntry;
CVI_S16 s16MinFpsSensorTVEntry;
CVI_S16 s16MinSensorTVEntry;
CVI_S16 s16MaxSensorTVEntry;
CVI_S16 s16MinRouteTVEntry;
CVI_S16 s16MaxRouteTVEntry;
CVI_S16 s16MinRouteExTVEntry;
CVI_S16 s16MaxRouteExTVEntry;
CVI_S16 s16MinRangeTVEntry;
CVI_S16 s16MaxRangeTVEntry;
CVI_S16 s16MinISOEntry;
CVI_S16 s16MaxISOEntry;
CVI_S16 s16MinSensorISOEntry;
CVI_S16 s16MaxSensorISOEntry;
CVI_S16 s16MinRouteISOEntry;
CVI_S16 s16MaxRouteISOEntry;
CVI_S16 s16MinRouteExISOEntry;
CVI_S16 s16MaxRouteExISOEntry;
CVI_S16 s16MinRangeISOEntry;
CVI_S16 s16MaxRangeISOEntry;
CVI_S16 s16BLCMaxISOEntry;
CVI_S16 s16ManualBvEntry;
CVI_U16 u16LvFrameLuma[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16LvBvStep[AE_MAX_WDR_FRAME_NUM];
CVI_U8 u8AeMaxFrameNum;
CVI_U32 u32FrameLine;
CVI_U32 u32ExpLineMin;
CVI_U32 u32ExpLineMax;
CVI_U32 u32ExpTimeMin;
CVI_U32 u32ExpTimeMax;
CVI_U32 u32MinFpsExpTimeMax;
CVI_U32 u32WDRSEExpLineMax;
CVI_U32 u32WDRSEExpTimeMax;
CVI_S16 s16WDRSEMinTVEntry;
CVI_U32 u32AGainMin;
CVI_U32 u32AGainMax;
CVI_U32 u32DGainMin;
CVI_U32 u32DGainMax;
CVI_U32 u32ISPDGainMin;
CVI_U32 u32ISPDGainMax;
CVI_U32 u32TotalGainMin;
CVI_U32 u32TotalGainMax;
CVI_S16 s16AGainMaxEntry;
CVI_S16 s16DGainMaxEntry;
CVI_S16 s16ISPDGainMaxEntry;
CVI_U32 u32BLCSysGainMax;
CVI_U32 u32ISONumMin;
CVI_U32 u32ISONumMax;
CVI_U32 u32BLCISONumMax;
CVI_U32 u32LinePer500ms;
CVI_U32 u32FirstStableTime;
CVI_FLOAT fMaxFps;
CVI_FLOAT fMinFps;
CVI_FLOAT fFps;
CVI_FLOAT fDefaultFps;
CVI_BOOL bIsMaxExposure;
CVI_BOOL bISPDGainFirst;
CVI_FLOAT fExpLineTime;
CVI_BOOL bWDRMode;
CVI_BOOL bWDRLEOnly;
CVI_U32 u32WDRExpRatio;
CVI_BOOL bEnableSmoothAE;
ISP_SNS_GAIN_MODE_E enWDRGainMode;
CVI_BOOL bWDRUseSameGain;
CVI_BOOL bISOLimitByBLC;
CVI_U32 u32ManualWDRSETime;
CVI_U32 u32ManualWDRSEISPDgain;
CVI_U8 u8DGainAccuType;
CVI_U8 u8MeterFramePeriod;
CVI_U8 u8SensorDgainNodeNum;
CVI_U32 u32SensorDgainNode[SENSOR_DGAIN_MAX_NODE_NUM];
CVI_BOOL bParameterUpdate[AE_UPDATE_TOTAL];
CVI_S16 s16SlowShutterISOEntry;
CVI_FLOAT fSlowShutterFps;
CVI_U16 u16WeightSum;
CVI_U16 u16AvX100;
CVI_U8 u8BootWaitFrameNum;
CVI_S16 s16AEBracketing0EvBv[AE_MAX_WDR_FRAME_NUM];
AE_SLOW_SHUTTER_STATUS enSlowShutterStatus;
CVI_FLOAT fIspPubAttrFps;
CVI_U8 u8His255Ratio[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16TargetLumaLowBound[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16TargetLumaHighBound[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16TargetlumaOffset[AE_MAX_WDR_FRAME_NUM];
CVI_BOOL bPubFpsChange;
CVI_BOOL bAeFpsChange;
AE_BLC_TYPE_E enBlcType;
CVI_BOOL bDGainSwitchToAGain;
CVI_FLOAT fExpTimeAccu;
CVI_BOOL bEnableISPDgainCompensation;
CVI_U16 u16FrameAvgLuma[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16ROILuma[AE_MAX_WDR_FRAME_NUM];
CVI_U16 u16ROIWeightThr;
CVI_U8 u8SensorPeriod;
CVI_U8 u8SensorUsePeriod;
CVI_U8 u8SensorRunInterval;
CVI_U8 u8AERunInterval;
CVI_U16 u16FramePeriodTime;
CVI_U8 u8LimitExposurePath[AE_MAX_WDR_FRAME_NUM];
CVI_S16 s16FrameAvgBvStep;
CVI_U32 u32MeterFrameCnt;
CVI_BOOL bMeterEveryFrame;
CVI_S16 as16SmoothBv[AE_MAX_WDR_FRAME_NUM][2];
CVI_FLOAT fExpTimeOffset;
LUMA_BASE_E enLumaBase;
CVI_U32 u32RawId;
CVI_U8 u8RawNum;
CVI_U8 u8RawBufCnt;
CVI_BOOL bIsRawReplay;
CVI_BOOL bRegWeightUpdate;
CVI_U8 u8FastConvergeFrmCnt;
} SAE_INFO;
#define AE_FD_GRID_LUMA_SIZE 64
typedef struct _SFACE_DETECT_INFO {
CVI_BOOL bMode;
CVI_U16 u16FDLuma;
CVI_U16 u16FDTargetLuma;
CVI_S16 s16FDEVStep;
CVI_U16 u16FDPosX;
CVI_U16 u16FDPosY;
CVI_U16 u16FDWidth;
CVI_U16 u16FDHeight;
CVI_U16 u16FrameWidth;
CVI_U16 u16FrameHeight;
CVI_U8 u8GridSizeX;
CVI_U8 u8GridSizeY;
CVI_U16 u16FDGridStart;
CVI_U16 u16FDGridEnd;
CVI_U16 u16AEFDPosX;
CVI_U16 u16AEFDPosY;
CVI_U16 u16AEFDWidth;
CVI_U16 u16AEFDHeight;
CVI_U16 u16AEFDGridStart;
CVI_U16 u16AEFDGridEnd;
CVI_U8 u8AEFDGridWidthCount;
CVI_U8 u8AEFDGridHeightCount;
CVI_U16 u16AEFDGridCount;
CVI_S16 s16EnvBvStep;
CVI_S16 s16FinalBvStep;
ISP_SMART_ROI_S stSmartInfo;
} SFACE_DETECT_INFO;
#define AE_BOOT_MAX_FRAME 30
typedef struct _AE_BOOT_INFO {
CVI_U8 u8FrmID[AE_BOOT_MAX_FRAME];
CVI_U16 u16FrmLuma[AE_MAX_WDR_FRAME_NUM][AE_BOOT_MAX_FRAME];
CVI_U16 u16AdjustTargetLuma[AE_MAX_WDR_FRAME_NUM][AE_BOOT_MAX_FRAME];
CVI_S16 s16FrmBvStep[AE_MAX_WDR_FRAME_NUM][AE_BOOT_MAX_FRAME];
CVI_S16 s16LvX100[AE_BOOT_MAX_FRAME];
CVI_BOOL bFrmConvergeMode[AE_MAX_WDR_FRAME_NUM][AE_BOOT_MAX_FRAME];
AE_APEX stApex[AE_MAX_WDR_FRAME_NUM][AE_BOOT_MAX_FRAME];
CVI_BOOL bStable[AE_MAX_WDR_FRAME_NUM][AE_BOOT_MAX_FRAME];
} SAE_BOOT_INFO;
#define AE_GET_CTX(ViPipe) (&g_astAeCtx[ViPipe])
typedef struct cviAE_CTX_S {
/* usr var */
CVI_U8 u8AeMode;
/* communicate with isp */
ISP_AE_PARAM_S stAeParam;
CVI_U32 u32FrameCnt;
VI_PIPE IspBindDev;
/* communicate with sensor, defined by user. */
CVI_BOOL bSnsRegister;
ISP_SNS_ATTR_INFO_S stSnsAttrInfo;
AE_SENSOR_DEFAULT_S stSnsDft;
AE_SENSOR_REGISTER_S stSnsRegister;
/* global variables of ae algorithm */
} AE_CTX_S;
#define AE_DBG_BIN_VER (3)
typedef struct _AE_DBG_S {
CVI_U32 u32Date;
CVI_U16 u8AlgoVer;
CVI_U16 u8AlgoSubVer;
CVI_U16 u8DbgVer;
CVI_U32 u32BinSize;
ISP_EXPOSURE_ATTR_S stExpAtt[AE_SENSOR_NUM];
ISP_WDR_EXPOSURE_ATTR_S stWdrAtt[AE_SENSOR_NUM];
ISP_AE_ROUTE_S stRoute[AE_SENSOR_NUM][MAX_WDR_FRAME_NUM];
ISP_AE_ROUTE_EX_S stRouteEx[AE_SENSOR_NUM][MAX_WDR_FRAME_NUM];
ISP_SMART_EXPOSURE_ATTR_S stSmartAtr[AE_SENSOR_NUM];
ISP_AE_STATISTICS_CFG_S stStatCfg[AE_SENSOR_NUM];
ISP_SMART_ROI_S stSmartExpInfo[AE_SENSOR_NUM];
SENSOR_EXP_INFO stSensorExpInfo[AE_SENSOR_NUM];
} s_AE_DBG_S;
typedef struct _AE_SIM_S {
CVI_BOOL bIsSimAe;
CVI_S32 ae_wantTv[2];
CVI_S32 ae_wantSv[2];
CVI_U32 genRawCnt;
CVI_U32 genRawCntLast;
CVI_U8 waitCnt;
} s_AE_SIM_S;
extern AE_CTX_S g_astAeCtx[MAX_AE_LIB_NUM];
extern s_AE_SIM_S sAe_sim;
CVI_S32 aeInit(VI_PIPE ViPipe, const ISP_AE_PARAM_S *pstAeParam);
CVI_S32 aeRun(VI_PIPE ViPipe, const ISP_AE_INFO_S *pstAeInfo, ISP_AE_RESULT_S *pstAeResult, CVI_S32 s32Rsv);
CVI_S32 aeCtrl(VI_PIPE ViPipe, CVI_U32 u32Cmd, CVI_VOID *pValue);
CVI_S32 aeExit(VI_PIPE ViPipe);
CVI_S32 AE_SetExposure(CVI_U8 sID, AE_EXPOSURE *exp);
void AE_SetExpToResult(CVI_U8 sID, ISP_AE_RESULT_S *pstAeResult, const AE_EXPOSURE *pStExp);
void AE_Delay1s(CVI_S32 s);
void AE_Delay1ms(CVI_S32 ms);
CVI_U32 AE_GetMSTimeDiff(const struct timeval *before, const struct timeval *after);
CVI_U32 AE_GetUSTimeDiff(const struct timeval *before, const struct timeval *after);
void AE_Function_Init(CVI_U8 sID);
CVI_S32 AE_DumpLog(void);
void AE_DumpSnapLog(CVI_U8 sID);
void AE_SaveSnapLog(CVI_U8 sID);
CVI_S32 AE_SetDumpLogPath(const char *szPath);
CVI_S32 AE_GetDumpLogPath(char *szPath, CVI_U32 pathSize);
CVI_S32 AE_SetDumpLogName(const char *szName);
CVI_S32 AE_GetDumpLogName(char *szName, CVI_U32 nameSize);
void AE_LogInit(void);
void AE_LogPrintf(const char *szFmt, ...);
CVI_U32 AE_GetFrameLine(CVI_U8 sID);
void AE_CalculateFrameLuma(CVI_U8 sID);
void AE_AdjustTargetY(CVI_U8 sID);
CVI_U8 AE_CheckSensorID(CVI_U8 sID);
void AE_CalculateConverge(CVI_U8 sID);
CVI_U16 AE_GetCenterG(CVI_U8 sID, CVI_U8 WDR_SE);
CVI_U16 AE_GetBrightQuaG(CVI_U8 sID, CVI_U8 WDR_SE);
void AE_SetManualExposure(CVI_U8 sID);
void AE_GetExpTimeByEntry(CVI_U8 sID, CVI_S16 tvEntry, CVI_U32 *ptime);
void AE_GetIdealExpTimeByEntry(CVI_U8 sID, CVI_S16 tvEntry, CVI_FLOAT *ptime);
void AE_GetExpGainByEntry(CVI_U8 sID, CVI_S16 SvEntry, AE_GAIN *pstGain);
void AE_GetRoutExGainByEntry(CVI_U8 sID, AE_WDR_FRAME wdrFrm, CVI_S16 SvEntry, AE_GAIN *pstGain);
CVI_S32 AE_SetExposureAttr(CVI_U8 sID, const ISP_EXPOSURE_ATTR_S *pstExpAttr);
CVI_S32 AE_GetExposureAttr(CVI_U8 sID, ISP_EXPOSURE_ATTR_S *pstExpAttr);
CVI_S32 AE_SetWDRExposureAttr(CVI_U8 sID, const ISP_WDR_EXPOSURE_ATTR_S *pstWDRExpAttr);
CVI_S32 AE_GetWDRExposureAttr(CVI_U8 sID, ISP_WDR_EXPOSURE_ATTR_S *pstWDRExpAttr);
CVI_S32 AE_SetSmartExposureAttr(CVI_U8 sID, const ISP_SMART_EXPOSURE_ATTR_S *pstSmartExpAttr);
CVI_S32 AE_GetSmartExposureAttr(CVI_U8 sID, ISP_SMART_EXPOSURE_ATTR_S *pstSmartExpAttr);
CVI_S32 AE_SetRouteAttr(CVI_U8 sID, const ISP_AE_ROUTE_S *pstRouteAttr);
CVI_S32 AE_GetRouteAttr(CVI_U8 sID, ISP_AE_ROUTE_S *pstRouteAttr);
CVI_S32 AE_SetRouteAttrEx(CVI_U8 sID, const ISP_AE_ROUTE_EX_S *pstRouteAttrEx);
CVI_S32 AE_GetRouteAttrEx(CVI_U8 sID, ISP_AE_ROUTE_EX_S *pstRouteAttrEx);
CVI_S32 AE_SetRouteSFAttr(CVI_U8 sID, const ISP_AE_ROUTE_S *pstRouteSFAttr);
CVI_S32 AE_GetRouteSFAttr(CVI_U8 sID, ISP_AE_ROUTE_S *pstRouteSFAttr);
CVI_S32 AE_SetRouteSFAttrEx(CVI_U8 sID, const ISP_AE_ROUTE_EX_S *pstRouteSFAttrEx);
CVI_S32 AE_GetRouteSFAttrEx(CVI_U8 sID, ISP_AE_ROUTE_EX_S *pstRouteSFAttrEx);
CVI_S32 AE_SetStatisticsConfig(CVI_U8 sID, const ISP_AE_STATISTICS_CFG_S *pstAeStatCfg);
CVI_S32 AE_GetStatisticsConfig(CVI_U8 sID, ISP_AE_STATISTICS_CFG_S *pstAeStatCfg);
CVI_S32 AE_SetIrisAttr(CVI_U8 sID, const ISP_IRIS_ATTR_S *pstIrisAttr);
CVI_S32 AE_GetIrisAttr(CVI_U8 sID, ISP_IRIS_ATTR_S *pstIrisAttr);
CVI_S32 AE_SetDcIrisAttr(CVI_U8 sID, const ISP_DCIRIS_ATTR_S *pstDcirisAttr);
CVI_S32 AE_GetDcIrisAttr(CVI_U8 sID, ISP_DCIRIS_ATTR_S *pstDcirisAttr);
CVI_S32 AE_GetExposureInfo(CVI_U8 sID, ISP_EXP_INFO_S *pstExpInfo);
void AE_ConfigExposureRoute(CVI_U8 sID);
void AE_ConfigExposure(CVI_U8 sID);
void AE_GetExposureTimeLine(CVI_U8 sID, CVI_U32 time, CVI_U32 *line);
void AE_GetExposureTimeIdealLine(CVI_U8 sID, CVI_FLOAT time, CVI_FLOAT *line);
void AE_GetCurrentInfo(CVI_U8 sID, SAE_INFO **stAeInfo);
void AE_GetHistogram(CVI_U8 sID, CVI_U32 *histogram);
CVI_U32 AE_GetISONum(CVI_U8 sID);
CVI_U32 AE_GetFrameID(CVI_U8 sID, CVI_U32 *frameID);
void AE_SetTvEntryLimit(CVI_U8 sID, CVI_S16 MinEntry, CVI_S16 MaxEntry);
void AE_SetAssignISOEntry(CVI_U8 sID, CVI_S16 ISOEntry);
void AE_SetAssignTvEntry(CVI_U8 sID, CVI_S16 TvEntry);
void AE_SetAssignEvBias(CVI_U8 sID, CVI_S16 EvBias);
void AE_SetConvergeSpeed(CVI_U8 sID, CVI_U8 speed, CVI_U16 b2dSpeed);
CVI_S16 AE_LimitBVEntry(CVI_U8 sID, CVI_S16 BvEntry);
void AE_GetRouteTVAVSVEntry(CVI_U8 sID, AE_WDR_FRAME wdrFrm, CVI_S16 BvEntry, CVI_S16 *pTvEntry,
CVI_S16 *pAvEntry, CVI_S16 *pSvEntry);
void AE_GetTVSVExposureRoute(CVI_U8 sID, AE_WDR_FRAME wdrFrm, PSEXPOSURE_TV_SV_CURVE *pPreviewTVSVExposureCurve,
CVI_U8 *curveSize);
void AE_ConfigManualExposure(CVI_U8 sID);
void AE_GetBVEntryLimit(CVI_U8 sID, CVI_S16 *MinEntry, CVI_S16 *MaxEntry);
void AE_SetByPass(CVI_U8 sID, CVI_U8 enable);
void AE_SetISPDGainPriority(CVI_U8 sID, CVI_U8 enable);
void AE_GetTVEntryLimit(CVI_U8 sID, CVI_S16 *MinEntry, CVI_S16 *MaxEntry);
void AE_GetISOEntryLimit(CVI_U8 sID, CVI_S16 *MinEntry, CVI_S16 *MaxEntry);
void AE_GetTvRangeEntryLimit(CVI_U8 sID, CVI_S16 *minEntry, CVI_S16 *maxEntry);
void AE_GetISORangeEntryLimit(CVI_U8 sID, CVI_S16 *minEntry, CVI_S16 *maxEntry);
CVI_U32 AE_CalTotalGain(CVI_U32 AGain, CVI_U32 DGain, CVI_U32 ISPDGain);
void AE_EnableSmooth(CVI_U8 sID, CVI_BOOL enable);
void AE_ConfigSmoothExposure(CVI_U8 sID);
void AE_GetSmoothTvAvSvEntry(CVI_U8 sID, CVI_U32 frmNo);
void AE_CalCurrentLvX100(CVI_U8 sID);
CVI_S16 AE_GetCurrentLvX100(CVI_U8 sID);
void AE_SetAdjustTargetLuma(CVI_U8 sID, CVI_BOOL enable);
CVI_U8 AE_CheckWDRIdx(CVI_U8 WDRIdx);
void AE_SetWDRSETime(CVI_U8 sID, CVI_U32 time);
CVI_U32 AE_GetWDRSEMaxTime(CVI_U8 sID);
CVI_U32 AE_GetWDRSEMinTime(CVI_U8 sID);
void AE_SetWDRSEISPDGain(CVI_U8 sID, CVI_U32 ispDgain);
void AE_GetISOEntryByISONum(CVI_U32 ISONum, CVI_S16 *pISOEntry);
void AE_SaveBootLog(CVI_U8 sID);
void AE_SaveBootSensorRegInfo(CVI_U8 sID, CVI_U32 frameCnt);
void AE_GetBootInfo(CVI_U8 sID, SAE_BOOT_INFO *bootInfo);
void AE_GetISONumByEntry(CVI_U8 sID, CVI_S16 ISOEntry, CVI_U32 *ISONum);
void AE_ShowConvergeStatus(CVI_U8 sID);
void AE_GetRouteTVSVEntry(CVI_U8 sID, AE_WDR_FRAME wdrFrm, CVI_S16 BvEntry, CVI_S16 *pTvEntry, CVI_S16 *pSvEntry);
void AE_GetExposureLineByTime(CVI_U8 sID, CVI_U32 time, CVI_U32 *line);
void AE_GetExpTimeByLine(CVI_U8 sID, CVI_U32 line, CVI_U32 *time);
void AE_GetTvEntryByTime(CVI_U8 sID, CVI_U32 time, CVI_S16 *ptvEntry);
void AE_GetISOEntryByGain(CVI_U32 Gain, CVI_S16 *pISOEntry);
void AE_GetGainBySvEntry(CVI_U8 sID, AE_GAIN_TYPE gainType, CVI_S16 SvEntry, CVI_U32 *Gain);
void AE_GetISONumByGain(CVI_U32 gain, CVI_U32 *ISONum);
void AE_GetGainByISONum(CVI_U32 ISONum, CVI_U32 *Gain);
CVI_U16 AE_CalGain2Entry(CVI_U32 gain);
void AE_SetDebugMode(CVI_U8 sID, CVI_U8 mode);
CVI_U8 AE_GetDebugMode(CVI_U8 sID);
CVI_U16 AE_GetFrameLuma(CVI_U8 sID);
CVI_BOOL AE_GetLogBuf(CVI_U8 sID, CVI_U8 buf[], CVI_U32 bufSize);
CVI_BOOL AE_GetLogBufSize(CVI_U8 sID, CVI_U32 *bufSize);
CVI_BOOL AE_GetBinBuf(CVI_U8 sID, CVI_U8 buf[], CVI_U32 bufSize);
CVI_BOOL AE_GetBinBufSize(CVI_U8 sID, CVI_U32 *bufSize);
CVI_U32 AE_LimitExpTime(CVI_U8 sID, CVI_U32 expTime);
CVI_U32 AE_LimitISONum(CVI_U8 sID, CVI_U32 ISONum);
CVI_U32 AE_LimitWDRSEExpTime(CVI_U8 sID, CVI_U32 expTime);
CVI_U32 AE_LimitAGain(CVI_U8 sID, CVI_U32 AGain);
CVI_U32 AE_LimitDGain(CVI_U8 sID, CVI_U32 DGain);
CVI_U32 AE_LimitISPDGain(CVI_U8 sID, CVI_U32 ISPDGain);
CVI_U32 AE_LimitTimeRange(CVI_U8 sID, CVI_U32 expTime);
CVI_U32 AE_LimitISORange(CVI_U8 sID, CVI_U32 ISONum);
CVI_U32 AE_LimitAGainRange(CVI_U8 sID, CVI_U32 AGain);
CVI_U32 AE_LimitDGainRange(CVI_U8 sID, CVI_U32 DGain);
CVI_U32 AE_LimitISPDGainRange(CVI_U8 sID, CVI_U32 ISPDGain);
CVI_U32 AE_LimitManualTime(CVI_U8 sID, CVI_U32 expTime);
CVI_U32 AE_LimitManualISONum(CVI_U8 sID, CVI_U32 ISONum);
CVI_U32 AE_LimitManualAGain(CVI_U8 sID, CVI_U32 AGain);
CVI_U32 AE_LimitManualDGain(CVI_U8 sID, CVI_U32 DGain);
CVI_U32 AE_LimitManualISPDGain(CVI_U8 sID, CVI_U32 ISPDGain);
void AE_SetWDRLEOnly(CVI_U8 sID, CVI_BOOL wdrLEOnly);
void AE_SetMeterMode(CVI_U8 sID, ISP_AE_METER_MODE_E meterMode);
void AE_GetWDRSETimeRange(CVI_U8 sID, CVI_U32 *minTime, CVI_U32 *maxTime);
CVI_BOOL AE_IsWDRMode(CVI_U8 sID);
void AE_BracketingStart(CVI_U8 sID);
CVI_S32 AE_BracketingSetExposure(CVI_U8 sID, CVI_S16 leEv, CVI_S16 seEv);
CVI_S32 AE_BracketingSetIndex(CVI_U8 sID, CVI_S16 index);
void AE_BracketingSetSimple(CVI_BOOL bEnable);
void AE_BracketingSetExposureFinish(CVI_U8 sID);
void AE_CalFaceDetectLuma(CVI_U8 sID);
void AE_CalFaceDetectBvStep(CVI_U8 sID);
CVI_U8 AE_ViPipe2sID(VI_PIPE ViPipe);
VI_PIPE AE_sID2ViPipe(CVI_U8 sID);
void AE_GetBootExpousreInfo(CVI_U8 sID, AE_APEX *bootApex);
void AE_SetAuto(CVI_U8 sID);
void AE_GetLimitGain(CVI_U8 sID, AE_GAIN *pstGain);
void AE_GetWDRLESEEntry(CVI_U8 sID, AE_APEX *LE, AE_APEX *SE);
CVI_U8 AE_GetSensorDGainType(CVI_U8 sID);
CVI_U32 AE_GetDGainNodeValue(CVI_U8 sID, CVI_U8 nodeNum);
CVI_S32 AE_SetFps(CVI_U8 sID, CVI_FLOAT fps);
void AE_GetFps(CVI_U8 sID, CVI_FLOAT *pFps);
void AE_ShowTvSvCompensateTable(CVI_U8 sID);
void AE_SaveSmoothExpSettingLog(CVI_U8 sID);
void AE_GetSensorExposureSetting(CVI_U8 sID, AE_EXPOSURE *expSet);
void AE_GetWDRSEMinTvEntry(CVI_U8 sID, CVI_S16 *tvEntry);
CVI_BOOL AE_GetWDRExpLineRange(CVI_U8 sID, CVI_U32 expRatio, CVI_U32 *leExpLine, CVI_U32 *seExpLine,
CVI_BOOL getMaxLine);
CVI_U8 AE_GetMeterPeriod(CVI_U8 sID);
CVI_U8 AE_GetSensorPeriod(CVI_U8 sID);
CVI_U8 AE_GetSensorExpGainPeriod(CVI_U8 sID);
CVI_BOOL AE_DumpBootLog(CVI_U8 sID);
void AE_GetExpGainInfo(CVI_U8 sID, AE_WDR_FRAME wdrFrm, AE_GAIN *expGain);
void AE_SetAPEXExposure(CVI_U8 sID, AE_WDR_FRAME wdrFrm, const AE_APEX *papex);
void AE_GetAPEXExposure(CVI_U8 sID, AE_WDR_FRAME wdrFrm, AE_APEX *papex);
void AE_GetTargetRange(CVI_U8 sID, CVI_S16 LvX100, CVI_S32 *ptargetMin, CVI_S32 *ptargetMax);
void AE_GetMaxGain(CVI_U8 sID, AE_GAIN *pstGain);
CVI_U16 AE_GetAdjustTarget(CVI_U8 sID);
void AE_GetExpMinTime(CVI_U8 sID, CVI_U32 *pTime);
void AE_GetExpMaxTime(CVI_U8 sID, CVI_U32 *pTime);
void AE_GetAlgoVer(CVI_U16 *pVer, CVI_U16 *pSubVer);
void AE_SetIspDgainCompensation(CVI_U8 sID, CVI_BOOL enable);
CVI_U32 AE_CalculateISONum(CVI_U8 sID, const AE_GAIN *pStGain);
CVI_U32 AE_CalculateBLCISONum(CVI_U8 sID, const AE_GAIN *pStGain);
void AE_CalculateManualBvEntry(CVI_U8 sID, CVI_U32 exposure, CVI_S16 *bvEntry);
void AE_GetExpLineRange(CVI_U8 sID, CVI_U32 *minExpLine, CVI_U32 *maxExpLine);
void AE_GetWDRSEExpLineRange(CVI_U8 sID, CVI_U32 *minExpLine, CVI_U32 *maxExpLine);
void AE_ShutterGainTest(CVI_U8 sID, AE_EXPOSURE *pStExp);
void AE_MemoryAlloc(CVI_U8 sID, AE_MEMORY_ITEM item);
void AE_MemoryFree(CVI_U8 sID, AE_MEMORY_ITEM item);
void AE_SetFastBootExposure(VI_PIPE ViPipe, CVI_U32 expLine, CVI_U32 again, CVI_U32 dgain, CVI_U32 ispdgain);
void *AE_Malloc(CVI_U8 sID, size_t size);
void AE_Free(CVI_U8 sID, void *ptr);
void AE_ConfigExposureTime_ISO(CVI_U8 sID, AE_WDR_FRAME wdrFrm, CVI_FLOAT time, CVI_U32 ISO);
void AE_ConfigExposureTime_Gain(CVI_U8 sID, AE_WDR_FRAME wdrFrm, CVI_FLOAT time, AE_GAIN *pstGain);
void AE_SetLumaBase(CVI_U8 sID, LUMA_BASE_E type);
void AE_SetParameterUpdate(CVI_U8 sID, AE_PARAMETER_UPDATE paraItem);
CVI_S32 AE_SetRawDumpFrameID(CVI_U8 sID, CVI_U32 fid, CVI_U8 frmNum);
CVI_S32 AE_GetRawReplayExpBuf(CVI_U8 sID, CVI_U8 *buf, CVI_U32 *bufSize);
CVI_S32 AE_SetRawReplayExposure(CVI_U8 sID, const ISP_EXP_INFO_S *pstExpInfo);
void AE_SetRawReplayMode(CVI_U8 sID, CVI_BOOL mode);
CVI_S32 AE_isRawReplayMode(CVI_U8 sID);
CVI_S32 AE_GetRawReplayFrmNum(CVI_U8 sID, CVI_U8 *bootFrmNum, CVI_U8 *ispDgainPeriodNum);
void GenNewRaw(void *pDstOri, void *pSrcOri, CVI_U32 sizeBk, CVI_U32 raw_mode,
CVI_U32 raw_w, CVI_U32 raw_h, CVI_U32 nRawBlc);
void AE_SetAeSimMode(CVI_BOOL bMode);
CVI_BOOL AE_IsAeSimMode(void);
void AE_SetAeSimEv(CVI_U8 sID);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif // _AE_ALG_H_