nt9856x/code/hdal/vendor/isp/drivers/include/af_alg.h
2023-03-28 15:07:53 +08:00

184 lines
4.6 KiB
C
Executable File

#ifndef _AF_ALG_H_
#define _AF_ALG_H_
#if defined(__KERNEL__) || defined(__FREERTOS)
#include "kwrap/type.h"
#endif
//=============================================================================
// struct & definition
//=============================================================================
#define AFALG_MIN(A, B) (((A) <= (B)) ? (A) : (B))
#define AFALG_MAX(A, B) (((A) >= (B)) ? (A) : (B))
#define AFALG_ABS(X) (((X) < 0) ? -(X) : (X))
#define AFALG_DIFF(A, B) (((A) >= (B)) ? ((A)-(B)) : ((B)-(A)))
#define AFALG_CLAMP(X, L, H) (((X) >= (H)) ? (H) : (((X) <= (L)) ? (L) : (X)))
#define AF_WIN_HW_X 8
#define AF_WIN_HW_Y 8
#define AF_WIN_ALG_X 8
#define AF_WIN_ALG_Y 8
#define AF_2ND_ID_PARAM 1 // AF_ID_MAX_NUM == 2
/**
AF id
*/
typedef enum _AF_ID {
AF_ID_1 = 0, ///< af id 1
AF_ID_2, ///< af id 2
AF_ID_MAX_NUM,
ENUM_DUMMY4WORD(AF_ID)
} AF_ID;
/**
AF shot mode
*/
typedef enum _AFALG_MODE {
AFALG_MODE_SINGLE = 0,
AFALG_MODE_CONTINUOUS,
AFALG_MODE_UNKNOWN,
ENUM_DUMMY4WORD(AFALG_MODE)
} AFALG_MODE;
/**
AF execute command
*/
typedef enum _AFALG_CMD {
AFALG_CMD_STOP = 0, ///< AF process cmd: stop - initial state
AFALG_CMD_RUN, ///< AF process cmd: run - AF is running
AFALG_CMD_END, ///< AF process cmd: end - AF is finished
AFALG_CMD_QUIT, ///< AF process cmd: quit by UI
ENUM_DUMMY4WORD(AFALG_CMD)
} AFALG_CMD;
typedef enum _AFALG_STATUS_RESULT {
AFALG_STS_INIT = 0x00, ///< AF result: initialize
AFALG_STS_SUCCESS = 0x01, ///< AF result: success
AFALG_STS_MULTI_TARGET = 0x02, ///< AF result: multi target
AFALG_STS_NO_TARGET = 0x04, ///< AF result: no target
AFALG_STS_LOW_VA = 0x08, ///< AF result: low VA
AFALG_STS_FLAT_CURVE = 0x10, ///< AF result: too flat
AFALG_STS_TIME_OUT = 0x20, ///< AF result: time out
AFALG_STS_NO_MOTOR = 0x40, ///< AF result: no motor driver exist
AFALG_STS_FAILURE = 0x80, ///< AF result: failure
ENUM_DUMMY4WORD(AFALG_STATUS_RESULT)
} AFALG_STATUS_RESULT;
typedef enum _AF_ALG_METHOD {
AF_ALG_HILL_CLIMB = 0,
AF_ALG_2ND_POLY_FIT,
AF_ALG_HYBRID,
AF_ALG_FULL_SEARCH,
AF_ALG_BACK_FORWARD,
ENUM_DUMMY4WORD(AF_ALG_METHOD)
} AF_ALG_METHOD;
typedef enum _AF_SHOT_MODE {
AF_MODE_SINGLE = 0,
AF_MODE_CONTINUOUS,
ENUM_DUMMY4WORD(AF_SHOT_MODE)
} AF_SHOT_MODE;
typedef enum _AF_SEARCH_DIR {
AF_DIR_2TELE = 0,
AF_DIR_2WIDE,
ENUM_DUMMY4WORD(AF_SEARCH_DIR)
} AF_SEARCH_DIR;
/**
AF threshold
*/
typedef struct _AF_THRES {
INT32 thres_rough;
INT32 thres_fine;
INT32 thres_final;
INT32 thres_restart;
} AF_THRES;
/**
AF step size
*/
typedef struct _AF_STEP_SIZE {
INT32 step_rough;
INT32 step_fine;
INT32 step_final;
} AF_STEP_SIZE;
/**
AF window weighting
*/
typedef struct _AF_WIN_WEIGHT {
UINT8 wei[AF_WIN_ALG_Y][AF_WIN_ALG_X];
} AF_WIN_WEIGHT;
/**
AF VA statistics
*/
typedef struct _AF_VA_STA {
UINT32 acc[AF_WIN_HW_Y][AF_WIN_HW_X];
} AF_VA_STA;
typedef enum _AF_DBG_MSG {
AF_DBG_NONE = 0x00000000,
AF_DBG_INFO = 0x00000001,
AF_DBG_VA = 0x00000002,
AF_DBG_PERF_MEASURE = 0x00000004,
AF_DBG_DUMP_PROC = 0x00010000,
AF_DBG_DUMP_IOCTL = 0x00020000,
ENUM_DUMMY4WORD(AF_DBG_MSG)
} AF_DBG_MSG;
/**
AF parameter
*/
typedef struct _AF_PARAM {
BOOL *func_en;
AF_ALG_METHOD *alg_method;
AF_SHOT_MODE *shot_mode;
AF_SEARCH_DIR *search_dir;
UINT32 *skip_frame;
AF_THRES *thres;
AF_STEP_SIZE *step_size;
UINT32 *max_count;
AF_WIN_WEIGHT *win_weight;
BOOL *retrigger;
AF_DBG_MSG *dbg_msg;
} AF_PARAM;
typedef struct _AF_CTRL_OBJ {
INT32 focus_pos;
INT32 zoom_pos;
UINT32 aperture_pos;
UINT32 shutter_ste;
BOOL ircut_ste;
} AF_CTRL_OBJ;
typedef enum _AF_VA_OPT {
AF_VA_G1G2_SUM = 0,
AF_VA_G1_ONLY,
AF_VA_G2_ONLY,
AF_VA_TYPE_MAX,
ENUM_DUMMY4WORD(AF_VA_OPT)
} AF_VA_OPT;
typedef enum _LENS_STATE {
LENS_STATE_IDLE = 0x00, // lens is in IDLE state
LENS_STATE_ZOOM_INIT = 0x01, // lens is in ZOOM INIT state
LENS_STATE_FOCUS_INIT = 0x02, // lens is in FOCUS INIT state
LENS_STATE_ZOOM_MOVING = 0x04, // lens is in ZOOM moving state
LENS_STATE_FOCUS_MOVING = 0x08, // lens is in FOCUS moving state
LENS_STATE_APERTURE_MOVING = 0x10, // lens is in APERTURE moving state
LENS_STATE_SHUTTER_MOVING = 0x20, // lens is in SHUTTER moving state
LENS_STATE_IRCUT_MOVING = 0x40, // lens is in IRCUT moving state
LENS_STATE_RESET = 0x80, // lens is in RESET state
LENS_STATE_POWER_OFF = 0x100, // lens is in POWER_OFF state
LENS_STATE_ALL = 0x1FF,
ENUM_DUMMY4WORD(LENS_STATE)
} LENS_STATE;
#endif