text: /*
   * Copyright (C) Hisilicon Technologies Co., Ltd. 2012-2018. All rights reserved.
   * Description: hi_comm_vi.h
   * Author:
   * Create: 2016-09-19
   */
  
  #ifndef __HI_COMM_VI_H__
  #define __HI_COMM_VI_H__
  
  #include "hi_common.h"
  #include "hi_errno.h"
  #include "hi_comm_video.h"
  #include "hi_comm_gdc.h"
  
  #ifdef __cplusplus
  #if __cplusplus
  extern "C" {
  #endif
  #endif /* __cplusplus */
  
  #define VI_MAX_ADCHN_NUM              (4UL)
  
  #define VI_PMFCOEF_NUM                (9UL)
  #define VI_COMPMASK_NUM               (2UL)
  #define VI_PRO_MAX_FRAME_NUM          (8UL)
  
  #define VI_INVALID_FRMRATE            (-1)
  #define VI_CHN0                       0
  #define VI_CHN1                       1
  #define VI_CHN2                       2
  #define VI_CHN3                       3
  #define VI_INVALID_CHN                (-1)
  
  #define VI_MAX_VC_NUM                 4
  
  typedef struct hiVI_LOW_DELAY_INFO_S {
      HI_BOOL bEnable;          /* RW; Low delay enable. */
      HI_U32 u32LineCnt;        /* RW; Range: [32, 16384]; Low delay shoreline. */
  } VI_LOW_DELAY_INFO_S;
  
  /* Information of raw data cmpresss param */
  typedef struct hiVI_CMP_PARAM_S {
      HI_U8 au8CmpParam[VI_CMP_PARAM_SIZE];
  } VI_CMP_PARAM_S;
  
  typedef enum hi_VI_USERPIC_MODE_E {
      VI_USERPIC_MODE_PIC = 0,            /* YUV picture */
      VI_USERPIC_MODE_BGC,                /* Background picture only with a color */
      VI_USERPIC_MODE_BUTT,
  } VI_USERPIC_MODE_E;
  
  typedef struct hiVI_USERPIC_BGC_S {
      HI_U32 u32BgColor;
  } VI_USERPIC_BGC_S;
  
  typedef struct hiVI_USERPIC_ATTR_S {
      VI_USERPIC_MODE_E       enUsrPicMode;  /* User picture mode */
      union {
          VIDEO_FRAME_INFO_S  stUsrPicFrm;   /* Information about a YUV picture */
          VI_USERPIC_BGC_S    stUsrPicBg;    /* Information about a background picture only with a color */
      } unUsrPic;
  } VI_USERPIC_ATTR_S;
  
  typedef enum hiEN_VI_ERR_CODE_E {
      ERR_VI_FAILED_NOTENABLE = 64,       /* device or channel not enable */
      ERR_VI_FAILED_NOTDISABLE,           /* device not disable */
      ERR_VI_FAILED_CHNOTDISABLE,         /* channel not disable */
      ERR_VI_CFG_TIMEOUT,                 /* config timeout */
      ERR_VI_NORM_UNMATCH,                /* video norm of ADC and VIU is unmatch */
      ERR_VI_INVALID_WAYID,               /* invlalid way ID */
      ERR_VI_INVALID_PHYCHNID,            /* invalid phychn id */
      ERR_VI_FAILED_NOTBIND,              /* device or channel not bind */
      ERR_VI_FAILED_BINDED,               /* device or channel not unbind */
      ERR_VI_DIS_PROCESS_FAIL             /* dis process failed */
  } EN_VI_ERR_CODE_E;
  
  #define HI_ERR_VI_INVALID_PARA        HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
  #define HI_ERR_VI_INVALID_DEVID       HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
  #define HI_ERR_VI_INVALID_PIPEID      HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_PIPEID)
  #define HI_ERR_VI_INVALID_STITCHGRPID HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_STITCHGRPID)
  #define HI_ERR_VI_INVALID_CHNID       HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
  #define HI_ERR_VI_INVALID_NULL_PTR    HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
  #define HI_ERR_VI_FAILED_NOTCONFIG    HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_CONFIG)
  #define HI_ERR_VI_SYS_NOTREADY        HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
  #define HI_ERR_VI_BUF_EMPTY           HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
  #define HI_ERR_VI_BUF_FULL            HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
  #define HI_ERR_VI_NOMEM               HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
  #define HI_ERR_VI_NOT_SUPPORT         HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
  #define HI_ERR_VI_BUSY                HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
  #define HI_ERR_VI_NOT_PERM            HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
  
  #define HI_ERR_VI_FAILED_NOTENABLE    HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_FAILED_NOTENABLE)
  #define HI_ERR_VI_FAILED_NOTDISABLE   HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_FAILED_NOTDISABLE)
  #define HI_ERR_VI_FAILED_CHNOTDISABLE HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_FAILED_CHNOTDISABLE)
  #define HI_ERR_VI_CFG_TIMEOUT         HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_CFG_TIMEOUT)
  #define HI_ERR_VI_NORM_UNMATCH        HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_NORM_UNMATCH)
  #define HI_ERR_VI_INVALID_WAYID       HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_INVALID_WAYID)
  #define HI_ERR_VI_INVALID_PHYCHNID    HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_INVALID_PHYCHNID)
  #define HI_ERR_VI_FAILED_NOTBIND      HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_FAILED_NOTBIND)
  #define HI_ERR_VI_FAILED_BINDED       HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, ERR_VI_FAILED_BINDED)
  
  #define HI_ERR_VI_PIPE_EXIST          HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST)
  #define HI_ERR_VI_PIPE_UNEXIST        HI_DEF_ERR(HI_ID_VI, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
  
  /* interface mode of video input */
  typedef enum hiVI_INTF_MODE_E {
      VI_MODE_BT656 = 0,              /* ITU-R BT.656 YUV4:2:2 */
      VI_MODE_BT656_PACKED_YUV,       /* ITU-R BT.656 packed YUV4:2:2 */
      VI_MODE_BT601,                  /* ITU-R BT.601 YUV4:2:2 */
      VI_MODE_DIGITAL_CAMERA,         /* digatal camera mode */
      VI_MODE_BT1120_STANDARD,        /* BT.1120 progressive mode */
      VI_MODE_BT1120_INTERLEAVED,     /* BT.1120 interstage mode */
      VI_MODE_MIPI,                   /* MIPI RAW mode */
      VI_MODE_MIPI_YUV420_NORMAL,     /* MIPI YUV420 normal mode */
      VI_MODE_MIPI_YUV420_LEGACY,     /* MIPI YUV420 legacy mode */
      VI_MODE_MIPI_YUV422,            /* MIPI YUV422 mode */
      VI_MODE_LVDS,                   /* LVDS mode */
      VI_MODE_HISPI,                  /* HiSPi mode */
      VI_MODE_SLVS,                   /* SLVS mode */
  
      VI_MODE_BUTT
  } VI_INTF_MODE_E;
  
  /* Input mode */
  typedef enum hiVI_INPUT_MODE_E {
      VI_INPUT_MODE_BT656 = 0,        /* ITU-R BT.656 YUV4:2:2 */
      VI_INPUT_MODE_BT601,            /* ITU-R BT.601 YUV4:2:2 */
      VI_INPUT_MODE_DIGITAL_CAMERA,   /* digatal camera mode */
      VI_INPUT_MODE_INTERLEAVED,      /* interstage mode */
      VI_INPUT_MODE_MIPI,             /* MIPI mode */
      VI_INPUT_MODE_LVDS,             /* LVDS mode */
      VI_INPUT_MODE_HISPI,            /* HiSPi mode */
      VI_INPUT_MODE_SLVS,             /* SLVS mode */
  
      VI_INPUT_MODE_BUTT
  } VI_INPUT_MODE_E;
  
  /* Work mode */
  typedef enum hiVI_WORK_MODE_E {
      VI_WORK_MODE_1Multiplex = 0,    /* 1 Multiplex mode */
      VI_WORK_MODE_2Multiplex,        /* 2 Multiplex mode */
      VI_WORK_MODE_3Multiplex,        /* 3 Multiplex mode */
      VI_WORK_MODE_4Multiplex,        /* 4 Multiplex mode */
  
      VI_WORK_MODE_BUTT
  } VI_WORK_MODE_E;
  
  /* whether an input picture is interlaced or progressive */
  typedef enum hiVI_SCAN_MODE_E {
      VI_SCAN_INTERLACED  = 0,        /* interlaced mode */
      VI_SCAN_PROGRESSIVE,            /* progressive mode */
  
      VI_SCAN_BUTT
  } VI_SCAN_MODE_E;
  
  /* Sequence of YUV data */
  typedef enum hiVI_YUV_DATA_SEQ_E {
      VI_DATA_SEQ_VUVU = 0,   /* The input sequence of the second component(only contains u and v) in BT.
                              1120 mode is VUVU */
      VI_DATA_SEQ_UVUV,       /* The input sequence of the second component(only contains u and v) in BT.
                              1120 mode is UVUV */
  
      VI_DATA_SEQ_UYVY,       /* The input sequence of YUV is UYVY */
      VI_DATA_SEQ_VYUY,       /* The input sequence of YUV is VYUY */
      VI_DATA_SEQ_YUYV,       /* The input sequence of YUV is YUYV */
      VI_DATA_SEQ_YVYU,       /* The input sequence of YUV is YVYU */
  
      VI_DATA_SEQ_BUTT
  } VI_YUV_DATA_SEQ_E;
  
  /* Clock edge mode */
  typedef enum hiVI_CLK_EDGE_E {
      VI_CLK_EDGE_SINGLE_UP = 0,         /* single-edge mode and in rising edge */
      VI_CLK_EDGE_SINGLE_DOWN,           /* single-edge mode and in falling edge */
  
      VI_CLK_EDGE_BUTT
  } VI_CLK_EDGE_E;
  
  /* Component mode */
  typedef enum hiVI_COMPONENT_MODE_E {
      VI_COMPONENT_MODE_SINGLE = 0,           /* single component mode */
      VI_COMPONENT_MODE_DOUBLE,               /* double component mode */
  
      VI_COMPONENT_MODE_BUTT
  } VI_COMPONENT_MODE_E;
  
  /* Y/C composite or separation mode */
  typedef enum hiVI_COMBINE_MODE_E {
      VI_COMBINE_COMPOSITE = 0,     /* Composite mode */
      VI_COMBINE_SEPARATE,          /* Separate mode */
  
      VI_COMBINE_BUTT
  } VI_COMBINE_MODE_E;
  
  /* Attribute of the vertical synchronization signal */
  typedef enum hiVI_VSYNC_E {
      VI_VSYNC_FIELD = 0,           /* Field/toggle mode:a signal reversal means a new frame or a field */
      VI_VSYNC_PULSE,               /* Pusle/effective mode:a pusle or an effective signal means a new frame or a field */
  
      VI_VSYNC_BUTT
  } VI_VSYNC_E;
  
  /* Polarity of the vertical synchronization signal */
  typedef enum hiVI_VSYNC_NEG_E {
      VI_VSYNC_NEG_HIGH = 0,        /* if VIU_VSYNC_E = VIU_VSYNC_FIELD, then the vertical synchronization signal of
                                      even field is high-level,
                                      if VIU_VSYNC_E = VIU_VSYNC_PULSE,then the vertical synchronization
                                      pulse is positive pulse. */
      VI_VSYNC_NEG_LOW,             /* if VIU_VSYNC_E = VIU_VSYNC_FIELD, then the vertical synchronization signal
                                      of even field is low-level,
                                      if VIU_VSYNC_E = VIU_VSYNC_PULSE,then the vertical synchronization
                                      pulse is negative pulse. */
      VI_VSYNC_NEG_BUTT
  } VI_VSYNC_NEG_E;
  
  /* Attribute of the horizontal synchronization signal */
  typedef enum hiVI_HSYNC_E {
      VI_HSYNC_VALID_SINGNAL = 0,   /* the horizontal synchronization is valid signal mode */
      VI_HSYNC_PULSE,               /* the horizontal synchronization is pulse mode, a new pulse means
                                      the beginning of a new line */
  
      VI_HSYNC_BUTT
  } VI_HSYNC_E;
  
  /* Polarity of the horizontal synchronization signal */
  typedef enum hiVI_HSYNC_NEG_E {
      VI_HSYNC_NEG_HIGH = 0,        /* if VI_HSYNC_E = VI_HSYNC_VALID_SINGNAL, then the valid horizontal
                                      synchronization signal is high-level;
                                      if VI_HSYNC_E = VI_HSYNC_PULSE,then the horizontal synchronization
                                      pulse is positive pulse */
      VI_HSYNC_NEG_LOW,             /* if VI_HSYNC_E = VI_HSYNC_VALID_SINGNAL, then the valid horizontal
                                      synchronization signal is low-level;
                                      if VI_HSYNC_E = VI_HSYNC_PULSE, then the horizontal synchronization
                                      pulse is negative pulse */
      VI_HSYNC_NEG_BUTT
  } VI_HSYNC_NEG_E;
  
  /* Attribute of the valid vertical synchronization signal */
  typedef enum hiVI_VSYNC_VALID_E {
      VI_VSYNC_NORM_PULSE = 0,      /* the vertical synchronization is pusle mode, a pusle means a new frame or field  */
      VI_VSYNC_VALID_SINGAL,        /* the vertical synchronization is effective mode, a effective signal
                                      means a new frame or field */
  
      VI_VSYNC_VALID_BUTT
  } VI_VSYNC_VALID_E;
  
  /* Polarity of the valid vertical synchronization signal */
  typedef enum hiVI_VSYNC_VALID_NEG_E {
      VI_VSYNC_VALID_NEG_HIGH = 0,  /* if VI_VSYNC_VALID_E = VI_VSYNC_NORM_PULSE, a positive pulse means vertical
                                      synchronization pulse;
                                      if VI_VSYNC_VALID_E = VI_VSYNC_VALID_SINGAL, the valid vertical synchronization
                                      signal is high-level */
      VI_VSYNC_VALID_NEG_LOW,       /* if VI_VSYNC_VALID_E = VI_VSYNC_NORM_PULSE, a negative pulse
                                      means vertical synchronization pulse;
                                      if VI_VSYNC_VALID_E = VI_VSYNC_VALID_SINGAL, the valid vertical
                                      synchronization signal is low-level */
      VI_VSYNC_VALID_NEG_BUTT
  } VI_VSYNC_VALID_NEG_E;
  
  /* Blank information of the input timing */
  typedef struct hiVI_TIMING_BLANK_S {
      HI_U32 u32HsyncHfb ;    /* RW;Horizontal front blanking width */
      HI_U32 u32HsyncAct ;    /* RW;Horizontal effetive width */
      HI_U32 u32HsyncHbb ;    /* RW;Horizontal back blanking width */
      HI_U32 u32VsyncVfb ;    /* RW;Vertical front blanking height of one frame or odd-field frame picture */
      HI_U32 u32VsyncVact ;   /* RW;Vertical effetive width of one frame or odd-field frame picture */
      HI_U32 u32VsyncVbb ;    /* RW;Vertical back blanking height of one frame or odd-field frame picture */
      HI_U32 u32VsyncVbfb ;   /* RW;Even-field vertical front blanking height when input mode is interlace
                              (invalid when progressive input mode) */
      HI_U32 u32VsyncVbact ;  /* RW;Even-field vertical effetive width when input mode is interlace
                              (invalid when progressive input mode) */
      HI_U32 u32VsyncVbbb ;   /* RW;Even-field vertical back blanking height when input mode is interlace
                              (invalid when progressive input mode) */
  } VI_TIMING_BLANK_S;
  
  /* synchronization information about the BT.601 or DC timing */
  typedef struct hiVI_SYNC_CFG_S {
      VI_VSYNC_E              enVsync;
      VI_VSYNC_NEG_E          enVsyncNeg;
      VI_HSYNC_E              enHsync;
      VI_HSYNC_NEG_E          enHsyncNeg;
      VI_VSYNC_VALID_E        enVsyncValid;
      VI_VSYNC_VALID_NEG_E    enVsyncValidNeg;
      VI_TIMING_BLANK_S       stTimingBlank;
  } VI_SYNC_CFG_S;
  
  /* the highest bit of the BT.656 timing reference code */
  typedef enum hiVI_BT656_FIXCODE_E {
      VI_BT656_FIXCODE_1 = 0,       /* The highest bit of the EAV/SAV data over the BT.656 protocol is always 1. */
      VI_BT656_FIXCODE_0,           /* The highest bit of the EAV/SAV data over the BT.656 protocol is always 0. */
  
      VI_BT656_FIXCODE_BUTT
  } VI_BT656_FIXCODE_E;
  
  /* Polarity of the field indicator bit (F) of the BT.656 timing reference code */
  typedef enum hiVI_BT656_FIELD_POLAR_E {
      VI_BT656_FIELD_POLAR_STD = 0, /* the standard BT.656 mode,the first filed F=0,the second filed F=1 */
      VI_BT656_FIELD_POLAR_NSTD,    /* the non-standard BT.656 mode,the first filed F=1,the second filed F=0 */
  
      VI_BT656_FIELD_POLAR_BUTT
  } VI_BT656_FIELD_POLAR_E;
  
  /* synchronization information about the BT.656 */
  typedef struct hiVI_BT656_SYNC_CFG_S {
      VI_BT656_FIXCODE_E     enFixCode;
      VI_BT656_FIELD_POLAR_E enFieldPolar;
  } VI_BT656_SYNC_CFG_S;
  
  /* Input data type */
  typedef enum hiVI_DATA_TYPE_E {
      VI_DATA_TYPE_YUV = 0,
      VI_DATA_TYPE_RGB,
  
      VI_DATA_TYPE_BUTT
  } VI_DATA_TYPE_E;
  
  typedef enum hiVI_REPHASE_MODE_E {
      VI_REPHASE_MODE_NONE = 0,
      VI_REPHASE_MODE_SKIP_1_2,            /* skip 1/2 */
      VI_REPHASE_MODE_SKIP_1_3,            /* skip 1/3 */
      VI_REPHASE_MODE_BINNING_1_2,          /* binning 1/2 */
      VI_REPHASE_MODE_BINNING_1_3,        /* binning 1/3 */
  
      VI_REPHASE_MODE_BUTT
  } VI_REPHASE_MODE_E;
  
  typedef struct hiVI_BAS_REPHASE_ATTR_S {
      VI_REPHASE_MODE_E enHRephaseMode;
      VI_REPHASE_MODE_E enVRephaseMode;
  } VI_BAS_REPHASE_ATTR_S;
  
  /* Attribute of bas scale */
  typedef struct hiVI_BAS_SCALE_ATTR_S {
      SIZE_S stBasSize; /* RW;bayer scale size. */
  } VI_BAS_SCALE_ATTR_S;
  
  /* Attribute of bayer scale */
  typedef struct hiVI_BAS_ATTR_S {
      VI_BAS_SCALE_ATTR_S     stSacleAttr;
      VI_BAS_REPHASE_ATTR_S   stRephaseAttr;
  } VI_BAS_ATTR_S;
  
  /* Attribute of wdr */
  typedef struct hiVI_WDR_ATTR_S {
      WDR_MODE_E  enWDRMode;          /* RW; WDR mode. */
      HI_U32      u32CacheLine;       /* RW; WDR cache line. */
  } VI_WDR_ATTR_S;
  
  /* the extended attributes of VI device */
  typedef struct hiVI_DEV_ATTR_EX_S {
      VI_INPUT_MODE_E         enInputMode;                    /* RW;Input mode */
      VI_WORK_MODE_E          enWorkMode;                     /* RW; Work mode */
  
      VI_COMBINE_MODE_E       enCombineMode;                  /* RW;Y/C composite or separation mode */
      VI_COMPONENT_MODE_E     enComponentMode;                /* RW;Component mode (single-component or dual-component) */
      VI_CLK_EDGE_E           enClkEdge;                      /* RW;Clock edge mode (sampling on the rising or
                                                              falling edge) */
  
      HI_U32                  au32ComponentMask[VI_COMPMASK_NUM]; /* RW;Component mask */
  
      VI_SCAN_MODE_E          enScanMode;                     /* RW;Input scanning mode (progressive or interlaced) */
      HI_S32                  as32AdChnId[VI_MAX_ADCHN_NUM];  /* RW;AD channel ID. Typically, the default
                                                              value -1 is recommended */
  
      VI_YUV_DATA_SEQ_E       enDataSeq;                  /* RW;Input data sequence (only the YUV format is supported) */
      VI_SYNC_CFG_S           stSynCfg;                       /* RW;Sync timing. This member must be configured in BT.
                                                              601 mode or DC mode */
  
      VI_BT656_SYNC_CFG_S     stBT656SynCfg;                  /* RW;Sync timing. This member must be configured in BT.
                                                              656 mode */
  
      VI_DATA_TYPE_E          enInputDataType;                /* RW;RGB: CSC-709 or CSC-601, PT YUV444 disable;
                                                              YUV: default yuv CSC coef PT YUV444 enable. */
  
      HI_BOOL                 bDataReverse;                   /* RW;Data reverse */
  
      SIZE_S                  stSize;                         /* RW;Input size */
  
      VI_BAS_ATTR_S           stBasAttr;                      /* RW;Attribute of BAS */
  
      VI_WDR_ATTR_S           stWDRAttr;                      /* RW;Attribute of WDR */
  
      DATA_RATE_E             enDataRate;                     /* RW;Data rate of Device */
  } VI_DEV_ATTR_EX_S;
  
  /* The attributes of a VI device */
  typedef struct hiVI_DEV_ATTR_S {
      VI_INTF_MODE_E      enIntfMode;                     /* RW;Interface mode */
      VI_WORK_MODE_E      enWorkMode;                     /* RW;Work mode */
  
      HI_U32              au32ComponentMask[VI_COMPMASK_NUM];  /* RW;Component mask */
      VI_SCAN_MODE_E      enScanMode;                     /* RW;Input scanning mode (progressive or interlaced) */
      HI_S32              as32AdChnId[VI_MAX_ADCHN_NUM];  /* RW;AD channel ID. Typically, the default value -1
                                                          is recommended */
  
      /* The below members must be configured in BT.601 mode or DC mode and are invalid in other modes */
      VI_YUV_DATA_SEQ_E   enDataSeq;                      /* RW;Input data sequence (only the YUV format is supported) */
      VI_SYNC_CFG_S       stSynCfg;                       /* RW;Sync timing. This member must be configured in BT.
                                                          601 mode or DC mode */
  
      VI_DATA_TYPE_E      enInputDataType;                /* RW;RGB: CSC-709 or CSC-601, PT YUV444 disable; YUV: default
                                                          yuv CSC coef PT YUV444 enable. */
  
      HI_BOOL             bDataReverse;                   /* RW;Data reverse */
  
      SIZE_S              stSize;                         /* RW;Input size */
  
      VI_BAS_ATTR_S       stBasAttr;                      /* RW;Attribute of BAS */
  
      VI_WDR_ATTR_S       stWDRAttr;                      /* RW;Attribute of WDR */
  
      DATA_RATE_E         enDataRate;                     /* RW;Data rate of Device */
  } VI_DEV_ATTR_S;
  
  /* Information of pipe binded to device */
  typedef struct hiVI_DEV_BIND_PIPE_S {
      HI_U32  u32Num;                                     /* RW;Range [1,VI_MAX_PHY_PIPE_NUM] */
      VI_PIPE PipeId[VI_MAX_PHY_PIPE_NUM];                /* RW;Array of pipe ID */
  } VI_DEV_BIND_PIPE_S;
  
  /* Source of 3DNR reference frame */
  typedef enum hiVI_NR_REF_SOURCE_E {
      VI_NR_REF_FROM_RFR = 0,                             /* Reference frame from reconstruction frame */
      VI_NR_REF_FROM_CHN0,                                /* Reference frame from CHN0's frame */
  
      VI_NR_REF_FROM_BUTT
  } VI_NR_REF_SOURCE_E;
  
  typedef enum hiVI_PIPE_BYPASS_MODE_E {
      VI_PIPE_BYPASS_NONE,
      VI_PIPE_BYPASS_FE,
      VI_PIPE_BYPASS_BE,
  
      VI_PIPE_BYPASS_BUTT
  } VI_PIPE_BYPASS_MODE_E;
  
  /* The attributes of 3DNR */
  typedef struct hiVI_NR_ATTR_S {
      PIXEL_FORMAT_E      enPixFmt;                       /* RW;Pixel format of reference frame */
      DATA_BITWIDTH_E     enBitWidth;                     /* RW;Bit Width of reference frame */
      VI_NR_REF_SOURCE_E  enNrRefSource;                  /* RW;Source of 3DNR reference frame */
      COMPRESS_MODE_E     enCompressMode;                 /* RW;Reference frame compress mode */
  } VI_NR_ATTR_S;
  
  /* The attributes of pipe */
  typedef struct hiVI_PIPE_ATTR_S {
      VI_PIPE_BYPASS_MODE_E enPipeBypassMode;
      HI_BOOL               bYuvSkip;               /* RW;YUV skip enable */
      HI_BOOL               bIspBypass;             /* RW;Range:[0, 1];ISP bypass enable */
      HI_U32                u32MaxW;                /* RW;Range:[0, 1];Range[VI_PIPE_MIN_WIDTH, VI_PIPE_MAX_WIDTH];
                                                  Maximum width */
      HI_U32                u32MaxH;                /* RW;Range[VI_PIPE_MIN_HEIGHT, VI_PIPE_MAX_HEIGHT];Maximum height */
      PIXEL_FORMAT_E        enPixFmt;               /* RW;Pixel format */
      COMPRESS_MODE_E       enCompressMode;         /* RW;Range:[0, 4];Compress mode. */
      DATA_BITWIDTH_E       enBitWidth;             /* RW;Range:[0, 4];Bit width */
      HI_BOOL               bNrEn;                  /* RW;Range:[0, 1];3DNR enable */
      VI_NR_ATTR_S          stNrAttr;               /* RW;Attribute of 3DNR */
      HI_BOOL               bSharpenEn;             /* RW;Range:[0, 1];Sharpen enable */
      FRAME_RATE_CTRL_S     stFrameRate;            /* RW;Frame rate */
      HI_BOOL               bDiscardProPic;         /* RW;Range:[0, 1];when professional mode snap, whether to discard
                                                  long exposure picture in the video pipe. */
  } VI_PIPE_ATTR_S;
  
  typedef enum hiVI_STITCH_ISP_CFG_MODE_E {
      VI_STITCH_ISP_CFG_NORMAL = 0,
      VI_STITCH_ISP_CFG_SYNC,
      VI_STITCH_ISP_CFG_BUTT
  } VI_STITCH_ISP_CFG_MODE_E;
  
  /* Information of stitch group */
  typedef struct hiVI_STITCH_GRP_ATTR_S {
      HI_BOOL                     bStitch;
      VI_STITCH_ISP_CFG_MODE_E    enMode;
      HI_U32                      u32MaxPTSGap;            /* RW;MAX PTS Gap between frame of pipe,unit:us */
      HI_U32                      u32PipeNum;              /* RW;Range [2, VI_MAX_PIPE_NUM] */
      VI_PIPE                     PipeId[VI_MAX_PIPE_NUM]; /* RW;Array of pipe ID */
  } VI_STITCH_GRP_ATTR_S;
  
  typedef enum hiVI_PIPE_REPEAT_MODE_E {
      VI_PIPE_REPEAT_NONE = 0,
      VI_PIPE_REPEAT_ONCE = 1,
      VI_PIPE_REPEAT_BUTT
  } VI_PIPE_REPEAT_MODE_E;
  
  typedef struct {
      HI_U8   IES;              /* RW; Range:[0, 255];Format 8.0;the absolute strength of image enhancement for edge */
      HI_U8   IESS;             /* RW; Range:[0, 255];Format 8.0;the absolute strength of image enhancement for
                              texture and shadow */
      HI_U16  IEDZ;             /* RW; Range:[0, 8192];Format 14.0;the threshold of image enhancement
                              for controlling noise */
  } tV59aIEy;
  
  typedef struct {
      HI_U8   SBF     : 2;      /* RW; Range:[0, 3];Format 2.0;the band type of spatial filter, notice: SBF0, SBF1
                              range is [2, 3];SBF2,SBF3,SBF4 range is [0,3], where SBF4 is related to SBFk */
      HI_U8   STR     : 4;      /* RW; Range:[0, 13];Format 4.0;the relative strength of spatial filter refer to
                              the previous frame */
      HI_U8   STHp    : 2;      /* RW; Range:[0, 2];Format 2.0;Not recommended for debugging */
      HI_U8   SFT     : 5;      /* RW; Range:[0, 31];Format 5.0;Not recommended for debugging */
      HI_U8   kPro    : 3;      /* RW; Range:[0, 7];Format 3.0;notice: the kPro of SFy2 range is [0, 7], the kPro of
                              SFy3 range is [0, 4] */
  
      HI_U16  STH[3];           /* RW; Range:[0, 999];Format 10.0;the edge-preserve threshold for spatial filter */
      HI_U16  SBS[3];           /* RW; Range:[0, 9999];Format 14.0;the noise reduction strength of spatial filter
                              for the relative bright pixel */
      HI_U16  SDS[3];           /* RW; Range:[0, 9999];Format 14.0;the noise reduction strength of spatial filter
                              for the relative dark pixel */
  
  } tV59aSFy;
  
  typedef struct {
      HI_U16  MATH    : 10;    /* RW; Range:[0, 1023];Format 10.0;the motion detection threshold for temporal filter */
      HI_U16  MATE    : 4;     /* RW; Range:[0, 11];Format 4.0;the motion detection index of flat area
                              for temporal filter */
      HI_U16  MATW    : 2;     /* RW; Range:[0, 3];Format 2.0;the index of suppressing trailing for temporal filter */
      HI_U8   MASW    : 4;     /* RW; Range:[0, 12];Format 4.0;the index of suppressing raindrop noise
                              for temporal filter */
      HI_U8   MABW    : 3;     /* RW; Range:[0, 4];Format 3.0;the window of motion detection for temporal filter */
      HI_U8   MAXN    : 1;     /* RW; Range:[0, 1];Format 1.0;Not recommended for debugging */
  
  } tV59aMDy;
  
  typedef struct {
      HI_U8   TFR[4];         /* RW; Range:[0, 255];Format 8.0;the relative strength of temporal
                              filter for the static area */
      HI_U16  TDZ : 14;       /* RW; Range:[0, 999];Format 10.0;the threshold of dead-area of temporal filter */
      HI_U16  TDX : 2;        /* RW; Range:[0, 2];Format 2.0;Not recommended for debugging */
      HI_U16  TFS : 6;        /* RW; Range:[0, 63];Format 6.0;the absolute strength of temporal filter  */
  } tV59aTFy;
  
  typedef struct {
      HI_U16  SFC     : 10;   /* RW; Range:[0, 1023];Format 10.0;the strength of spatial filter for NRC0 */
      HI_U16  TFC     : 6;    /* RW; Range:[0, 63];Format 6.0;the strength of temporal filter for NRC0 */
      HI_U16  CSFS    : 14;   /* RW; Range:[0, 999];Format 10.0;the strength of spatial filter for NRC1 */
      HI_U16  CSFk    : 2;    /* RW; Range:[0, 3];Format 2.0;Not recommended for debugging */
      HI_U16  CTFS    : 4;    /* RW; Range:[0, 15];Format 4.0;the strength of temporal filter for NRC1 */
      HI_U16  CIIR    : 1;    /* RW; Range:[0, 1];Format 1.0;the mode of spatial filter for NRC1 */
      HI_U16  CTFR    : 11;   /* RW; Range:[0, 999];Format 10.0;the relative strength of temporal filter for NRC1 */
  
  } tV59aNRc;
  
  /* 3DNR Spatial Filter: SFy0,SFy1,SFy2,SFy3; Temporal Filter:TFy0,TFy1;Chroma Noise Reduction: NRC0,NRC1 */
  typedef struct {
      tV59aIEy  IEy;
      tV59aSFy  SFy[5];
      tV59aMDy  MDy[2];
      tV59aTFy  TFy[2];
  
      HI_U16  HdgType : 1;   /* RW; Range:[0, 1];Format 1.0;the type of complexed mixed spatial filter whether
                              is SFi or SFk */
      HI_U16  BriType : 1;   /* RW; Range:[0, 1];Format 1.0;the mode decide SFy3 whether is SFk type or SFi type */
      HI_U16  HdgMode : 2;   /* RW; Range:[0, 3];Format 2.0;the mode decide complexed mixed spatial filter band
                              for flat area */
      HI_U16  kTab2   : 1;   /* RW; Range:[0, 1];Format 1.0;the parameter decide SFy2 whether or not based on the image
                              absolute luminance */
      HI_U16  HdgWnd  : 1;   /* RW; Range:[0, 1];Format 1.0;the sampling window of complexed mixed spatial filter for
                              noise detection */
      HI_U16  kTab3   : 1;   /* RW; Range:[0, 1];Format 1.0;the parameter decide SFy3 whether or not based on the image
                              absolute luminance */
      HI_U16  HdgSFR  : 4;   /* RW; Range:[0, 13];Format 4.0;the trend of the noise reduction of complexed mixed spatial
                              filter for flat area */
      HI_U16  nOut    : 5;   /* RW; Range:[0, 27];Format 5.0;the parameter for output intermediate result of SFy3 */
      HI_U8   HdgIES;        /* RW; Range:[0, 255];Format 8.0;the strength of image enhancement for complexed
                              mixed spatial filter */
      HI_U8   nRef    : 1;   /* RW; Range:[0, 1];Format 1.0;Not recommended for debugging */
  
      HI_U8   IEyMode : 1;   /* RW; Range:[0, 1];Format 1.0;the image enhancement mode selection. */
      HI_U8   IEyEx[4];      /* RW; Range:[0, 255];Format 8.0;the image enhancement strength for different frequency. */
  
      HI_U8   SFRi[4];       /* RW; Range:[0, 255];Format 8.0;the relative strength of SFy3 when the filter type is SFi */
      HI_U8   SFRk[4];       /* RW; Range:[0, 255];Format 8.0;the relative strength of SFy3 when the filter type is SFk */
      HI_U16  SBSk2[32];     /* RW; Range:[0, 9999];Format 14.0;the noise reduction strength of SFy2 for the
                              relative bright pixel based on the image absolute luminance */
      HI_U16  SBSk3[32];     /* RW; Range:[0, 9999];Format 14.0;the noise reduction strength of SFy3 for the
                              relative bright pixel based on the image absolute luminance */
      HI_U16  SDSk2[32];     /* RW; Range:[0, 9999];Format 14.0;the noise reduction strength of SFy2 for the
                              relative dark pixel based on the image absolute luminance */
      HI_U16  SDSk3[32];     /* RW; Range:[0, 9999];Format 14.0;the noise reduction strength of SFy3 for the
                              relative dark pixel based on the image absolute luminance */
      HI_U16  BriThr[16];    /* RW; Range:[0, 1024];Format 11.0;the threshold decide SFy3 choose the SFi type filter
                              or SFk type filter in dark and bright area */
  
      tV59aNRc NRc;
  } VI_PIPE_NRX_PARAM_V1_S;
  
  typedef enum hiVI_NR_VERSION_E {
      VI_NR_V1 = 1,
      VI_NR_V2 = 2,
      VI_NR_V3 = 3,
      VI_NR_V4 = 4,
      VI_NR_BUTT
  } VI_NR_VERSION_E;
  
  typedef struct hiNRX_PARAM_MANUAL_V1_S {
      VI_PIPE_NRX_PARAM_V1_S stNRXParamV1;
  } NRX_PARAM_MANUAL_V1_S;
  
  typedef struct hiNRX_PARAM_AUTO_V1_S {
      HI_U32                              u32ParamNum;
      HI_U32                  ATTRIBUTE   *pau32ISO;
      VI_PIPE_NRX_PARAM_V1_S  ATTRIBUTE   *pastNRXParamV1;
  } NRX_PARAM_AUTO_V1_S;
  
  typedef struct hiNRX_PARAM_V1_S {
      OPERATION_MODE_E        enOptMode;            /* RW;Adaptive NR */
      NRX_PARAM_MANUAL_V1_S   stNRXManualV1;        /* RW;NRX V1 param for manual */
      NRX_PARAM_AUTO_V1_S     stNRXAutoV1;          /* RW;NRX V1 param for auto */
  } NRX_PARAM_V1_S;
  
  typedef struct {
      HI_U8  IES0, IES1, IES2, IES3;  /* IES0~4 ; Range: [0, 255]; The gains of edge and texture enhancement.
                                      0~3 for different frequency response. */
      HI_U16 IEDZ : 10, _rb_ : 6;     /* IEDZ   ; Range: [0, 999]; The threshold to control the generated artifacts. */
  } tV500_VI_IEy;
  
  typedef struct {
      HI_U8  SPN6 : 3, SFR  : 5;      /* SPN6; Range: [0, 5];  The selection of filters to be mixed for NO.6 filter. */
                                      /* SFR ; Range: [0, 31];  The relative NR strength in the SFi and SFk filter. */
      HI_U8  SBN6 : 3, PBR6 : 5;      /* SBN6; Range: [0, 5];  The selection of filters to be mixed for NO.6 filter. */
                                      /* PBR6; Range: [0, 16];  The mix ratio between SPN6 and SBN6. */
      HI_U16 SRT0 : 5, SRT1 : 5, JMODE : 3, DeIdx : 3;    /* JMODE;      Range: [0, 4]; The selection modes
                                                           for the blending of spatial filters */
                                                          /* STR0, STR1; Range: [0, 16]; The blending ratio
                                                           of different filters. (Used in serial filtering mode (SFM).) */
                                                          /* DeIdx;      Range: [3, 6]; The selection number of
                                                           filters that textures and details will be added to. */
      HI_U8  DeRate, SFR6[3];                             /* DeRate;     Range: [0, 255]; The enhancement strength
                                                           for the SFM (When DeRate > 0, the SFM will be activated) */
                                                          /* SFR6;       Range: [0, 31]; The relative NR strength
                                                           for NO.6 filter. (Effective when JMODE = 4) */
      HI_U8  SFS1, SFT1, SBR1;                            /* SFS1, SFT1, SBR1; Range: [0, 255];  The NR strength
                                                           parameters for NO.1 filter. */
      HI_U8  SFS2, SFT2, SBR2;                            /* SFS2, SFT2, SBR2; Range: [0, 255];  The NR strength
                                                           parameters for NO.2 filter. */
      HI_U8  SFS4, SFT4, SBR4;                            /* SFS4, SFT4, SBR4; Range: [0, 255];  The NR strength
                                                           parameters for NO.3 and NO.4 filters. */
  
      HI_U16 STH1 : 9, SFN1 : 3, NRyEn : 1, SFN0  : 3;    /* STH1~3; Range: [0, 511]; The thresholds for protection
                                                           of edges from blurring */
                                                          /* NRyEn ; Range: [0, 1]; The NR switches */
      HI_U16 STH2 : 9, SFN2 : 3, BWSF4 : 1, kMode : 3;    /* SFN0~3; Range: [0, 6]; Filter selection for different
                                                           image areas based on STH1~3. */
                                                          /* BWSF4 ; Range: [0, 1]; The NR window size for the
                                                           NO.3 and NO.4 filters.  */
      HI_U16 STH3 : 9, SFN3 : 3, TriTh : 1, _rb0_ : 3;    /* KMode ; Range: [0, 3]; The denoise mode based
                                                           on image brightness. */
                                                          /* Trith ; Range: [0, 1]; The switch to choose 3 STH
                                                           threshold or 2 STH threshold */
  } tV500_VI_SFy;
  
  typedef struct {
      tV500_VI_IEy IEy;
      tV500_VI_SFy SFy;
  } VI_PIPE_NRX_PARAM_V2_S;
  
  typedef struct hiNRX_PARAM_MANUAL_V2_S {
      VI_PIPE_NRX_PARAM_V2_S stNRXParamV2;
  } NRX_PARAM_MANUAL_V2_S;
  
  typedef struct hiNRX_PARAM_AUTO_V2_S {
      HI_U32                              u32ParamNum;
      HI_U32                  ATTRIBUTE   *pau32ISO;
      VI_PIPE_NRX_PARAM_V2_S  ATTRIBUTE   *pastNRXParamV2;
  } NRX_PARAM_AUTO_V2_S;
  
  typedef struct hiNRX_PARAM_V2_S {
      OPERATION_MODE_E        enOptMode;           /* RW;Adaptive NR */
      NRX_PARAM_MANUAL_V2_S   stNRXManualV2;       /* RW;NRX V2 param for manual */
      NRX_PARAM_AUTO_V2_S     stNRXAutoV2;         /* RW;NRX V2 param for auto */
  } NRX_PARAM_V2_S;
  
  typedef struct hiVI_PIPE_NRX_PARAM_S {
      VI_NR_VERSION_E enNRVersion; /* RW;3DNR Version */
      union {
          NRX_PARAM_V1_S stNRXParamV1; /* RW;3DNR X param version 1 */
          NRX_PARAM_V2_S stNRXParamV2; /* RW;3DNR X param version 2 */
      };
  } VI_PIPE_NRX_PARAM_S;
  
  /* The attributes of channel */
  typedef struct hiVI_CHN_ATTR_S {
      SIZE_S              stSize;             /* RW;Channel out put size */
      PIXEL_FORMAT_E      enPixelFormat;      /* RW;Pixel format */
      DYNAMIC_RANGE_E     enDynamicRange;     /* RW;Dynamic Range */
      VIDEO_FORMAT_E      enVideoFormat;      /* RW;Video format */
      COMPRESS_MODE_E     enCompressMode;     /* RW;256B Segment compress or no compress. */
      HI_BOOL             bMirror;            /* RW;Mirror enable */
      HI_BOOL             bFlip;              /* RW;Flip enable */
      HI_U32              u32Depth;           /* RW;Range [0,8];Depth */
      FRAME_RATE_CTRL_S   stFrameRate;        /* RW;Frame rate */
  } VI_CHN_ATTR_S;
  
  /* The status of pipe */
  typedef struct hiVI_PIPE_STATUS_S {
      HI_BOOL bEnable;                        /* RO;Whether this pipe is enabled */
      HI_U32  u32IntCnt;                      /* RO;The video frame interrupt count */
      HI_U32  u32FrameRate;                   /* RO;Current frame rate */
      HI_U32  u32LostFrame;                   /* RO;Lost frame count */
      HI_U32  u32VbFail;                      /* RO;Video buffer malloc failure */
      SIZE_S  stSize;                         /* RO;Current pipe output size */
  } VI_PIPE_STATUS_S;
  
  /* VS signal output mode */
  typedef enum hiVI_VS_SIGNAL_MODE_E {
      VI_VS_SIGNAL_ONCE = 0,                      /* output one time */
      VI_VS_SIGNAL_FREQ,                          /* output frequently */
  
      VI_VS_SIGNAL_MODE_BUTT
  } VI_VS_SIGNAL_MODE_E;
  
  /* The attributes of VS signal */
  typedef struct hiVI_VS_SIGNAL_ATTR_S {
      VI_VS_SIGNAL_MODE_E enMode;             /* RW;output one time, output frequently */
      HI_U32              u32StartTime;       /* RW;output start time,unit: sensor pix clk. */
      HI_U32              u32Duration;        /* RW;output high duration, unit: sensor pix clk. */
      HI_U32              u32CapFrmIndex;     /* RW;VS signal will be output after trigger by which vframe,
                                              default is 0. */
      HI_U32              u32Interval;        /* RW;output frequently interval, unit: frame */
  } VI_VS_SIGNAL_ATTR_S;
  
  typedef struct hiBNR_DUMP_ATTR_S {
      HI_BOOL bEnable;
      HI_U32 u32Depth;
  } BNR_DUMP_ATTR_S;
  
  typedef enum hiVI_EXT_CHN_SOURCE_E {
      VI_EXT_CHN_SOURCE_TAIL,
      VI_EXT_CHN_SOURCE_HEAD,
  
      VI_EXT_CHN_SOURCE_BUTT
  } VI_EXT_CHN_SOURCE_E;
  
  typedef struct hiVI_EXT_CHN_ATTR_S {
      VI_EXT_CHN_SOURCE_E enSource;
      VI_CHN              s32BindChn;     /* RW;Range [VI_CHN0, VI_MAX_PHY_CHN_NUM);The channel num which extend
                                          channel will bind to */
      SIZE_S              stSize;         /* RW;Channel out put size */
      PIXEL_FORMAT_E      enPixFormat;    /* RW;Pixel format */
      DYNAMIC_RANGE_E     enDynamicRange; /* RW;Dynamic Range */
      COMPRESS_MODE_E     enCompressMode; /* RW;256B Segment compress or no compress. */
      HI_U32              u32Depth;       /* RW;Range [0,8];Depth */
      FRAME_RATE_CTRL_S   stFrameRate;    /* RW;Frame rate */
  } VI_EXT_CHN_ATTR_S;
  
  typedef enum hiVI_CROP_COORDINATE_E {
      VI_CROP_RATIO_COOR = 0,             /* Ratio coordinate */
      VI_CROP_ABS_COOR,                   /* Absolute coordinate */
      VI_CROP_BUTT
  } VI_CROP_COORDINATE_E;
  
  /* Information of chn crop */
  typedef struct hiVI_CROP_INFO_S {
      HI_BOOL                 bEnable;            /* RW;CROP enable */
      VI_CROP_COORDINATE_E    enCropCoordinate;   /* RW;Coordinate mode of the crop start point */
      RECT_S                  stCropRect;         /* RW;CROP rectangular */
  } VI_CROP_INFO_S;
  
  /* The attributes of LDC */
  typedef struct hiVI_LDC_ATTR_S {
      HI_BOOL bEnable; /* RW;Range [0,1];Whether LDC is enbale */
      LDC_ATTR_S stAttr;
  } VI_LDC_ATTR_S;
  
  /* The attributes of LDCV2 */
  typedef struct hiVI_LDCV2_ATTR_S {
      HI_BOOL bEnable; /* RW;Whether LDC is enbale */
      LDCV2_ATTR_S stAttr;
  } VI_LDCV2_ATTR_S;
  
  /* The attributes of LDCV3 */
  typedef struct hiVI_LDCV3_ATTR_S {
      HI_BOOL bEnable; /* RW;Whether LDC is enbale */
      LDCV3_ATTR_S stAttr;
  } VI_LDCV3_ATTR_S;
  
  typedef struct hiVI_ROTATION_EX_ATTR_S {
      HI_BOOL       bEnable;                 /* RW;Range [0,1];Whether ROTATE_EX_S is enbale */
      ROTATION_EX_S stRotationEx;
  } VI_ROTATION_EX_ATTR_S;
  
  /* The status of chn */
  typedef struct hiVI_CHN_STATUS_S {
      HI_BOOL bEnable;                    /* RO;Whether this channel is enabled */
      HI_U32  u32FrameRate;               /* RO;current frame rate */
      HI_U32  u32LostFrame;               /* RO;Lost frame count */
      HI_U32  u32VbFail;                  /* RO;Video buffer malloc failure */
      SIZE_S  stSize;                     /* RO;chn output size */
  
  } VI_CHN_STATUS_S;
  
  typedef struct hiVI_PMF_ATTR_S {
      HI_BOOL bEnable;                            /* RW;Whether PMF is enable */
      SIZE_S  stDestSize;                         /* RW;Target size */
      HI_S64  as64PMFCoef[VI_PMFCOEF_NUM];        /* RW; Array of PMF coefficients */
  } VI_PMF_ATTR_S;
  
  typedef enum hiVI_DUMP_TYPE_E {
      VI_DUMP_TYPE_RAW = 0,
      VI_DUMP_TYPE_YUV = 1,
      VI_DUMP_TYPE_IR = 2,
      VI_DUMP_TYPE_BUTT
  } VI_DUMP_TYPE_E;
  
  typedef struct hiVI_DUMP_ATTR_S {
      HI_BOOL         bEnable;              /* RW;Whether dump is enable */
      HI_U32          u32Depth;             /* RW;Range [0,8];Depth */
      VI_DUMP_TYPE_E  enDumpType;
  } VI_DUMP_ATTR_S;
  
  typedef enum hiVI_PIPE_FRAME_SOURCE_E {
      VI_PIPE_FRAME_SOURCE_DEV = 0, /* RW;Source from dev */
      VI_PIPE_FRAME_SOURCE_USER_FE, /* RW;User send to FE */
      VI_PIPE_FRAME_SOURCE_USER_BE, /* RW;User send to BE */
  
      VI_PIPE_FRAME_SOURCE_BUTT
  } VI_PIPE_FRAME_SOURCE_E;
  
  typedef struct hi_VI_RAW_INFO_S {
      VIDEO_FRAME_INFO_S      stVideoFrame;
      ISP_CONFIG_INFO_S       stIspInfo;
  } VI_RAW_INFO_S;
  
  /* module params */
  typedef struct hiVI_MOD_PARAM_S {
      HI_S32      s32DetectErrFrame;
      HI_U32      u32DropErrFrame;
      VB_SOURCE_E enViVbSource;
  } VI_MOD_PARAM_S;
  
  typedef struct hiVI_DEV_TIMING_ATTR_S {
      HI_BOOL bEnable;               /* RW;Range:[0,1];Whether enable VI generate timing */
      HI_S32  s32FrmRate;            /* RW;Range:(0,0xffffff];;Generate timing Frame rate */
  } VI_DEV_TIMING_ATTR_S;
  
  typedef struct hiVI_EARLY_INTERRUPT_S {
      HI_BOOL bEnable;
      HI_U32 u32LineCnt;
  } VI_EARLY_INTERRUPT_S;
  
  #ifdef __cplusplus
  #if __cplusplus
  }
  #endif
  #endif /* __cplusplus */
  
  #endif
  
  
  