nt9856x/code/hdal/vendor/cv/include/vendor_ive.h
2023-03-28 15:07:53 +08:00

225 lines
6.9 KiB
C
Executable File

/**
Public header file for dal_ive
This file is the header file that define the API and data type for vendor_ive.
@file vendor_ive.h
@ingroup mILibIPLCom
@note Nothing (or anything need to be mentioned).
Copyright Novatek Microelectronics Corp. 2018. All rights reserved.
*/
#ifndef _VENDOR_IVE_H_
#define _VENDOR_IVE_H_
#include "hd_type.h"
#define VENDOR_IVE_MSG_ERR -1
#define VENDOR_IVE_MSG_TIMEOUT -2
#define VENDOR_IVE_GEN_FILT_NUM 10
#define VENDOR_IVE_EDGE_COEFF_NUM 9
#define VENDOR_IVE_EDGE_TH_LUT_TAP 15
#define VENDOR_IVE_MORPH_NEIGH_NUM 24
#define VENDOR_IVE_IOREMAP_IN_KERNEL 1
//----------------------------------------------------------------------
typedef struct _VENDOR_IVE_TRIGGER_PARAM {
BOOL is_nonblock;
BOOL wait_end;
UINT32 time_out_ms; ///< force time out when wait_end == TRUE, set 0 for disable time out
} VENDOR_IVE_TRIGGER_PARAM;
//----------------------------------------------------------------------
/**
IVE structure - ive kdrv open object
*/
typedef struct _VENDOR_IVE_OPENCFG {
UINT32 ive_clock_sel; //Engine clock selection
} VENDOR_IVE_OPENCFG;
//----------------------------------------------------------------------
typedef struct _VENDOR_IVE_IN_IMG_INFO {
UINT32 width; //image width
UINT32 height; //image height
UINT32 lineofst; //DRAM line offset of input channel
} VENDOR_IVE_IN_IMG_INFO;
//----------------------------------------------------------------------
/**
IVE VENDOR Address info
*/
typedef struct _VENDOR_IVE_IMG_DMA_INFO {
UINT32 addr; //DMA address of Y channel
} VENDOR_IVE_IMG_IN_DMA_INFO, VENDOR_IVE_IMG_OUT_DMA_INFO;
//----------------------------------------------------------------------
/**
IVE VENDOR general filter param and Enable/Disable
*/
typedef struct _VENDOR_IVE_GENERAL_FILTER_PARAM {
BOOL enable;
UINT32 filt_coeff[VENDOR_IVE_GEN_FILT_NUM];
//UINT32 filt_norm;
} VENDOR_IVE_GENERAL_FILTER_PARAM;
//----------------------------------------------------------------------
typedef enum {
VENDOR_IVE_MEDIAN = 0, //find median value in the filter
VENDOR_IVE_MAX = 1, //find the maximum in the filter
VENDOR_IVE_MIN = 2, //find the minimum in the filter
VENDOR_IVE_MEDIAN_IVD_TH = 3, //find median value with invalid threshold in the filter //for_528_only
//VENDOR_IVE_MEDIAN_W_INVAL = 3,
ENUM_DUMMY4WORD(VENDOR_IVE_MEDN_MODE)
} VENDOR_IVE_MEDN_MODE;
/**
IVE VENDOR median filter param and Enable/Disable
*/
typedef struct _VENDOR_IVE_MEDIAN_FILTER_PARAM {
BOOL enable;
VENDOR_IVE_MEDN_MODE mode;
UINT32 medn_inval_th; //for 528
} VENDOR_IVE_MEDIAN_FILTER_PARAM;
//----------------------------------------------------------------------
typedef enum {
VENDOR_IVE_BI_DIR = 0, //use 2 edge filters of X & Y direction to calculate X & Y edge response separately
VENDOR_IVE_NO_DIR = 1, //use 1 edge filter without direction to calculate edge response
ENUM_DUMMY4WORD(VENDOR_IVE_EDGE_MODE)
} VENDOR_IVE_EDGE_MODE;
/**
IVE VENDOR edge filter param and Enable/Disable
*/
typedef struct _VENDOR_IVE_EDGE_FILTER_PARAM {
BOOL enable;
VENDOR_IVE_EDGE_MODE mode;
UINT32 edge_coeff1[VENDOR_IVE_EDGE_COEFF_NUM];
UINT32 edge_coeff2[VENDOR_IVE_EDGE_COEFF_NUM];
UINT32 edge_shift_bit;
UINT32 AngSlpFact;
} VENDOR_IVE_EDGE_FILTER_PARAM;
//----------------------------------------------------------------------
/**
IVE VENDOR non-maximal supression param and Enable/Disable
*/
typedef struct _VENDOR_IVE_NON_MAX_SUP_PARAM {
BOOL enable;
UINT32 mag_thres;
} VENDOR_IVE_NON_MAX_SUP_PARAM;
//----------------------------------------------------------------------
/**
IVE VENDOR threshold LUT param and Enable/Disable
*/
typedef struct _VENDOR_IVE_THRES_LUT_PARAM {
BOOL enable;
UINT32 thres_lut[VENDOR_IVE_EDGE_TH_LUT_TAP];
} VENDOR_IVE_THRES_LUT_PARAM;
//----------------------------------------------------------------------
typedef enum {
VENDOR_IVE_DILATE = 0, //do dilation
VENDOR_IVE_ERODE = 1, //do erosion
ENUM_DUMMY4WORD(VENDOR_IVE_MORPH_OP)
} VENDOR_IVE_MORPH_OP;
typedef enum {
VENDOR_IVE_TH_LUT_IN = 0, //4 bit input from threshold LUT
VENDOR_IVE_DRAM_4BIT = 1, //4 bit input from dram directly
VENDOR_IVE_DRAM_1BIT = 2, //1 bit input from dram directly
ENUM_DUMMY4WORD(VENDOR_IVE_MORPH_IN_SEL)
} VENDOR_IVE_MORPH_IN_SEL;
/**
IVE VENDOR morphological filter param and Enable/Disable
*/
typedef struct _VENDOR_IVE_MORPH_FILTER_PARAM {
BOOL enable;
VENDOR_IVE_MORPH_IN_SEL in_sel;
VENDOR_IVE_MORPH_OP operation;
BOOL neighbor[VENDOR_IVE_MORPH_NEIGH_NUM];
} VENDOR_IVE_MORPH_FILTER_PARAM;
//----------------------------------------------------------------------
/**
IVE VENDOR edge filter param and Enable/Disable
*/
typedef struct _VENDOR_IVE_INTEGRAL_IMG_PARAM {
BOOL enable;
} VENDOR_IVE_INTEGRAL_IMG_PARAM;
//----------------------------------------------------------------------
/**
IVE VENDOR output select and ofset
*/
typedef struct _VENDOR_IVE_OUTSEL_PARAM {
UINT32 OutDataSel;
UINT32 Outlofs;
}VENDOR_IVE_OUTSEL_PARAM;
//----------------------------------------------------------------------
/**
IVE KDRV IRV parameter
*/
typedef struct _VENDOR_IVE_IRV_PARAM {
BOOL enable;
BOOL hist_mode_sel;
BOOL invalid_val;
UINT32 thr_s;
UINT32 thr_h;
} VENDOR_IVE_IRV_PARAM;
/**
IVE KDRV flow control parameter
*/
typedef struct _VENDOR_IVE_FLOWCT_PARAM {
UINT32 dma_do_not_sync;
} VENDOR_IVE_FLOWCT_PARAM;
typedef enum {
VENDOR_IVE_INPUT_INFO = 0, //input info
VENDOR_IVE_INPUT_ADDR = 1, //input addr
VENDOR_IVE_OUTPUT_ADDR = 2, //output addr
VENDOR_IVE_GENERAL_FILTER = 3, //general filter
VENDOR_IVE_MEDIAN_FILTER = 4, //median filter
VENDOR_IVE_EDGE_FILTER = 5, //edge filter
VENDOR_IVE_NON_MAX_SUP = 6, //non-maximum suppression
VENDOR_IVE_THRES_LUT = 7, //edge filter
VENDOR_IVE_MORPH_FILTER = 8, //morphology operation
VENDOR_IVE_INTEGRAL_IMG = 9, //integral image
VENDOR_IVE_OUTSEL = 10, //output select
VENDOR_IVE_IRV = 11, //IRV
VENDOR_IVE_DMA_ABORT = 12, //dma abort
VENDOR_IVE_FLOWCT = 13, //flow control
VENDOR_IVE_VERSION = 14, //get version info
ENUM_DUMMY4WORD(VENDOR_IVE_FUNC)
} VENDOR_IVE_FUNC;
/********************************************************************
EXTERN VARIABLES & FUNCTION PROTOTYPES DECLARATIONS
********************************************************************/
extern INT32 vendor_ive_init(void);
extern INT32 vendor_ive_uninit(void);
extern INT32 vendor_ive_set_param(VENDOR_IVE_FUNC param_id, void *p_param, UINT32 id);
extern INT32 vendor_ive_get_param(VENDOR_IVE_FUNC param_id, void *p_param, UINT32 id);
extern INT32 vendor_ive_trigger(VENDOR_IVE_TRIGGER_PARAM *p_param, UINT32 id);
extern VOID vendor_ive_get_version(void *p_param);
extern INT32 vendor_ive_trigger_nonblock(UINT32 id);
extern INT32 vendor_ive_waitdone_nonblock(UINT32 *timeout, UINT32 id);
#endif //_VENDOR_IVE_H_