279 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			279 lines
		
	
	
		
			9.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/**
 | 
						|
    Public header file for dal_md
 | 
						|
 | 
						|
    This file is the header file that defines the API and data types for vendor_md.
 | 
						|
 | 
						|
    @file       vendor_md.h
 | 
						|
    @ingroup    vendor_md
 | 
						|
 | 
						|
    Copyright   Novatek Microelectronics Corp. 2019.    All rights reserved.
 | 
						|
*/
 | 
						|
#ifndef _VENDOR_MD_H_
 | 
						|
#define _VENDOR_MD_H_
 | 
						|
 | 
						|
/********************************************************************
 | 
						|
	INCLUDE FILES
 | 
						|
********************************************************************/
 | 
						|
#include "hd_type.h"
 | 
						|
 | 
						|
/********************************************************************
 | 
						|
	TYPE DEFINITION
 | 
						|
********************************************************************/
 | 
						|
 | 
						|
/**
 | 
						|
    KDRV MD structure - trigger parameter
 | 
						|
*/
 | 
						|
typedef struct _VENDOR_MD_TRIGGER_PARAM {
 | 
						|
	BOOL    is_nonblock;
 | 
						|
	UINT32	time_out_ms;	///< set 0 for disable time out
 | 
						|
} VENDOR_MD_TRIGGER_PARAM;
 | 
						|
 | 
						|
// Structure definition
 | 
						|
/**
 | 
						|
    MDBC Engine Operation Selection.
 | 
						|
 | 
						|
    Select MDBC module operation.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef enum {
 | 
						|
	KDRV_INIT              = 0,   ///< init mode
 | 
						|
	KDRV_NORM              = 1,   ///< normal mode
 | 
						|
	ENUM_DUMMY4WORD(VENDOR_MDBC_MODE)
 | 
						|
} VENDOR_MDBC_MODE;
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC Morphological process Sel.
 | 
						|
 | 
						|
    Select MDBC Morphological process type.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef enum {
 | 
						|
	KDRV_Median         = 0,   ///< Median
 | 
						|
	KDRV_Dilate         = 1,   ///< Dilate
 | 
						|
	KDRV_Erode          = 2,   ///< Erode
 | 
						|
	KDRV_Bypass         = 3,   ///< Bypass
 | 
						|
	ENUM_DUMMY4WORD(VENDOR_MDBC_MOR_SEL)
 | 
						|
} VENDOR_MDBC_MOR_SEL;
 | 
						|
//@}
 | 
						|
 | 
						|
typedef enum {
 | 
						|
	VENDOR_MDBC_ABORT_ENABLE = 0,
 | 
						|
	VENDOR_MDBC_ABORT_DISABLE = 1,
 | 
						|
	ENUM_DUMMY4WORD(VENDOR_MDBC_ABORT)
 | 
						|
} VENDOR_MDBC_ABORT;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC Input Info.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct {
 | 
						|
	UINT32      update_nei_en;  ///< update neighbor enable
 | 
						|
	UINT32      deghost_en;     ///< deghost enable
 | 
						|
	UINT32      roi_en0;        ///< roi0 enable
 | 
						|
	UINT32      roi_en1;        ///< roi1 enable
 | 
						|
	UINT32      roi_en2;        ///< roi2 enable
 | 
						|
	UINT32      roi_en3;        ///< roi3 enable
 | 
						|
	UINT32      roi_en4;        ///< roi4 enable
 | 
						|
	UINT32      roi_en5;        ///< roi5 enable
 | 
						|
	UINT32      roi_en6;        ///< roi6 enable
 | 
						|
	UINT32      roi_en7;        ///< roi7 enable
 | 
						|
	UINT32      chksum_en;      ///< check sum enable
 | 
						|
	UINT32      bgmw_save_bw_en;///< bandwidth saving enable
 | 
						|
	UINT32      bc_y_only_en;
 | 
						|
} VENDOR_MDBC_CONTROL_EN;
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC Input Info.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct {
 | 
						|
	UINT32      uiInAddr0;   ///< Y address
 | 
						|
	UINT32      uiInAddr1;   ///< UV address
 | 
						|
	UINT32      uiInAddr2;   ///< last UV address
 | 
						|
	UINT32      uiInAddr3;   ///< bgmodel address
 | 
						|
	UINT32      uiInAddr4;   ///< var1 address
 | 
						|
	UINT32      uiInAddr5;   ///< var2 address
 | 
						|
	UINT32      uiLofs0;     ///< Y line-offset
 | 
						|
	UINT32      uiLofs1;     ///< UV line-offset
 | 
						|
} VENDOR_MDBC_INPUT_INFO;
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC Output Info.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct {
 | 
						|
	UINT32      uiOutAddr0;  ///< foreground address
 | 
						|
	UINT32      uiOutAddr1;  ///< bgmodel address
 | 
						|
	UINT32      uiOutAddr2;  ///< var1 address
 | 
						|
	UINT32      uiOutAddr3;  ///< var2 address
 | 
						|
} VENDOR_MDBC_OUTPUT_INFO;
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC Model Match Parameters.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct _VENDOR_MDBC_MDMATCH_PARAM {
 | 
						|
	UINT32 lbsp_th;                         ///< Lbsp threshold
 | 
						|
	UINT32 d_colour;                        ///< D colour
 | 
						|
	UINT32 r_colour;                        ///< R colour
 | 
						|
	UINT32 d_lbsp;                          ///< D lbsp
 | 
						|
	UINT32 r_lbsp;                          ///< R lbsp
 | 
						|
	UINT32 model_num;                       ///< bg model number
 | 
						|
	UINT32 t_alpha;                         ///< T_ALPHA
 | 
						|
	UINT32 dw_shift;                        ///< DE_SHIFT
 | 
						|
	UINT32 dlast_alpha;                     ///< D_LAST_ALPHA
 | 
						|
	UINT32 min_match;                       ///< min match
 | 
						|
	UINT32 dlt_alpha;                       ///< DLT_ALPHA
 | 
						|
	UINT32 dst_alpha;                       ///< DST_ALPHA
 | 
						|
	UINT32 uv_thres;                        ///< UV threshold
 | 
						|
	UINT32 s_alpha;                         ///< S_ALPHA
 | 
						|
	UINT32 dbg_lumDiff;                     ///< debug Lum Diff
 | 
						|
	UINT32 dbg_lumDiff_en;                  ///< debug Lum Diff enable
 | 
						|
} VENDOR_MDBC_MDMATCH_PARAM;
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC Morphological process Parameters.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct _VENDOR_MDBC_MOR_PARAM {
 | 
						|
	UINT32 mor_th0;                         ///< mor0 threshold
 | 
						|
	UINT32 mor_th1;                         ///< mor1 threshold
 | 
						|
	UINT32 mor_th2;                         ///< mor2 threshold
 | 
						|
	UINT32 mor_th3;                         ///< mor3 threshold
 | 
						|
	UINT32 mor_th_dil;                      ///< mor dil threshold
 | 
						|
    UINT32 mor_sel0;                        ///< Morphological type
 | 
						|
    UINT32 mor_sel1;                        ///< Morphological type
 | 
						|
    UINT32 mor_sel2;                        ///< Morphological type
 | 
						|
    UINT32 mor_sel3;                        ///< Morphological type
 | 
						|
} VENDOR_MDBC_MOR_PARAM;
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC Update Parameters.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct _VENDOR_MDBC_UPD_PARAM {
 | 
						|
	UINT32 minT;                      ///< Update min T
 | 
						|
	UINT32 maxT;                      ///< Update max T
 | 
						|
	UINT32 maxFgFrm;                  ///< Update T when Max foreground frame
 | 
						|
	UINT32 deghost_dth;               ///< Deghost threshold for Dlast
 | 
						|
	UINT32 deghost_sth;               ///< Deghost threshold for S1
 | 
						|
	UINT32 stable_frm;                ///< stable frame
 | 
						|
	UINT32 update_dyn;                ///< update dyn
 | 
						|
	UINT32 va_distth;                 ///< Va distance threshold
 | 
						|
	UINT32 t_distth;                  ///< T distance threshold
 | 
						|
	UINT32 dbg_frmID;                 ///< debug frame ID
 | 
						|
	UINT32 dbg_frmID_en;              ///< debug frame ID enable
 | 
						|
	UINT32 dbg_rnd;                   ///< debug random
 | 
						|
	UINT32 dbg_rnd_en;                ///< debug random enable
 | 
						|
} VENDOR_MDBC_UPD_PARAM;
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC ROI Parameters.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct _VENDOR_MDBC_ROI_PARAM {
 | 
						|
	UINT32 roi_x;                     ///< roi x position
 | 
						|
	UINT32 roi_y;                     ///< roi y position
 | 
						|
	UINT32 roi_w;                     ///< roi width
 | 
						|
	UINT32 roi_h;                     ///< roi height
 | 
						|
	UINT32 roi_uv_thres;              ///< roi UV threshold
 | 
						|
	UINT32 roi_lbsp_th;               ///< roi Lbsp threshold
 | 
						|
	UINT32 roi_d_colour;              ///< roi D colour
 | 
						|
	UINT32 roi_r_colour;              ///< roi R colour
 | 
						|
	UINT32 roi_d_lbsp;                ///< roi D lbsp
 | 
						|
	UINT32 roi_r_lbsp;                ///< roi R lbsp
 | 
						|
	UINT32 roi_morph_en;              ///< roi morphological process enable
 | 
						|
	UINT32 roi_minT;                  ///< Update roi min T
 | 
						|
	UINT32 roi_maxT;                  ///< Update roi max T
 | 
						|
} VENDOR_MDBC_ROI_PARAM;
 | 
						|
//@}
 | 
						|
 | 
						|
/**
 | 
						|
    MDBC structure - MDBC input size info.
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct {
 | 
						|
	UINT32 uiMdbcWidth;              ///< MDBC input width
 | 
						|
	UINT32 uiMdbcHeight;             ///< MDBC input Height
 | 
						|
} VENDOR_MDBC_IN_SIZE;
 | 
						|
//@}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
*/
 | 
						|
//@{
 | 
						|
typedef struct _VENDOR_MD_PARAM {
 | 
						|
	VENDOR_MDBC_MODE            mode;          ///< MDBC operation mode
 | 
						|
	VENDOR_MDBC_CONTROL_EN      controlEn;     ///< MDBC control enable
 | 
						|
	UINT32                      uiIntEn;       ///< MDBC Interrupt enable
 | 
						|
    VENDOR_MDBC_INPUT_INFO      InInfo;        ///< MDBC input address & lofs
 | 
						|
    VENDOR_MDBC_OUTPUT_INFO     OutInfo;       ///< MDBC output address
 | 
						|
	UINT32                      uiLLAddr;      ///< MDBC LinkedList address
 | 
						|
	VENDOR_MDBC_IN_SIZE         Size;          ///< MDBC size
 | 
						|
    VENDOR_MDBC_MDMATCH_PARAM   MdmatchPara;   ///< MDBC Model Match
 | 
						|
    VENDOR_MDBC_MOR_PARAM       MorPara;       ///< MDBC Morphological process
 | 
						|
    VENDOR_MDBC_UPD_PARAM       UpdPara;       ///< MDBC Update
 | 
						|
    VENDOR_MDBC_ROI_PARAM       ROIPara0;      ///< MDBC ROI0
 | 
						|
    VENDOR_MDBC_ROI_PARAM       ROIPara1;      ///< MDBC ROI1
 | 
						|
    VENDOR_MDBC_ROI_PARAM       ROIPara2;      ///< MDBC ROI2
 | 
						|
    VENDOR_MDBC_ROI_PARAM       ROIPara3;      ///< MDBC ROI3
 | 
						|
    VENDOR_MDBC_ROI_PARAM       ROIPara4;      ///< MDBC ROI4
 | 
						|
    VENDOR_MDBC_ROI_PARAM       ROIPara5;      ///< MDBC ROI5
 | 
						|
    VENDOR_MDBC_ROI_PARAM       ROIPara6;      ///< MDBC ROI6
 | 
						|
    VENDOR_MDBC_ROI_PARAM       ROIPara7;      ///< MDBC ROI7
 | 
						|
} VENDOR_MD_PARAM;
 | 
						|
//@}
 | 
						|
 | 
						|
//@{
 | 
						|
typedef struct _VENDOR_MD_REG_DATA {
 | 
						|
	UINT32                   uiLumDiff;     ///< MDBC LumDiff
 | 
						|
	UINT32                   uiFrmID;       ///< MDBC FrmID
 | 
						|
	UINT32                   uiRnd;      	///< MDBC Rnd
 | 
						|
} VENDOR_MD_REG_DATA;
 | 
						|
//@}
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    KDRV MD structure - md open object
 | 
						|
*/
 | 
						|
typedef struct _VENDOR_MD_OPENCFG {
 | 
						|
	UINT32          clock_sel;                      ///< Engine clock selection
 | 
						|
} VENDOR_MD_OPENCFG, *pVENDOR_MD_OPENCFG;
 | 
						|
 | 
						|
/**
 | 
						|
    parameter data for kdrv_md_set, kdrv_md_get
 | 
						|
*/
 | 
						|
typedef enum {
 | 
						|
	VENDOR_MD_PARAM_OPENCFG = 0,        ///< set engine open info,  data_type: KDRV_MD_OPENCFG
 | 
						|
	VENDOR_MD_PARAM_ALL,                ///< set app parameters, data_type: KDRV_MD_PARAM
 | 
						|
	VENDOR_MD_PARAM_ISR_CB,			    ///< set isr callback, data_type: KDRV_MD_ISRCB
 | 
						|
	VENDOR_MD_PARAM_GET_REG,			///< 
 | 
						|
	VENDOR_MD_DMA_ABORT,
 | 
						|
	
 | 
						|
	VENDOR_MD_PARAM_MAX,
 | 
						|
	VENDOR_MD_PARAM_REV = 0x80000000,
 | 
						|
	ENUM_DUMMY4WORD(VENDOR_MD_PARAM_ID)
 | 
						|
} VENDOR_MD_PARAM_ID;
 | 
						|
 | 
						|
 | 
						|
/********************************************************************
 | 
						|
    EXTERN VARIABLES & FUNCTION PROTOTYPES DECLARATIONS
 | 
						|
********************************************************************/
 | 
						|
extern INT32 vendor_md_init(VOID);
 | 
						|
extern INT32 vendor_md_uninit(VOID);
 | 
						|
extern INT32 vendor_md_set(VENDOR_MD_PARAM_ID param_id, void *p_param);
 | 
						|
extern INT32 vendor_md_get(VENDOR_MD_PARAM_ID param_id, void *p_param);
 | 
						|
extern INT32 vendor_md_trigger(VENDOR_MD_TRIGGER_PARAM *p_param);
 | 
						|
 | 
						|
#endif //_VENDOR_MD_H_
 |