382 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			382 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #ifndef _AE_ALG_H_
 | |
| #define _AE_ALG_H_
 | |
| 
 | |
| #if defined(__KERNEL__) || defined(__FREERTOS)
 | |
| #include "kwrap/type.h"
 | |
| #include "isp_api.h"
 | |
| #endif
 | |
| 
 | |
| #define AE_SUPPORT_8_SENSOR         0
 | |
| 
 | |
| //LA INFO
 | |
| #define LA_WIN_X                    32                          ///< SIE LA window number x
 | |
| #define LA_WIN_Y                    32                          ///< SIE LA window number y
 | |
| #define LA_WIN_NUM                  (LA_WIN_X * LA_WIN_Y)
 | |
| #define AE_HIST_NUM                 64                          ///< historgram bin number
 | |
| 
 | |
| // AE Alg. default value
 | |
| #define AE_WIN_X                    8                      ///< ae weighting window x
 | |
| #define AE_WIN_Y                    8                      ///< ae weighting window y
 | |
| #define AE_WIN_NUM                  (AE_WIN_X * AE_WIN_Y)
 | |
| 
 | |
| #define AEALG_DYNAMIC_LV_NUM        21
 | |
| #define AEALG_CURVEGEN_NODE_MAX     12
 | |
| 
 | |
| #define AEALG_STATUS_RATIO          2
 | |
| 
 | |
| #define AE_RATE                     1
 | |
| 
 | |
| #define PDCTL_DBG_EN                0
 | |
| #define PDCTL_P_FACTOR_DOWN         12
 | |
| #define PDCTL_D_FACTOR_DOWN         8
 | |
| #define PDCTL_P_FACTOR_UP           12
 | |
| #define PDCTL_D_FACTOR_UP           8
 | |
| 
 | |
| /**
 | |
| 	AEALG error code.
 | |
| */
 | |
| typedef enum _AEALG_ER {
 | |
| 	AEALG_OK = 0,		  ///< AE OK
 | |
| 	AEALG_PAR,			  ///< AE Parameter error
 | |
| 	AEALG_MAX,
 | |
| 	ENUM_DUMMY4WORD(AEALG_ER)
 | |
| } AEALG_ER;
 | |
| 
 | |
| /**
 | |
| 	AE id
 | |
| */
 | |
| typedef enum _AE_ID {
 | |
| 	AE_ID_1 = 0,                    ///< ae id 1
 | |
| 	AE_ID_2,                        ///< ae id 2
 | |
| 	AE_ID_3,                        ///< ae id 3
 | |
| 	AE_ID_4,                        ///< ae id 4
 | |
| 	AE_ID_5,                        ///< ae id 5
 | |
| 	AE_ID_MAX_NUM,
 | |
| 	ENUM_DUMMY4WORD(AE_ID)
 | |
| } AE_ID;
 | |
| 
 | |
| /**
 | |
| 	AE Alg ProcMode.
 | |
| */
 | |
| typedef enum AE_PROC_MODE {
 | |
| 	AE_PROC_MOVIE,
 | |
| 	AE_PROC_PHOTO,
 | |
| 	AE_PROC_CAPTURE,
 | |
| 	ENUM_DUMMY4WORD(AE_PROC_MODE)
 | |
| } AE_PROC_MODE;
 | |
| 
 | |
| typedef enum _AE_FLICKER_MODE {
 | |
| 	AE_FLICKER_NORMAL = 0,
 | |
| 	AE_FLICKER_EXPT_FREE,
 | |
| 	AE_FLICKER_INDOOR,
 | |
| 	ENUM_DUMMY4WORD(AE_FLICKER_MODE)
 | |
| } AE_FLICKER_MODE;
 | |
| 
 | |
| typedef enum _AE_FLICKER {
 | |
| 	AE_FLICKER_50HZ = 0,                           ///< flicker 50Mz
 | |
| 	AE_FLICKER_60HZ,                               ///< flicker 60Mz
 | |
| 	AE_FLICKER_55HZ,                               ///< flicker 55Mz
 | |
| 	AE_FLICKER_MAX,
 | |
| 	ENUM_DUMMY4WORD(AE_FLICKER)
 | |
| } AE_FLICKER;
 | |
| 
 | |
| typedef enum _AE_ISOMODE_MOV_TYPE {
 | |
| 	AE_ISOMODE_MOV_PARAM = 0,
 | |
| 	AE_ISOMODE_MOV_UIMAX,
 | |
| 	AE_ISOMODE_MOV_MAXCNT,
 | |
| 	ENUM_DUMMY4WORD(AE_ISOMODE_MOV_TYPE)
 | |
| } AE_ISOMODE_MOV_TYPE;
 | |
| 
 | |
| typedef enum _AE_ISOMODE_PHOTO_TYPE {
 | |
| 	AE_ISOMODE_PHOTO_PARAM = 0,
 | |
| 	AE_ISOMODE_PHOTO_SPEED,
 | |
| 	AE_ISOMODE_PHOTO_UIMAX,
 | |
| 	AE_ISOMODE_PHOTO_MAXCNT,
 | |
| 	ENUM_DUMMY4WORD(AE_ISOMODE_PHOTO_TYPE)
 | |
| } AE_ISOMODE_PHOTO_TYPE;
 | |
| 
 | |
| typedef enum _AE_ADJUST_STATUS {
 | |
| 	AE_STATUS_STABLE = 0,
 | |
| 	AE_STATUS_FINE,
 | |
| 	AE_STATUS_COARSE,
 | |
| 	AE_STATUS_LIMIT,
 | |
| 	ENUM_DUMMY4WORD(AE_ADJUST_STATUS)
 | |
| } AE_ADJUST_STATUS;
 | |
| 
 | |
| typedef enum _AE_ROI_OPTION {
 | |
| 	ROI_ROUNDING = 0,
 | |
| 	ROI_EROSION,
 | |
| 	ROI_DIALATION,
 | |
| 	ROI_ROUND_MAX
 | |
| } AE_ROI_OPTION;
 | |
| 
 | |
| typedef enum _AE_PERF_CMD {
 | |
| 	AE_PERF_NONE = 0,
 | |
| 	AE_PERF_FIRST_STABLE,
 | |
| 	AE_PERF_EVERY_STABLE,
 | |
| 	AE_PERF_MAX
 | |
| } AE_PERF_CMD;
 | |
| 
 | |
| typedef enum _AE_MODE {
 | |
| 	AUTO_MODE = 0,
 | |
| 	MANUAL_MODE,
 | |
| 	LOCK_MODE,
 | |
| 	AE_MODE_MAX
 | |
| } AE_MODE;
 | |
| 
 | |
| typedef struct _AE_ROI_WIN {
 | |
| 	UINT32 start_x;
 | |
| 	UINT32 start_y;
 | |
| 	UINT32 end_x;
 | |
| 	UINT32 end_y;
 | |
| 	AE_ROI_OPTION option;
 | |
| 	UINT32 roi_center_w;
 | |
| 	UINT32 roi_neighbor_w0;
 | |
| 	UINT32 roi_neighbor_w1;
 | |
| } AE_ROI_WIN;
 | |
| 
 | |
| typedef struct _AE_LA_WIN {
 | |
| 	UINT32 la_matrix[LA_WIN_NUM]; 
 | |
| } AE_LA_WIN;
 | |
| 
 | |
| typedef struct _AE_APERTURE_BOUND {
 | |
| 	UINT32 h;  //high
 | |
| 	UINT32 l;  //low, high bound and low bound can not be the same 
 | |
| } AE_APERTURE_BOUND;
 | |
| 
 | |
| /**
 | |
| 	AE priority mode
 | |
| */
 | |
| typedef enum _AEALG_PRIORITY_MODE {
 | |
| 	AEALG_PRIORITY_OFF = 0,
 | |
| 	AEALG_PRIORITY_EXPT,
 | |
| 	AEALG_PRIORITY_ISO,
 | |
| 	AEALG_PRIORITY_APERTURE,
 | |
| 	AEALG_PRIORITY_MAX,
 | |
| 	ENUM_DUMMY4WORD(AEALG_PRIORITY_MODE)
 | |
| } AEALG_PRIORITY_MODE;
 | |
| 
 | |
| typedef enum _AEALG_SHOOT_DIR {
 | |
| 	AEALG_SHOOT_UP = 0,                   // AE shoot up (increase gain)
 | |
| 	AEALG_SHOOT_DOWN,                     // AE shoot down (decrease gain)
 | |
| 	AEALG_SHOOT_MAXCNT,
 | |
| 	ENUM_DUMMY4WORD(AEALG_SHOOT_DIR)
 | |
| } AEALG_SHOOT_DIR;
 | |
| 
 | |
| typedef enum _AE_AFD_TRIGGER {
 | |
| 	AFD_TRIGGER_NONE = 0,
 | |
| 	AFD_TRIGGER_TYPE_MAX,
 | |
| 	ENUM_DUMMY4WORD(AE_AFD_TRIGGER)
 | |
| } AE_AFD_TRIGGER;
 | |
| 
 | |
| 
 | |
| /**
 | |
| 	AE Parameter.
 | |
| */
 | |
| typedef struct _AE_EXPECT_LUM {
 | |
| 	UINT32 lum_mov;                                ///< range : 0~255
 | |
| 	UINT32 lum_photo;                              ///< range : 0~255
 | |
| 	UINT32 tab_ratio_mov[AEALG_DYNAMIC_LV_NUM];    ///< range : 0~100, 100 = 1X, dynamic expected luminance table for movie (LV0 ~ LV20)
 | |
| 	UINT32 tab_ratio_photo[AEALG_DYNAMIC_LV_NUM];  ///< range : 0~100, 100 = 1X, dynamic expected luminance table for capture (LV0 ~ LV20)
 | |
| } AE_EXPECT_LUM;
 | |
| 
 | |
| typedef struct _AE_LA_CLAMP {
 | |
| 	UINT32 tab_normal_h[AEALG_DYNAMIC_LV_NUM];     ///< range : 0~255, 8bit value for la clamp at non-shdr mode
 | |
| 	UINT32 tab_normal_l[AEALG_DYNAMIC_LV_NUM];     ///< range : 0~255, 8bit value for la clamp at non-shdr mode
 | |
| 	UINT32 tab_shdr_h[AEALG_DYNAMIC_LV_NUM];       ///< range : 0~1023, 1X = 100, ratio of expected luminance for la clamp at shdr mode
 | |
| 	UINT32 tab_shdr_l[AEALG_DYNAMIC_LV_NUM];       ///< range : 0~1023, 1X = 100, ratio of expected luminance for la clamp at shdr mode
 | |
| } AE_LA_CLAMP;
 | |
| 
 | |
| typedef struct _AE_OVER_EXPOSURE {
 | |
| 	UINT32 enable;
 | |
| 	UINT32 lum;                                    ///< range : 0~255
 | |
| 	UINT32 speed;                                  ///< range : 0~5
 | |
| 	UINT32 tab_ratio[AEALG_DYNAMIC_LV_NUM];        ///< range : 0~100, 1X = 100
 | |
| 	UINT32 tab_thr_mov[AEALG_DYNAMIC_LV_NUM];      ///< range : 0~255, adjust value threshold
 | |
| 	UINT32 tab_thr_photo[AEALG_DYNAMIC_LV_NUM];    ///< range : 0~255, adjust value threshold
 | |
| 	UINT32 tab_maxcnt[AEALG_DYNAMIC_LV_NUM];       ///< range : 0~1023, max threshold of over exposure block number
 | |
| 	UINT32 tab_mincnt[AEALG_DYNAMIC_LV_NUM];       ///< range : 0~1023, max threshold of over exposure block number
 | |
| } AE_OVER_EXPOSURE;
 | |
| 
 | |
| typedef struct _AE_BOUNDARY {
 | |
| 	UINT32 h;  //high
 | |
| 	UINT32 l;  //low, high bound and low bound can not be the same
 | |
| } AE_BOUNDARY;
 | |
| 
 | |
| typedef struct _AE_BOUNDARY64 {
 | |
| 	UINT64 h;                                       ///< high value
 | |
| 	UINT64 l;                                       ///< low value, high value and low value can not be the same.
 | |
| } AE_BOUNDARY64;
 | |
| 
 | |
| typedef struct _AE_CONVERGENCE {
 | |
| 	UINT32 skip_frame;                             ///< range : 0~10
 | |
| 	UINT32 speed;                                  ///< range : 0~128, 0 = slowest, 128 = fastest
 | |
| 	AE_BOUNDARY range_conv;                        ///< range : 0~100, 10 = +/-10% convergence range
 | |
| 	UINT32 freeze_en;
 | |
| 	UINT32 freeze_cyc;                             ///< range : 0~100, 10 = 1s, the unit is 1/10s
 | |
| 	UINT32 freeze_thr;                             ///< range : 0~1000, max threshold for sum of luminance change (%) in freeze_cyc
 | |
| 	UINT32 slowshoot_en;
 | |
| 	UINT32 slowshoot_range;                        ///< range : 0~100, 10 = +/-10% (on convergence range) for slowshoot range
 | |
| 	UINT32 slowshoot_thr;                          ///< range : 0~100, max speed value in slowshoot range
 | |
| 	UINT32 stable_counter;                         ///< range : 0~100, stable_counter
 | |
| } AE_CONVERGENCE;
 | |
| 
 | |
| typedef struct _AE_GEN_NODE {
 | |
| 	UINT32 expt;                                   ///< the unit is us
 | |
| 	UINT32 iso;                                    ///< range : 100~3276800
 | |
| 	UINT32 aperture;
 | |
| 	UINT32 reserved;
 | |
| } AE_GEN_NODE;
 | |
| 
 | |
| typedef struct _AE_EXTEND_PARAM {
 | |
| 	UINT32 dgain_mode;
 | |
| 	UINT32 dgain_th;
 | |
| 	UINT32 down_speed;
 | |
| 	UINT32 up_speed1;
 | |
| 	UINT32 up_speed2;
 | |
| 	UINT32 reserved2;
 | |
| 	UINT32 reserved3;
 | |
| 	UINT32 reserved4[AEALG_DYNAMIC_LV_NUM]; 
 | |
| 	UINT32 reserved5[AEALG_DYNAMIC_LV_NUM]; 
 | |
| 	UINT32 reserved6[AEALG_DYNAMIC_LV_NUM]; 
 | |
| } AE_EXTEND_PARAM;
 | |
| 
 | |
| typedef struct _AE_EXTEND_FPS {
 | |
| 	UINT32 sensor_fps;                             ///< range : 100~6000, 60000 = 60.00fps
 | |
| 	UINT32 extend_fps;                             ///< range : 100~6000, 60000 = 60.00fps
 | |
| } AE_EXTEND_FPS;
 | |
| 
 | |
| typedef struct _AE_CURVE_GEN_MOVIE {
 | |
| 	UINT32 iso_calcoef;                            ///< range : 0~1023, fno * fno * 10
 | |
| 	AE_FLICKER freq;
 | |
| 	AE_GEN_NODE node[AEALG_CURVEGEN_NODE_MAX];
 | |
| 	UINT32 node_num;                               ///< range : 2~12, 12=AEALG_CURVEGEN_NODE_MAX
 | |
| 	UINT32 iso_max;                                ///< range : 100~3276800
 | |
| 	UINT32 hdr_ratio[ISP_SEN_MFRAME_MAX_NUM];      ///< range : 0~16, max shdr ratio = 4EV
 | |
| 	UINT32 auto_lowlight_en;
 | |
| 	AE_EXTEND_FPS ext_fps[5];
 | |
| 	AE_ISOMODE_MOV_TYPE iso_mode;
 | |
| 	UINT32 isp_gain_thres;                         ///< range : 100~3276800
 | |
| 	AE_FLICKER_MODE flicker_mode;
 | |
| } AE_CURVE_GEN_MOVIE;
 | |
| 
 | |
| typedef struct _AE_METER_WINDOW {
 | |
| 	UINT32 matrix[AE_WIN_NUM];                     ///< range : 0~1023
 | |
| } AE_METER_WINDOW;
 | |
| 
 | |
| typedef struct _AE_LUM_GAMMA {
 | |
| 	UINT16 gamma[65];                              ///< range : 0~1023
 | |
| } AE_LUM_GAMMA;
 | |
| 
 | |
| typedef struct _AE_SHDR {
 | |
| 	UINT32 expy_le;                                ///< range : 0~255
 | |
| 	UINT32 tab_ratio_le[AEALG_DYNAMIC_LV_NUM];     ///< range : 0~100
 | |
| 	UINT32 adj_ratio[AEALG_DYNAMIC_LV_NUM];
 | |
| 	UINT32 tab_reserved1[AEALG_DYNAMIC_LV_NUM];
 | |
| 	UINT32 fixed_iso_en;
 | |
| 	UINT32 mode_sel;
 | |
| } AE_SHDR;
 | |
| 
 | |
| typedef struct _AE_SHDR_HBS {
 | |
| 	UINT32 hbs_en;
 | |
| 	UINT32 hbs_adj_ratio[AEALG_DYNAMIC_LV_NUM];
 | |
| } AE_SHDR_HBS;
 | |
| 
 | |
| typedef struct _AE_IRIS_PID {
 | |
| 	INT32 kp;
 | |
| 	INT32 ki;
 | |
| 	INT32 kd;
 | |
| } AE_IRIS_PID;
 | |
| 
 | |
| typedef struct _AE_IRIS_CFG {
 | |
| 	UINT32 enable;
 | |
| 	UINT32 exptime_min;                            ///< exposure time threshold for iris enable
 | |
| 	UINT32 probe_balance;
 | |
| 	INT32 balance_ratio;
 | |
| 	INT32 driving_ratio;
 | |
| 	AE_IRIS_PID iris_ctrl;
 | |
| 	UINT32 pwm_id;
 | |
| 	UINT32 drv_max;
 | |
| 	UINT32 freeze_time;
 | |
| 	UINT32 unfreeze_time;
 | |
| 	UINT32 ctrl_dir_inv;
 | |
| 	UINT32 cali_out_balance;
 | |
| } AE_IRIS_CFG;
 | |
| 
 | |
| typedef struct _AE_SMART_IR_WEIGHT{
 | |
| 	UINT32 center;
 | |
| 	UINT32 around;
 | |
| 	UINT32 other;
 | |
| } AE_SMART_IR_WEIGHT;
 | |
| 
 | |
| typedef struct _AE_AFD_PARAM{
 | |
| 	UINT32 scaling_factor_w;
 | |
| 	UINT32 scaling_factor_h;
 | |
| 	UINT32 limit_l;
 | |
| 	UINT32 limit_h;
 | |
| 	UINT32 afd_thres_i;
 | |
| 	UINT32 afd_thres_s;
 | |
| 	UINT32 afd_thres_i_blk;
 | |
| 	UINT32 afd_thres_s_blk;
 | |
| 	UINT32 afd_strength_ratio;
 | |
| 	UINT32 afd_50hz_thres;
 | |
| 	UINT32 afd_60hz_thres;
 | |
| } AE_AFD_PARAM;
 | |
| 
 | |
| typedef struct _AE_CURVE_GEN_PHOTO {
 | |
| 	AE_GEN_NODE node[AEALG_CURVEGEN_NODE_MAX];
 | |
| 	UINT32 node_num;                               ///< range : 2~12, 12=AEALG_CURVEGEN_NODE_MAX
 | |
| 	UINT32 expt_max;                               ///< the unit is us
 | |
| 	UINT32 iso_max;                                ///< range : 100~3276800
 | |
| 	AE_ISOMODE_PHOTO_TYPE iso_mode;
 | |
| 	UINT32 isp_gain_thres;                         ///< reserved
 | |
| } AE_CURVE_GEN_PHOTO;
 | |
| 
 | |
| typedef struct _AE_MANUAL {
 | |
| 	AE_MODE mode;
 | |
| 	UINT32 expotime;                               ///< the unit is us
 | |
| 	UINT32 iso_gain;                               ///< range : 100~3276800
 | |
| 	UINT32 aperture;
 | |
| 	UINT64 totalgain;                                     ///< reserved, change to totalgain (to do!!)
 | |
| } AE_MANUAL;
 | |
| 
 | |
| typedef struct _AE_STATUS_INFO {
 | |
| 	UINT32 lv;
 | |
| 	UINT32 lv_base;                                ///< 1000000 = AEALG_LV_ACCURACY_BASE
 | |
| 	UINT32 ev;
 | |
| 	UINT32 ev_base;                                ///< 1000000 = AEALG_EV_ACCURACY_BASE
 | |
| 	UINT32 lum;                                    ///< range : 0~255, current raw luminance at 8bit
 | |
| 	UINT32 hist_lum;
 | |
| 	UINT32 expotime[ISP_SEN_MFRAME_MAX_NUM];       ///< the unit is us
 | |
| 	UINT32 iso_gain[ISP_SEN_MFRAME_MAX_NUM];       ///< range : 100~3276800
 | |
| 	UINT32 expect_lum;                             ///< range : 0~255, raw expected luminance at 8bit
 | |
| 	UINT32 overexp_adj;                            ///< range : 0~255, overexposure adjust raw luminance at 8bit
 | |
| 	UINT32 fps;                                    ///< 3000 = 30.00 fps
 | |
| 	UINT32 state_adj;
 | |
| 	UINT32 overexp_cnt;                            ///< 1 = 1/1000, overexposure block ratio
 | |
| 	UINT32 mf_num;
 | |
| 	UINT32 la_data[ISP_SEN_MFRAME_MAX_NUM][AE_WIN_NUM];
 | |
| 	UINT32 hist_data[ISP_SEN_MFRAME_MAX_NUM][AE_HIST_NUM];
 | |
| 	UINT32 aperture;
 | |
| } AE_STATUS_INFO;
 | |
| 
 | |
| typedef struct _AE_PARAM {
 | |
| 	UINT32 base_iso;
 | |
| 	UINT32 base_gain_ratio;
 | |
| 	AE_EXPECT_LUM *expect_lum;
 | |
| 	AE_LA_CLAMP *la_clamp;
 | |
| 	AE_OVER_EXPOSURE *over_exposure;
 | |
| 	AE_CONVERGENCE *convergence;
 | |
| 	AE_CURVE_GEN_MOVIE *curve_gen_movie;
 | |
| 	AE_METER_WINDOW *meter_win;
 | |
| 	AE_LUM_GAMMA *lum_gamma;
 | |
| 	AE_SHDR *shdr;
 | |
| 	AE_IRIS_CFG *iris_cfg;
 | |
| 	AE_CURVE_GEN_PHOTO *curve_gen_photo;
 | |
| 	AE_MANUAL *manual;
 | |
| 	AE_STATUS_INFO *status;
 | |
| } AE_PARAM;
 | |
| 
 | |
| #endif
 | |
| 
 | 
