184 lines
4.6 KiB
C
Executable File
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
|
|
|