/*******************************************************************************
* Copyright (C) Marvell International Ltd. and its affiliates
*
* Marvell GPL License Option
*
* If you received this File from Marvell, you may opt to use, redistribute and/or
* modify this File in accordance with the terms and conditions of the General
* Public License Version 2, June 1991 (the "GPL License"), a copy of which is
* available along with the File in the license.txt file or by writing to the Free
* Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
* on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
*
* THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
* WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
* DISCLAIMED.  The GPL License provides additional details about this warranty
* disclaimer.
********************************************************************************/

#ifndef _THINVPP_API_H_
#define _THINVPP_API_H_

#include "thinvpp_api_types.h"

// error code definitions
#define MV_THINVPP_OK              1
#define MV_THINVPP_ENODEV         -1
#define MV_THINVPP_EBADPARAM      -2
#define MV_THINVPP_EBADCALL       -3
#define MV_THINVPP_EUNSUPPORT     -4
#define MV_THINVPP_EIOFAIL        -5
#define MV_THINVPP_EUNCONFIG      -6
#define MV_THINVPP_ECMDQFULL      -7
#define MV_THINVPP_EFRAMEQFULL    -8
#define MV_THINVPP_EBCMBUFFULL    -9
#define MV_THINVPP_ENOMEM         -10

#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    THINVPP_OPTION_NONE     = 0,
    THINVPP_OPTION_SHOWLOGO = 1,
    THINVPP_OPTION_DEFAULT  = THINVPP_OPTION_NONE,
} THINVPP_OPTION;

/* definition of display mode */
typedef enum {
    DISP_NON_DEFINED        = -1, /* non-defined */
    DISP_STILL_PIC = 0, /* display still picture mode */
    DISP_FRAME     = 1, /* display frame mode */
    DISP_PATGEN    = 2, /* display pattern generated by patgen, only valid for main */
}ENUM_DISP_MODE;

/* definition of de-interlacer working mode */
typedef enum {
    DEINT_2D   = 0, /* 2D mode, only valid for interlaced input */
    DEINT_3D   = 1, /* 3D mode, only valid for interlaced input */
}ENUM_DEINT_MODE;

/* definition of VNR working mode */
typedef enum {
    VNR_NO   = 0, /* disable VNR */
    VNR_2D   = 1, /* 2D mode */
    VNR_3D   = 2, /* 3D mode */
}ENUM_VNR_MODE;

/* definition of VNR parameter profile */
typedef enum {
    VNR_PARAM_INVALID  = -1,
    VNR_SD_LOW         = 0, /* VNR SD low profiel parameters */
    VNR_SD_MED         = 1, /* VNR SD medium profile parameters */
    VNR_SD_HIGH        = 2, /* VNR SD high profile parameters */
    VNR_SD_QDEO        = 3, /* VNR SD Qdeo parameters */
    VNR_SD_INTERNET_HIGH  = 4, /* VNR SD high bit rate internet video content parameters */
    VNR_SD_INTERNET_LOW   = 5, /* VNR SD low bit rate internet video content parameters */
    VNR_SD_INTERNET_VERY_LOW  = 6, /* VNR SD very low bit rate internet video content parameters */
    VNR_HD_LOW         = 7, /* VNR HD low profiel parameters */
    VNR_HD_MED         = 8, /* VNR HD medium profile parameters */
    VNR_HD_HIGH        = 9, /* VNR HD high profile parameters */
    VNR_HD_QDEO        = 10, /* VNR HD Qdeo parameters */
    VNR_HD_INTERNET_HIGH  = 11, /* VNR HD high bit rate internet video content parameters */
    VNR_HD_INTERNET_LOW   = 12, /* VNR HD low bit rate internet video content parameters */
    VNR_HD_INTERNET_VERY_LOW  = 13, /* VNR HD very low bit rate internet video content parameters */
    MAX_NUM_VNR_PARAMS
}ENUM_VNR_PARAMS;

/* defination of CAR parameter cmd */
typedef enum {
    CAR_CMD_INVALID = -1,
    VPP_CMD_CAR_SET_MODE =0,
    VPP_CMD_CAR_SET_MNR_PARAM ,
    VPP_CMD_CAR_SET_BNR_PARAM,
    VPP_CMD_CAR_SET_CROP_AND_REGION_PARAM,
    VPP_CMD_CAR_SET_UBD_PARAM,
    VPP_CMD_CAR_SET_FGG_GAIN,
    VPP_CMD_CAR_SET_CHROMA_FILTERING_MODE,
    VPP_CMD_CAR_SET_FGG_PARAMS,
    VPP_CMD_CAR_SET_BNR_SOFT_FILTER_FLATNESS_LOWER_THRESHOLD,
    VPP_CMD_CAR_SET_MNR_MAJOR_EXP_THRESHOLD,
    MAX_NUM_CAR_CMD

}VPP_CMD_EXT_CAR;
/* defination of NR parameter cmd */
typedef enum {
    NR_CMD_INVALID = -1,
    VPP_CMD_NR_SET_CTRL =0,
    VPP_CMD_NR_SET_PARAM ,
    MAX_NUM_NR_CMD

}VPP_CMD_EXT_NR;

/* defination of DEINT parameter cmd */
typedef enum {
    DEINT_CMD_INVALID = -1,
   VPP_CMD_DEINT_SET_USERCAD=0,
    VPP_CMD_DEINT_SET_EXCLCTRL,
    VPP_CMD_DEINT_SET_LPFCTRL,
    VPP_CMD_DEINT_SET_FILM_CADCTRL,
    VPP_CMD_DEINT_SET_PRESET_MODE,
    VPP_CMD_DEINT_SET_FORCED_2D,
    VPP_CMD_DEINT_SET_HARD_SOFT_FILM_MODE,
    MAX_NUM_DEINT_CMD

}VPP_CMD_EXT_DEINT;

/* defination of SHIFT3D parameter cmd */
typedef enum {
    SHIFT3D_CMD_INVALID = -1,
    VPP_CMD_SHIFT3D_SET_CTRL=0,
    VPP_CMD_SHIFT3D_SET_PARAM,
    MAX_NUM_SHIFT3D_CMD

}VPP_CMD_EXT_SHIFT3D;

/* defination of NEST parameter cmd */
typedef enum {
    NEST_CMD_INVALID = -1,
    VPP_CMD_NEST_SET_CROP=0,
    VPP_CMD_NEST_SET_MAP_CTRL,
    VPP_CMD_NEST_SET_FD_CTRL,
    VPP_CMD_NEST_SET_THRESHOLDS,
    VPP_CMD_NEST_SET_FD_THRESHOLDS,
    MAX_NUM_NEST_CMD

}VPP_CMD_EXT_NEST;

/* defination of EE parameter cmd */
typedef enum {
    EE_CMD_INVALID = -1,
    VPP_CMD_EE_SET_DET_CTRL=0,
    VPP_CMD_EE_SET_DET_CTRL_PARAM,
    VPP_CMD_EE_SET_CTRL,
    MAX_NUM_EE_CMD

}VPP_CMD_EXT_EE;

typedef enum {
    SCL_CMD_INVALID = -1,
    VPP_CMD_SCL_SET_CTRL=0,
    VPP_CMD_SCL_SET_NLPARAM,
    VPP_CMD_SCL_LOAD_CUST_COEFFS,
    VPP_CMD_SCL_RELOAD_DEF_COEFFS,
    MAX_NUM_SCL_CMD

}VPP_CMD_EXT_SCL;

typedef enum {
    ACE_CMD_INVALID = -1,
    VPP_CMD_ACE_SET_ENABLE=0,
    VPP_CMD_ACE_SET_MODE,
    VPP_CMD_ACE_SET_PARAM,
    VPP_CMD_ACE_SET_CLR_LEVEL,
    VPP_CMD_ACE_SET_WFACTOR_1,
    VPP_CMD_ACE_SET_WFACTOR_2,
    VPP_CMD_ACE_SET_WFACTOR_3,
    VPP_CMD_ACE_SET_THRSLD_0,
    VPP_CMD_ACE_SET_THRSLD_1,
    VPP_CMD_ACE_SET_THRSLD_2,
    VPP_CMD_ACE_SET_THRSLD_3,
    VPP_CMD_ACE_SET_THRSLD_4,
    VPP_CMD_ACE_SET_THRSLD_5,
    VPP_CMD_ACE_SET_OUTPUT_0,
    VPP_CMD_ACE_SET_OUTPUT_5,
    VPP_CMD_ACE_SET_GUARDBAND_2,
    VPP_CMD_ACE_SET_GUARDBAND_3,
    VPP_CMD_ACE_SET_MAX_SLOPE_1,
    VPP_CMD_ACE_SET_MAX_SLOPE_2,
    VPP_CMD_ACE_SET_MAX_SLOPE_3,
    MAX_NUM_ACE_CMD

}VPP_CMD_EXT_ACE;

/* definition of video component data format in frame buffer */
typedef enum {
    SRCFMT_YUV422   = 0, /* only valid for video plane */
    SRCFMT_ARGB32   = 0, /* only valid for gfx/PG planes */
    SRCFMT_ARGB24   = 1, /* only valid for gfx planes */
    SRCFMT_ARGB4444 = 2, /* only valid for gfx planes */
    SRCFMT_RGB565   = 3, /* only valid for gfx planes */
    SRCFMT_ARGB1555 = 4, /* only valid for gfx planes */
    SRCFMT_LUT8     = 5, /* only valid for gfx planes */
    SRCFMT_AYUV32   = 6, /* only valid for PG planes */
}ENUM_SRC_FMT;

/* definition of video component data order in frame buffer */
typedef enum {
    ORDER_ARGB      = 0, /* only valid for gfx planes */
    ORDER_ABGR      = 1, /* only valid for gfx planes */
    ORDER_RGBA      = 2, /* only valid for gfx planes */
    ORDER_BGRA      = 3, /* only valid for gfx planes */
    ORDER_AVYU      = 0, /* only valid for PG plane */
    ORDER_AUYV      = 1, /* only valid for PG plane */
    ORDER_VYUA      = 2, /* only valid for PG plane */
    ORDER_UYVA      = 3, /* only valid for PG plane */
    ORDER_UYVY      = 0, /* only valid for video planes */
    ORDER_VYUY      = 1, /* only valid for video planes */
    ORDER_YUYV      = 2, /* only valid for video planes */
    ORDER_YVYU      = 3, /* only valid for video planes */
}ENUM_SRC_ORDER;

/* definition of CPCB output video format */
typedef enum {
    OUTPUT_PROGRESSIVE   = 0,
    OUTPUT_INTERLACED     = 1,
    OUTPUT_AUTO_SELECT     = 2,
}ENUM_OUTPUT_MODE;

/* definition of all the output color supported by VPP*/
typedef enum {
    OUTPUT_COLOR_FMT_INVALID     = -1,
    FIRST_OUTPUT_COLOR_FMT     = 0,
    OUTPUT_COLOR_FMT_RGB888      = 0,
    OUTPUT_COLOR_FMT_YCBCR444    = 1,
    OUTPUT_COLOR_FMT_YCBCR422    = 2,
    MAX_NUM_OUTPUT_COLOR_FMTS
} ENUM_OUTPUT_COLOR_FMT;

/* definition of all the bit depths (output) supported by VPP*/
typedef enum {
    OUTPUT_BIT_DEPTH_INVALID = -1,
    FIRST_OUTPUT_BIT_DEPTH   = 0,
    OUTPUT_BIT_DEPTH_12BIT   = 0,
    OUTPUT_BIT_DEPTH_10BIT   = 1,
    OUTPUT_BIT_DEPTH_8BIT    = 2,
    MAX_NUM_OUTPUT_BIT_DEPTHS
} ENUM_OUTPUT_BIT_DEPTH;

/* definition of aspect ratio */
typedef enum {
    ASPECT_RATIO_INVALID = -1,
    FIRST_ASPECT_RATIO   = 0,
    ASPECT_RATIO_NONE    = 0,
    ASPECT_RATIO_4BY3    = 1,
    ASPECT_RATIO_16BY9   = 2,
    MAX_ASPECT_RATIO
} ENUM_ASPECT_RATIO;

/* definition of scan information */
typedef enum {
    SCAN_DATA_INVALID = -1,
    FIRST_SCAN_DATA   = 0,
    SCAN_DATA_NONE    = 0,
    OVER_SCAN_DATA    = 1,
    UNDER_SCAN_DATA   = 2,
    MAX_SCAN_DATA
} ENUM_SCAN_DATA;

/* definition of VPP TG timing formats */
typedef enum {
    RES_INVALID   = -1,
    FIRST_RES     = 0,
    RES_NTSC_M    = 0,
    RES_NTSC_J    = 1,
    RES_PAL_M     = 2,
    RES_PAL_BGH   = 3,
    RES_525I60    = 4,
    RES_525I5994  = 5,
    RES_625I50    = 6,
    RES_525P60    = 7,
    RES_525P5994  = 8,
    RES_625P50    = 9,
    RES_720P30    = 10,
    RES_720P2997  = 11,
    RES_720P25    = 12,
    RES_720P60    = 13,
    RES_720P5994  = 14,
    RES_720P50    = 15,
    RES_1080I60   = 16,
    RES_1080I5994 = 17,
    RES_1080I50   = 18,
    RES_1080P30   = 19,
    RES_1080P2997 = 20,
    RES_1080P25   = 21,
    RES_1080P24   = 22,
    RES_1080P2398 = 23,
    RES_1080P60   = 24,
    RES_1080P5994 = 25,
    RES_1080P50   = 26,
    RES_VGA_480P60 = 27,
    RES_VGA_480P5994 = 28,
    FIRST_RES_3D = 29,
    RES_720P50_3D = 29,
    RES_720P60_3D = 30,
    RES_720P5994_3D = 31,
    RES_1080P24_3D = 32,
    RES_1080P2398_3D = 33,
    RES_1080P30_3D = 34,
    RES_1080P2997_3D = 35,
    RES_1080P25_3D = 36,
    MAX_NUM_RES_3D = 36,
    RES_LVDS_1920X540P60_3D = 37,
    RES_LVDS_1920X540P30_3D = 38,
    RES_LVDS_1920X540P24_3D = 39,
    RES_RESET,
    MAX_NUM_RESS
}ENUM_CPCB_TG_RES;

/* definition of VPP status */
typedef enum {
    STATUS_INACTIVE         = 0, /* for plane and channel */
    STATUS_INACTIVE_PENDING = 1, /* for plane and channel */
    STATUS_ACTIVE           = 2, /* for plane and channel */
    STATUS_ACTIVE_PENDING   = 3, /* for plane and channel */
    STATUS_DISP             = 4, /* for channel only */
    STATUS_DISP_LOGO        = 5, /* for plane only */
    STATUS_DISP_VIDEO       = 6, /* for plane only */
    STATUS_DISP_PATGEN      = 7, /* for main plane */
    STATUS_STOP             = 8, /* STOP */
}ENUM_PLANE_STATUS;

/* definition of VPP input planes */
typedef enum {
    PLANE_INVALID = -1,
    FIRST_PLANE  = 0,
    PLANE_MAIN   = 0,
    PLANE_PIP    = 1,
    PLANE_GFX0   = 2,
    PLANE_GFX1   = 3,
    PLANE_GFX2   = 4,
    PLANE_PG     = 5,
    PLANE_BG     = 6,
    PLANE_AUX    = 7,
    MAX_NUM_PLANES
}ENUM_PLANE_ID;

/* definition of VPP channels, namely pipelines */
typedef enum {
    CHAN_INVALID = -1,
    FIRST_CHAN  = 0,
    CHAN_MAIN   = 0,
    CHAN_PIP    = 1,
    CHAN_GFX0   = 2,
    CHAN_GFX1   = 3,
    CHAN_GFX2   = 4,
    CHAN_PG     = 5,
    CHAN_BG     = 6,
    CHAN_AUX    = 7,
    MAX_NUM_CHANS
}ENUM_CHAN_ID;

/* definition of VPP CPCB plane(for Berlin) */
typedef enum {
    CPCB_PLANE_INVALID  = -1,
    FIRST_CPCB_PLANE    = 0,
    CPCB1_PLANE_1       = 0, // CPCB 1st plane
    CPCB1_PLANE_2       = 1, // CPCB 2nd plane
    CPCB1_PLANE_3       = 2, // CPCB 3rd plane
    CPCB1_PLANE_4       = 3, // CPCB 4th plane
    CPCB1_PLANE_5       = 4, // CPCB 5th plane
    CPCB1_PLANE_6       = 5, // CPCB 6th plane
    CPCB1_PLANE_7       = 6, // CPCB 7th plane
    MAX_NUM_CPCB_PLANES
}ENUM_CPCB_PLANE;

/* definition of VPP CPCB plane z-order(for Berlin) */
typedef enum {
    CPCB_ZORDER_INVALID  = -1,
    FIRST_CPCB_ZORDER    = 0,
    CPCB_ZORDER_1        = 0, // CPCB z-order 1 (bottom)
    CPCB_ZORDER_2        = 1, // CPCB z-order 2
    CPCB_ZORDER_3        = 2, // CPCB z-order 3
    CPCB_ZORDER_4        = 3, // CPCB z-order 4
    CPCB_ZORDER_5        = 4, // CPCB z-order 5
    CPCB_ZORDER_6        = 5, // CPCB z-order 6
    CPCB_ZORDER_7        = 6, // CPCB z-order 7 (top)
    MAX_NUM_CPCB_ZORDERS
}ENUM_CPCB_ZORDER;

/* definition of VPP digital video outputs(for Galois) */
typedef enum {
    DV_INVALID  = -1,
    FIRST_DV    = 0,
    DV_1        = 0, // DV-1 port for Galois
    DV_2        = 1, // DV-2 port for Galois
    MAX_NUM_DVS
}ENUM_DV_ID;

/* definition of VPP CPCB video outputs(for Berlin) */
typedef enum {
    CPCB_INVALID  = -1,
    FIRST_CPCB    = 0,
    CPCB_1        = 0, // CPCB-0 for Berlin
    CPCB_2        = 1, // CPCB-1 for Berlin
    CPCB_3        = 2, // CPCB-2 for Berlin
    MAX_NUM_CPCBS
}ENUM_CPCB_ID;

/* definition of VPP video outputs */
typedef enum {
    VOUT_INVALID   = -1,
    FIRST_VOUT     = 0,
    VOUT_HDMI      = 0,
    VOUT_HD        = 1,
    VOUT_SD        = 2,
    VOUT_TTL24     = 3,
    VOUT_TTL30     = 4,
    VOUT_LVDS      = 5,
    MAX_NUM_VOUTS
}ENUM_VOUT_ID;

/* definition of VDAC and DVIO */
typedef enum {
    PORT_INVALID   = -1,
    FIRST_PORT     = 0,
    PORT_COMPONENT = 0,
    PORT_CVBS      = 1,
    PORT_SVIDEO    = 2,
    PORT_DVIO     = 3,
    PORT_HDMI     = 4,
    MAX_NUM_PORTS
}ENUM_VDAC_ID;

/* definition of GFX0/PG plane input mode */
typedef enum {
    GFX_INPUT_MODE_INVALID   = -1,
    GFX_INPUT_MODE_NORMAL     = 0,
    GFX_INPUT_MODE_MATTE      = 1, /* pre-multiplied ARGB/AYUV */
}ENUM_GFX_INPUT_MODE;

/* definition of alpha polarity */
typedef enum {
    ALPHA_POL_NORMAL = 0,
    ALPHA_POL_INVERSE = 1,
}ENUM_ALPHA_POL;

/* definition of all the horizontal and vertical scaling coefficient modes */
typedef enum {
    SCALAR_COEFF_INVALID              = -1,
    FIRST_SCALAR_COEFF                = 0,
    SCALAR_COEFF_HORZ_EXP_SOFT        = 0,
    SCALAR_COEFF_HORZ_EXP_MILD        = 1,
    SCALAR_COEFF_HORZ_EXP_MEDIUM      = 2,
    SCALAR_COEFF_HORZ_EXP_HIGH        = 3,
    SCALAR_COEFF_HORZ_EXP_SHARP       = 4,
    SCALAR_COEFF_HORZ_EXP_GRAPHICS    = 5,
    SCALAR_COEFF_HORZ_EXP_BYPASS      = 6,
    SCALAR_COEFF_HORZ_RED_1_1         = 7,
    SCALAR_COEFF_HORZ_RED_1_25        = 8,
    SCALAR_COEFF_HORZ_RED_1_5         = 9,
    SCALAR_COEFF_HORZ_RED_1_8         = 10,
    SCALAR_COEFF_HORZ_RED_2           = 11,
    SCALAR_COEFF_HORZ_RED_2_3         = 12,
    SCALAR_COEFF_HORZ_RED_2_7         = 13,
    SCALAR_COEFF_HORZ_RED_3           = 14,
    SCALAR_COEFF_HORZ_RED_4           = 15,
    SCALAR_COEFF_HORZ_RED_5           = 16,
    SCALAR_COEFF_HORZ_RED_8           = 17,
    SCALAR_COEFF_VERT_EXP_SOFT        = 18,
    SCALAR_COEFF_VERT_EXP_MILD        = 19,
    SCALAR_COEFF_VERT_EXP_MEDIUM      = 20,
    SCALAR_COEFF_VERT_EXP_HIGH        = 21,
    SCALAR_COEFF_VERT_EXP_SHARP       = 22,
    SCALAR_COEFF_VERT_EXP_GRAPHICS    = 23,
    SCALAR_COEFF_VERT_EXP_GRAPHICS_3TAP    = 24,
    SCALAR_COEFF_VERT_EXP_BYPASS      = 25,
    SCALAR_COEFF_VERT_EXP_GRAPHICS_BYPASS  = 26,
    SCALAR_COEFF_VERT_RED_1_1         = 27,
    SCALAR_COEFF_VERT_RED_1_25        = 28,
    SCALAR_COEFF_VERT_RED_GRAPHICS_1_25    = 29,
    SCALAR_COEFF_VERT_RED_1_5         = 30,
    SCALAR_COEFF_VERT_RED_1_5_5TAP    = 31,
    SCALAR_COEFF_VERT_RED_1_5_3TAP    = 32,
    SCALAR_COEFF_VERT_RED_1_875       = 33,
    SCALAR_COEFF_VERT_RED_2           = 34,
    SCALAR_COEFF_VERT_RED_GRAPHICS_2  = 35,
    SCALAR_COEFF_VERT_RED_2_25        = 36,
    SCALAR_COEFF_VERT_RED_2_5         = 37,
    SCALAR_COEFF_VERT_RED_3           = 38,
    SCALAR_COEFF_VERT_RED_3_75        = 39,
    SCALAR_COEFF_VERT_RED_4           = 40,
    SCALAR_COEFF_VERT_RED_4_5         = 41,
    SCALAR_COEFF_VERT_RED_5           = 42,
    SCALAR_COEFF_VERT_RED_6_75        = 43,
    SCALAR_COEFF_VERT_RED_8           = 44,
    MAX_NUM_PREDEFINED_COEFFS         = 45,
    SCALAR_COEFF_AUTO                 = 45,
    MAX_NUM_SCALAR_COEFF_MODES
} ENUM_SCALAR_COEFF_MODE;

/* definition of all the sensio horizontal scaling coefficient modes */
typedef enum {
    SENSIO_SCALAR_COEFF_INVALID              = -1,
    SENSIO_SCALAR_COEFF_HORZ_RED_1_5         = 0,
    SENSIO_SCALAR_COEFF_HORZ_RED_2           = 1,
    MAX_NUM_PREDEFINED_SENSIO_COEFFS         = 2,
} ENUM_SENSIO_SCALAR_COEFF_MODE;

/* definition of EE parameter profile */
typedef enum {
    EE_PARAM_INVALID        = -1,
    EE_TH_LOW               = 0, /* EE low threshold profile parameters */
    EE_TH_MEDIUM            = 1, /* EE medium threshold profile parameters */
    EE_TH_HIGH              = 2, /* EE low high profile parameters */
    EE_INTERNET_LOW_BR_SD   = 3, /* EE parameter profile for internet low quality SD content */
    EE_INTERNET_HIGH_BR_SD  = 4, /* EE parameter profile for internet high quality SD content */
    EE_INTERNET_HD          = 5, /* EE parameter profile for internet HD content */
    MAX_NUM_EE_PARAMS
}ENUM_EE_PARAMS;

/*definition of picture control*/
typedef enum{
    FIRST_PICTURE_CTRL = 0,
    PICTURE_CTRL_BRIGHTNESS = 0,
    PICTURE_CTRL_CONTRAST,
    PICTURE_CTRL_HUE,
    PICTURE_CTRL_SATURATION,
    PICTURE_CTRL_COLORTEMPERATURE,
    MAX_PICTURE_CTRL
}ENUM_PICTURE_CTRL;

/*definition of ACE mode*/
typedef enum {
    FIRST_ACE = 0,
    ACE_OFF = 0,
    ACE_MANUAL,
    ACE_LOW,
    ACE_MEDIUM,
    ACE_HIGH,
    MAX_ACE
}ENUM_ACE_MODE;

/*definition of BR level*/
typedef enum {
    FIRST_BR = 0,
    BR_LEVEL0 = 0,
    BR_LEVEL1,
    BR_LEVEL2,
    BR_LEVEL3,
    BR_LEVEL4,
    BR_LEVEL5,
    BR_LEVEL6,
    BR_LEVEL7,
    BR_LEVEL8,
    BR_LEVEL9,
    BR_LEVEL10,
    BR_LEVEL11,
    BR_LEVEL12,
    BR_LEVEL13,
    BR_LEVEL14,
    MAX_BR
}ENUM_BR_LEVEL;

typedef enum{
    FIRST_COLOR = 0,
    COLOR_RED = 0,
    COLOR_GREEN,
    COLOR_BLUE,
    COLOR_CYAN,
    COLOR_YELLOW,
    COLOR_MAGENTA,
    COLOR_ALL,
    MAX_COLOR
}ENUM_COLOR_MODE;

/*definition of ICR mode*/
typedef enum{
    FIRST_ICR_MODE = 0,
    ICR_MODE_OFF = 0,
    ICR_MODE_SKY,
    ICR_MODE_GRASS,
    ICR_MODE_SKYGRASS,
    ICR_MODE_VIVID,
    MAX_ICR_MODE
}ENUM_ICR_MODE;

/*definition of FTDC mode*/
typedef enum {
    FIRST_FTDC = 0,
    FTDC_MODE1 = 0,
    FTDC_MODE2,
    FTDC_MODE3,
    FTDC_MODE4,
    FTDC_OFF,
    MAX_FTDC
}ENUM_FTDC_MODE;

/*definition of Gamma mode*/
typedef enum {
    FIRST_GM_MODE = 0,
    GM_1_8 = 0,
    GM_2_5,
    GM_SCURVE_LIGHT,
    GM_SCURVE_DARK,
    GM_OFF,
    MAX_GM_MODE
}ENUM_GAMMA_MODE;

/*pattern generation mode*/
typedef enum {
    PATGEN_SOLID     = 0,
    PATGEN_INCREMENT = 1,
    PATGEN_INVERSE   = 2,
    PATGEN_RANDOM    = 3,
} ENUM_PATGEN_MODE;

/*pattern generation type*/
typedef enum {
    PATGEN_PROG     = 0,
    PATGEN_INT      = 1,
} ENUM_PATGEN_TYPE;

/*pattern generation cadence*/
typedef enum {
    PATGEN_NORMAL     = 0,
    PATGEN_3_2_CAD    = 1,
    PATGEN_2_2_CAD    = 2,
} ENUM_PATGEN_CADENCE;

/*Macrovision control*/
typedef enum {
    VPP_MV_INVALID = -1,
    VPP_MV_OFF = 0,
    VPP_MV_AGC,
    VPP_MV_AGC_2LINE,
    VPP_MV_AGC_4LINE,
    VPP_MAX_MV_MODE
} ENUM_VPP_MV_MODE;

/*WSS aspect ratio mode*/
typedef enum {
    FIRST_WSS_AR_MODE = 0,
    WSS_AR_4_3_FULL_FORMAT = 0,
    WSS_AR_14_9_LETTERBOX_CENTER,
    WSS_AR_14_9_LETTERBOX_TOP,
    WSS_AR_16_9_LETTERBOX_CENTER,
    WSS_AR_16_9_LETTERBOX_TOP,
    WSS_AR_16_9_ABOVE_LETTERBOX_CENTER,
    WSS_AR_14_9_FULL_FORMAT_CENTER,
    WSS_AR_16_9_FULL_FORMAT,
    MAX_WSS_AR_MODE
} ENUM_WSS_AR_MODE;

/*WSS source mode*/
typedef enum {
    FIRST_WSS_SOURCE_MODE = 0,
    WSS_SOURCE_MODE_CAMERA = 0,
    WSS_SOURCE_MODE_FILM,
    MAX_WSS_SOURCE_MODE
} ENUM_WSS_SOURCE_MODE;

/*WSS subtitle existence in teletext*/
typedef enum {
    FIRST_WSS_SUBTITLE_IN_TT_MODE = 0,
    WSS_NO_SUBTITLE_IN_TT = 0,
    WSS_SUBTITLE_IN_TT ,
    MAX_WSS_SUBTITLE_IN_TT_MODE
} ENUM_WSS_SUBTITLE_IN_TT_MODE;

/*WSS subtitle mode*/
typedef enum {
    FIRST_WSS_SUBTITLE_MODE = 0,
    WSS_NO_OPEN_SUBTITLE = 0,
    WSS_SUBTITLE_INSIDE_ACTIVE,
    WSS_SUBTITLE_OUTSIDE_ACTIVE,
    MAX_WSS_SUBTITLE_MODE
} ENUM_WSS_SUBTITLE_MODE;

/*WSS surround sound mode*/
typedef enum {
    FIRST_WSS_SURROUND_SOUND_MODE = 0,
    WSS_NO_SURROUND_SOUND = 0,
    WSS_SURROUND_SOUND_MODE,
    MAX_WSS_SURROUND_SOUND_MODE
} ENUM_WSS_SURROUND_SOUND_MODE;

/*WSS copyright mode*/
typedef enum {
    FIRST_WSS_COPYRIGHT_MODE = 0,
    WSS_NO_COPYRIGHT_ASSERTED = 0,
    WSS_COPYRIGHT_ASSERTED,
    MAX_WSS_COPYRIGHT_MODE
} ENUM_WSS_COPYRIGHT_MODE;

/*WSS generation mode*/
typedef enum {
    FIRST_WSS_GENERATION_MODE = 0,
    WSS_COPYING_NOT_RESTRICTED = 0,
    WSS_COPYING_RESTRICTED,
    MAX_WSS_GENERATION_MODE
} ENUM_WSS_GENERATION_MODE;

/*CGMS aspect ratio mode*/
typedef enum {
    FIRST_CGMS_AR_MODE = 0,
    CGMS_AR_NOT_INDICATED = 0,
    CGMS_AR_4_3_NORMAL = 0,
    CGMS_AR_16_9_NORMAL,
    CGMS_AR_4_3_LETTERBOX,
    MAX_CGMS_AR_MODE
} ENUM_CGMS_AR_MODE;

/*CGMS copy control infomation transfer mode*/
typedef enum {
    FIRST_CGMS_COPY_CTRL_INFO_TRANS_MODE = 0,
    CGMS_COPY_CTRL_INFO_TRANS = 0,
    CGMS_COPY_CTRL_INFO_NOT_TRANS,
    MAX_CGMS_COPY_CTRL_INFO_TRANS_MODE
} ENUM_CGMS_COPY_CTRL_INFO_TRANS_MODE;

/*CGMS copy control infomation mode*/
typedef enum {
    FIRST_CGMS_COPY_CTRL_INFO_MODE = 0,
    CGMS_COPY_CTRL_INFO_PERMITTED = 0,
    CGMS_COPY_CTRL_INFO_NOT_USED,
    CGMS_COPY_CTRL_INFO_ONE_GENERATION,
    CGMS_COPY_CTRL_INFO_NOT_PERMITTED,
    MAX_CGMS_COPY_CTRL_INFO_MODE
} ENUM_CGMS_COPY_CTRL_INFO_MODE;

/*CGMS APS mode*/
typedef enum {
    FIRST_CGMS_APS_MODE = 0,
    CGMS_APS_PSP_OFF = 0,
    CGMS_APS_PSP_ON_SPLIT_BURST_OFF,
    CGMS_APS_PSP_ON_SPLIT_BURST_2_LINE,
    CGMS_APS_PSP_ON_SPLIT_BURST_4_LINE,
    MAX_CGMS_APS_MODE
} ENUM_CGMS_APS_MODE;

/*CGMS source mode*/
typedef enum {
    FIRST_CGMS_SOURCE_MODE = 0,
    CGMS_SOURCE_NOT_ANALOG = 0,
    CGMS_SOURCE_ANALOG,
    MAX_CGMS_SOURCE_MODE
} ENUM_CGMS_SOURCE_MODE;

/*TT control mode*/
typedef enum {
    FIRST_TT_CTRL_MODE = 0,
    TT_CTRL_ENABLE = 0,
    TT_CTRL_UPDATE,
    TT_CTRL_DISABLE,
    MAX_TT_CTRL_MODE
} ENUM_TT_CTRL_MODE;

/* SS offset mode */
typedef enum {
    FIRST_SS_OFFSET_MODE = 0,
    SS_OFFSET_NONE = 0,
    SS_OFFSET_VIDEO,
    SS_OFFSET_DEFAULT,
    MAX_SS_OFFSET_MODE
} ENUM_SS_OFFSET_MODE;

typedef struct PTS_T { /* 33-bit PTS */
    unsigned int hi_word; /* bit-32 */
    unsigned int lo_word; /* bit-31 ~ bit-0 */
} PTS;

typedef struct VPP_WIN_T {
    int x;      /* x-coordination of a vpp window top-left corner in pixel, index starting from 0 */
    int y;      /* y-coordination of a vpp window top-left corner in pixle, index starting from 0 */
    int width;  /* width of a vpp window in pixel */
    int height; /* height of a vpp window in pixel */
} VPP_WIN;

typedef struct VPP_WIN_ATTR_T {
    int bgcolor;    /* background color of a vpp window */
    int alpha;      /* global alpha of a vpp window */
} VPP_WIN_ATTR;

typedef struct VPP_BG_COLOR_T {
    int ColorFmt;   /*MV_PE_VPP_COLOR_FMT*/
    unsigned int Color;
} VPP_BG_COLOR;

typedef struct VPP_ZORDER_CTRL_T {
    int main;
    int pip;
    int gfx0;
    int gfx1;
    int gfx2;
    int pg;
    int bg;
    int aux;
} VPP_ZORDER_CTRL;

typedef struct VPP_PATGEN_DATA_T {
    int hmode;
    int vmode;
    int hPith;
    int vPith;
    int hColPith; // 0x00BBGGRR
    int vColPith; // 0x00BBGGRR
    int ColSeed1; // 0x00BBGGRR
    int ColSeed2; // 0x00BBGGRR
} VPP_PATGEN_DATA;

typedef struct VPP_PATGEN_TYPE_T {
    int type;
    int cadence;
    int rff;
} VPP_PATGEN_TYPE;

typedef struct VPP_FGG_CTRL_T
{
    unsigned char MainEnable;
    unsigned char PipEnable;
    unsigned char AdaptiveMode;
}VPP_FGG_CTRL;

typedef struct VPP_FGG_PARAMS_T
{
    unsigned int FggGain;
    unsigned int FggTemp;
    unsigned int FggLth;
    unsigned int FggHth;
}VPP_FGG_PARAMS;

typedef struct VPP_WSS_DATA_T {
    char ARMode;
    char SourceMode;
    char SubinTT;
    char SubMode;
    char SoundMode;
    char Copyright;
    char Generation;
}VPP_WSS_DATA;

typedef struct VPP_CGMS_DATA_T {
    char ARMode;
    char CopyInfoTrans;
    char CopyInfoMode;
    char APSMode;
    char SourceMode;
}VPP_CGMS_DATA;

typedef struct VPP_DMA_INFO_T {
    unsigned int DmaAddr;
    unsigned int DmaLen;
    unsigned int cpcbID;
}VPP_DMA_INFO;

/* CAR Data Structure */
/*
 * * CAR control register1.
 * */
typedef enum tagVPP_FE_CAR_MODE
{
    VPP_FE_CAR_BYPASS = 0,
    VPP_FE_CAR_ENABLE_MQ,
    VPP_FE_CAR_ENABLE_BNR,
    VPP_FE_CAR_ENABLE_MQ_AND_BNR

}VPP_FE_CAR_MODE;

typedef enum tagVPP_FE_CAR_MQBLMODE
{
        VPP_FE_CAR_MQBL_BLOCKNOISE =0,
        VPP_FE_CAR_MQBL_MOSQUITONOISE,
        VPP_FE_CAR_MQBL_AVG_BLOCK_MOSQUITO,
        VPP_FE_CAR_MQBL_ADAPTIVE_BLOCK_MOSQUITO
}VPP_FE_CAR_MQBLMODE;

typedef enum tagVPP_FE_CAR_CMODEFILTER
{
        VPP_FE_CAR_CMODEFILTER_BYPASS = 0,
        VPP_FE_CAR_CMODEFILTER_WEFILTER,
        VPP_FE_CAR_CMODEFILTER_STRFILTER =4,
        VPP_FE_CAR_CMODEFILTER_MAXFILTER
}VPP_FE_CAR_CMODEFILTER;

typedef struct tagVPP_FE_CAR_CTRL1_REG_BITS
{
    VPP_FE_CAR_MODE    CarMode;
    int    EnableProScan;
    int    EnableDeepLine;
    int    EnableOnScreenIndc;
    int    FieldPolarity;

}VPP_FE_CAR_CTRL1_REG_BITS,*PVPP_FE_CAR_CTRL1_REG_BITS;

/* CAR control register2.
 * */
typedef struct tagVPP_FE_CAR_CTRL2_REG_BITS
{
    unsigned char    MqBlMode;
    unsigned char    ChromaFilteringMode;
    unsigned char    DCTBasedBlockDetetcion;
    unsigned char    EnableDemoMode;

}VPP_FE_CAR_CTRL2_REG_BITS,*PVPP_FE_CAR_CTRL2_REG_BITS;


/* Mosquito noise reducer mode register 1
 * */
typedef struct tagVPP_FE_CAR_MQ_MODE1_REG_BITS
{
    int     EnableMosquitoNoiseReduction;
    unsigned char    DisableLowResMode;
    unsigned char    FilerSize;
    unsigned char    RingingDetetorEnable;
    unsigned char    SelectRingingDetectorAlgo;

}VPP_FE_CAR_MQ_MODE1_REG_BITS,*PVPP_FE_CAR_MQ_MODE1_REG_BITS;

/* Mosquito noise reducer mode register 2
 * */
typedef struct tagVPP_FE_CAR_MQ_MODE2_REG_BITS
{
    unsigned char    EnableMajorEdgeExpansion;
    unsigned char    EnableMinorEdgeExpansion;
    unsigned char    EnableFlatConditionUsage;

}VPP_FE_CAR_MQ_MODE2_REG_BITS,*PVPP_FE_CAR_MQ_MODE2_REG_BITS;

/* Major and Minor Horizontal expansions.
 * */
typedef struct tagVPP_FE_CAR_MQ_HEXP_REG_BITS
{
    unsigned char  MajorHExp;
    unsigned char  MinorHExp;

}VPP_FE_CAR_MQ_HEXP_REG_BITS,*PVPP_FE_CAR_MQ_HEXP_REG_BITS;

/* Major and Minor Vertical expansions.
 * */
typedef struct tagVPP_FE_CAR_MQ_VEXP_REG_BITS
{
    unsigned char  MajorVExp;
    unsigned char  MinorVExp;

}VPP_FE_CAR_MQ_VEXP_REG_BITS,*PVPP_FE_CAR_MQ_VEXP_REG_BITS;

/* Flat expansion control register
 * */
typedef struct tagVPP_FE_CAR_MQ_FLAT_EXPANSION_CTRL
{
    unsigned char  HorExp;
    unsigned char  VerExp;
    unsigned char  KernelSelection;

}VPP_FE_CAR_MQ_FLAT_EXPANSION_CTRL,*PVPP_FE_CAR_MQ_FLAT_EXPANSION_CTRL;


typedef struct tagVPP_FE_CAR_CONTROL_REGS
{
    VPP_FE_CAR_CTRL1_REG_BITS Ctrl1Reg;
    VPP_FE_CAR_CTRL2_REG_BITS Ctrl2Reg;
}VPP_FE_CAR_CONTROL_REGS,*PVPP_FE_CAR_CONTROL_REGS;


typedef struct tagVPP_FE_CAR_MQ_REGS
{
    VPP_FE_CAR_MQ_MODE1_REG_BITS 		MqMode1Reg;
    VPP_FE_CAR_MQ_MODE2_REG_BITS 		MqMode2Reg;
    VPP_FE_CAR_MQ_HEXP_REG_BITS  		MqHorzExpReg;
    VPP_FE_CAR_MQ_VEXP_REG_BITS  		MqVerExpReg;
    unsigned char					  			MqEdgeAdapFilterThr;
    unsigned char					  			MqBlendFactor;
    unsigned char					  			MqMajorExpEdgeStrengthThr;
    unsigned char					  			MqMinorExpEdgeStrengthThr;
    VPP_FE_CAR_MQ_FLAT_EXPANSION_CTRL	MqFlatExpCtrl;
    unsigned char						    	MqLowerThrForFlatness;
    unsigned char						    	MqHigherThrForFlatness;
    unsigned char						    	MqRingingDetectionThr1;
    unsigned char						    	MqRingingDetectionThr2;
    unsigned char						    	MqRingingDetectionThr3;
    unsigned char						    	MqRingingDetectionThr4;

}VPP_FE_CAR_MQ_REGS,*PVPP_FE_CAR_MQ_REGS;


/* Flat expansion control register
 * */
typedef struct tagVPP_FE_CAR_BL_PHASE_CTRL
{
    unsigned char  VerticalBlockPhase;
    unsigned char  HorizontalBlockPhase;
    unsigned char  BlockPhaseEnable;

}VPP_FE_CAR_BL_PHASE_CTRL,*PVPP_FE_CAR_BL_PHASE_CTRL;

typedef enum tagVPP_FE_CAR_BL_GRID_FILT_CTRL
{
    VPP_FE_CAR_BL_GRID_FILT_HORIZ_BLK_DET = 0,
    VPP_FE_CAR_BL_GRID_FILT_VERT_BLK_DET,
    VPP_FE_CAR_BL_GRID_FILT_HORIZ_OR_VERT_BLK_DET,
    VPP_FE_CAR_BL_GRID_FILT_HORIZ_AND_VERT_BLK_DET

}VPP_FE_CAR_BL_GRID_FILT_CTRL;


/* Block Noise Reducer mode
 * */
typedef struct tagVPP_FE_CAR_BL_NR_MODE
{
    unsigned char  VBlockNoiseReducer;
    unsigned char  HBlockNoiseReducer;
    VPP_FE_CAR_BL_GRID_FILT_CTRL  GridFilteringCtrl;
    unsigned char  EnableGridExp;
    unsigned char  BlSel;
    unsigned char  FilterSize;

}VPP_FE_CAR_BL_NR_MODE,*PVPP_FE_CAR_BL_NR_MODE;


/* Block Noise Reducer control for both Hor and Vert
 * */
typedef enum tagVPP_FE_CAR_FILTER_OPT
{
    VPP_FE_CAR_FILTER_OPT_GBL_FILTER =0,
    VPP_FE_CAR_FILTER_OPT_GRID_FILTER,
    VPP_FE_CAR_FILTER_OPT_GRID_FILTER_BLK,
    VPP_FE_CAR_FILTER_OPT_NO_FILTERING

}VPP_FE_CAR_FILTER_OPT;

typedef struct tagVPP_FE_CAR_HV_BLOCKS_BL_NR_MODE
{
    VPP_FE_CAR_FILTER_OPT  FilteringOption0;
    VPP_FE_CAR_FILTER_OPT  FilteringOption1;
    VPP_FE_CAR_FILTER_OPT  FilteringOption2;
    VPP_FE_CAR_FILTER_OPT  FilteringOption3;

}VPP_FE_CAR_HV_BLOCKS_BL_NR_MODE,*PVPP_FE_CAR_HV_BLOCKS_BL_NR_MODE;


/* Block Noise Reducer Filter Control Reg1
 * */
typedef struct tagVPP_FE_CAR_BL_FILTER_CTRL1
{
    unsigned char  HFilterMode;
    unsigned char  VFilterMode;
    unsigned char  HFilterSize;
    unsigned char  VFilterSize;

}VPP_FE_CAR_BL_FILTER_CTRL1,*PVPP_FE_CAR_BL_FILTER_CTRL1;


/* Block Noise Reducer Filter Control Reg2
 * */
typedef struct tagVPP_FE_CAR_BL_FILTER_CTRL2
{
    unsigned char  Select1DHFilter;
    unsigned char  Select1DVFilter;
    unsigned char  VFilterNumTaps;

}VPP_FE_CAR_BL_FILTER_CTRL2,*PVPP_FE_CAR_BL_FILTER_CTRL2;


/* Enable robust block detetcion for both had and soft mode
 * */
typedef struct tagVPP_FE_CAR_BL_DET_CTRL
{
    unsigned char SoftRobustDetection;
    unsigned char HardRobustDetection;
	unsigned char EnableIndepSelForHGrid;
	unsigned char EnableIndepSelForVGrid;
} VPP_FE_CAR_BL_DET_CTRL,*PVPP_FE_CAR_BL_DET_CTRL;


/* Vertical block detector flatness conditions (Soft/HArd)
 * */
typedef struct tagVPP_FE_CAR_BL_SHDET1_REG_BITS
{
    unsigned char FlatTh;
    unsigned char LowerBound;

}VPP_FE_CAR_BL_SHDET1_REG_BITS,*PVPP_FE_CAR_BL_SHDET1_REG_BITS;



/* Vertical/Horizontal block noise detection control (soft/Hard)
 * */
typedef struct tagVPP_FE_CAR_BL_SHDET_HV_REG_BITS
{
    unsigned char left1;
    unsigned char right1;
    unsigned char left2;
    unsigned char right2;

}VPP_FE_CAR_BL_SHDET_HV_REG_BITS,*PVPP_FE_CAR_BL_SHDET_HV_REG_BITS;


typedef struct tagVPP_FE_CAR_BL_REGS
{
    VPP_FE_CAR_BL_PHASE_CTRL  		BlPhaseControl;
    VPP_FE_CAR_BL_NR_MODE  			BlNrMode;
    VPP_FE_CAR_HV_BLOCKS_BL_NR_MODE  	BlNrHBlkMode;
    VPP_FE_CAR_HV_BLOCKS_BL_NR_MODE  	BlNrVBlkMode;
    unsigned char							BlNumofHyst;
    unsigned char							BlEdgeAdpThr;
    VPP_FE_CAR_BL_FILTER_CTRL1	    BlNrReducerFilterCtrl1;
    unsigned char							BlNrEdgeAdaptHFilter;
    unsigned char							BlNrEdgeAdaptVFilter;
    VPP_FE_CAR_BL_FILTER_CTRL2	    BlNrReducerFilterCtrl2;

}VPP_FE_CAR_BL_REGS,*PVPP_FE_CAR_BL_REGS;

/* Vertical/Horizontal block noise detection criteria(soft)
 * */
typedef struct tagVPP_FE_CAR_BL_SDET_CRITERIA_REG_BITS
{
    unsigned char VAdjPixelFlatnesCond;
    unsigned char VMaxMinFlatnessCond;
    unsigned char VBoundaryFlatnessCond;
    unsigned char VAvgPixelFlatnessCond;
    unsigned char HAdjPixelFlatnesCond;
    unsigned char HMaxMinFlatnessCond;
    unsigned char HBoundaryFlatnessCond;
    unsigned char HAvgPixelFlatnessCond;

}VPP_FE_CAR_BL_SDET_CRITERIA_REG_BITS,*PVPP_FE_CAR_BL_SDET_CRITERIA_REG_BITS;


typedef struct tagVPP_FE_CAR_BL_SOFT_FILTER_REGS
{
    VPP_FE_CAR_BL_DET_CTRL 			BlDetectionCtrl;
    VPP_FE_CAR_BL_SHDET1_REG_BITS 		BlSoftFlatnessCtrl;
    unsigned char							BlSoftUpperBoundFlatnessCtrl;
    VPP_FE_CAR_BL_SHDET_HV_REG_BITS  	BlSoftVertBlockNoiseDetectCtrl;
    VPP_FE_CAR_BL_SHDET_HV_REG_BITS  	BlSoftHorzBlockNoiseDetectCtrl;
    VPP_FE_CAR_BL_SDET_CRITERIA_REG_BITS BlSoftNoiseDetectionCriteria;
}VPP_FE_CAR_BL_SOFT_FILTER_REGS,*PVPP_FE_CAR_BL_SOFT_FILTER_REGS;


typedef struct tagVPP_FE_CAR_BL_HARD_FILTER_REGS
{
    VPP_FE_CAR_BL_DET_CTRL 			BlDetectionCtrl;
    VPP_FE_CAR_BL_SHDET1_REG_BITS 		BlHardFlatnessCtrl;
    unsigned char							BlHardUpperBoundFlatnessCtrl;
    VPP_FE_CAR_BL_SHDET_HV_REG_BITS  	BlHardVertBlockNoiseDetectCtrl;
    VPP_FE_CAR_BL_SHDET_HV_REG_BITS  	BlHardHorzBlockNoiseDetectCtrl;
    VPP_FE_CAR_BL_SDET_CRITERIA_REG_BITS BlHardNoiseDetectionCriteria;

}VPP_FE_CAR_BL_HARD_FILTER_REGS,*PVPP_FE_CAR_BL_HARD_FILTER_REGS;

typedef struct tagVPP_FE_CAR_BL_THR_FOR_HVREGION_AND_CROP
{
    unsigned short		BlHDetectThr0;
    unsigned short		BlHDetectThr1;
    unsigned short		BlHDetectThr2;
    unsigned short		BlVDetectThr0;
    unsigned short		BlVDetectThr1;
    unsigned short		BlVDetectThr2;
    unsigned char		BlCropFromTop;
    unsigned char		BlCropFromBottom;
    unsigned char		BlCropFromLeft;
    unsigned char		BlCropFromRight;

}VPP_FE_CAR_BL_THR_FOR_HVREGION_AND_CROP,*PVPP_FE_CAR_BL_THR_FOR_HVREGION_AND_CROP;


/* Universal Block detection control for scaled material block detector
 * */
typedef struct tagVPP_FE_CAR_UBL_CTRL
{
    unsigned char NumDetections;
    unsigned char FlatnessCheck;

}VPP_FE_CAR_UBL_CTRL,*PVPP_FE_CAR_UBL_CTRL;

typedef struct tagVPP_FE_CAR_UBL_CTRL_AND_THRESHOLD
{
    unsigned char				UBlCropFromTop;
    unsigned char				UBlCropFromBottom;
    unsigned char				UBlLowerThrforBlockMap1;
    unsigned char				UBlHigherThrforBlockMap1;
    unsigned char				UBlLowerThrforBlockMap2;
    unsigned char				UBlHigherThrforBlockMap2;
    VPP_FE_CAR_UBL_CTRL  UBlCtrl1;
    VPP_FE_CAR_UBL_CTRL  UBlCtrl2;
    unsigned short				UBlThrforFinalVal;
    unsigned char				UBlThrforGradMapCleanup;
    unsigned char				UBlThrforHyst;

}VPP_FE_CAR_UBL_CTRL_AND_THRESHOLD,*PVPP_FE_CAR_UBL_CTRL_AND_THRESHOLD;

typedef struct tagVPP_FE_CAR_DEFAULTS
{
    int  IsInpHD;
	int  IsInpProgressive;
}VPP_FE_CAR_DEFAULTS, *PVPP_FE_CAR_DEFAULTS;

typedef struct tagVPP_FE_CAR_FGG_CTRL_AND_GAIN
{
	unsigned char				CarFggEnabled;
	unsigned char				CarFggExtGainSelect;
	unsigned char				CarFggAdapFggGain;
	unsigned char				CarFggGain;
	unsigned char				CarFggTempVariation;
	unsigned char				CarFggLowerThres;
	unsigned char				CarFggHigherThres;
}VPP_FE_CAR_FGG_CTRL_AND_GAIN,*PVPP_FE_CAR_FGG_CTRL_AND_GAIN;

typedef struct tagVPP_FE_CAR_NE_REGS
{
        unsigned char                           CarNeHyst;
        unsigned short                          CarNeHThreshold;
        unsigned short                          CarNeVThreshold;
}VPP_FE_CAR_NE_REGS,*PVPP_FE_CAR_NE_REGS;


typedef struct tagVPP_FE_CAR_NE_CTRLREGS
{
        unsigned char                           CarNeSigmaInpThr;
        unsigned char                           CarNeEnableSigmaMOde;
}VPP_FE_CAR_NE_CTRLREGS,*PVPP_FE_CAR_NE_CTRLREGS;

typedef union tagVPP_FE_CAR_REG
{
	VPP_FE_CAR_CONTROL_REGS			CarCTRLReg;
        VPP_FE_CAR_MQ_REGS                      CarMQCtrlReg;
        VPP_FE_CAR_BL_REGS                      CarBLCtrlReg;
        VPP_FE_CAR_BL_THR_FOR_HVREGION_AND_CROP CarBLThrCtrlReg;
        VPP_FE_CAR_UBL_CTRL_AND_THRESHOLD       CarUBLCtrlReg;
        unsigned char                                   CarFGGGainReg;
}VPP_FE_CAR_REG, *PVPP_FE_CAR_REG;



/* NR DS and ENUM */
// NR Modes (part of VPP_VDO_NR_CTRL structure)
typedef enum tagVPP_VDO_NR_MODE
{
    VPP_VDO_NR_MODE_DISABLE = 0,
    VPP_VDO_NR_MODE_SPATIAL,
    VPP_VDO_NR_MODE_TEMPORAL,
    VPP_VDO_NR_MODE_SPATIO_TEMPORAL,
    VPP_VDO_NR_MODE_MAX
}VPP_VDO_NR_MODE;

// Position of flesh tone blender (part of VPP_VDO_NR_CTRL structure)
typedef enum tagVPP_VDO_NR_FTB_POS
{
    VPP_VDO_NR_FTB_AFTER_ST_BLENDER = 0,
    VPP_VDO_NR_FTB_BEFORE_ST_BLENDER,
    VPP_VDO_NR_FTB_POS_MAX
}VPP_VDO_NR_FTB_POS;

// Chroma channel motion selection modes
// (part of VPP_VDO_NR_CTRL structure)
typedef enum tagVPP_VDO_NR_CHROMA_CHN_MOTION_SEL
{
    VPP_VDO_NR_CHROMA_CHN_CMOTION = 0,
    VPP_VDO_NR_CHROMA_CHN_YMOTION,
    VPP_VDO_NR_CHROMA_CHN_MAXYC_MOTION,
    VPP_VDO_NR_CHROMA_CHN_MAX_MOTION_SEL
}VPP_VDO_NR_CHROMA_CHN_MOTION_SEL;

// Window size for spatial filter (part of VPP_VDO_NR_PARAMS struct)
typedef enum tagVPP_VDO_NR_SNR_MODE
{
    // 5/3 window in interlaced mode
    VPP_VDO_NR_SNR_5_BY_3_WIN_INT_MODE = 0,
    // 5/3 window in progressive mode
    VPP_VDO_NR_SNR_5_BY_3_WIN_PROG_MODE,
    // 9/3 window in progressive mode
    VPP_VDO_NR_SNR_9_BY_3_WIN_PROG_MODE,
    VPP_VDO_NR_SNR_MODE_MAX
}VPP_VDO_NR_SNR_MODE;

// Noise source to control VNR parameters
// (part of VPP_VDO_NR_NE_CTRL structure)
typedef enum tagVPP_VDO_NR_NOISE_SRC_MODE
{
    VPP_VDO_NR_NOISE_SRC_MODE_REGISTER = 0,
    VPP_VDO_NR_NOISE_SRC_MODE_INTERNAL_EST,
    VPP_VDO_NR_NOISE_SRC_MODE_INPUT_PORT,
    VPP_VDO_NR_NOISE_SRC_MODE_MAX
}VPP_VDO_NR_NOISE_SRC_MODE;

// Noise Estimate Mode (part of VPP_VDO_NR_NE_CTRL structure)
typedef enum tagVPP_VDO_NR_NOISE_EST_MODE
{
    VPP_VDO_NR_NOISE_EST_MODE_SPATIAL = 0,
    VPP_VDO_NR_NOISE_EST_MODE_TEMPO,
    VPP_VDO_NR_NOISE_EST_MODE_MIN_OF_SPATIAL_TEMPO,
    VPP_VDO_NR_NOISE_EST_MODE_AVG_OF_SPATIAL_TEMPO,
    VPP_VDO_NR_NOISE_EST_MODE_MAX
}VPP_VDO_NR_NOISE_EST_MODE;

// Chroma Scaling Factor (part of VPP_VDO_NR_NE_PARAMS struct)
typedef enum tagVPP_VDO_NR_CHROMA_SCALE_FACTOR
{
    VPP_VDO_NR_CHROMA_SCALE_SAME_AS_LUMA = 0,
    VPP_VDO_NR_CHROMA_SCALE_DOWN_LUMA_BY_2,
    VPP_VDO_NR_CHROMA_SCALE_DOWN_LUMA_BY_4,
    VPP_VDO_NR_CHROMA_SCALE_DOWN_LUMA_BY_8,
    VPP_VDO_NR_CHROMA_SCALE_MAX
}VPP_NR_CHROMA_SCALE_FACTOR;

// Final Output Selection Modes (part of VPP_VDO_NR_DBG_CTRL struct)
typedef enum tagVPP_VDO_NR_OUT_SEL
{
    VPP_VDO_NR_OUTPUT_FINAL_VNR = 0,
    VPP_VDO_NR_OUTPUT_FTD_MAP,
    VPP_VDO_NR_OUTPUT_NOISE_MAP,
    VPP_VDO_NR_OUTPUT_LUMA,
    VPP_VDO_NR_OUTPUT_MAX
}VPP_VDO_NR_OUT_SEL;

// Motion Map Display Mode (part of VPP_VDO_NR_DBG_CTRL struct)
typedef enum tagVPP_VDO_NR_MOTION_MAP_DISP_MODE
{
    VPP_VDO_NR_MOTION_MAP_DISP_LUMA = 0,
    VPP_VDO_NR_MOTION_MAP_DISP_CHROMA,
    VPP_VDO_NR_MOTION_MAP_DISP_FIN_OP_VNR,
    VPP_VDO_NR_MOTION_MAP_DISP_MODE_MAX = 4
}VPP_VDO_NR_MOTION_MAP_DISP_MODE, *PVPP_VDO_NR_MOTION_MAP_DISP_MODE;

/* Structures */
// NR Capability Fields
typedef struct tagAVC_NR_CAPS
{
    unsigned char NumUnits;
    unsigned int Flags;
} AVC_NR_CAPS, *PAVC_NR_CAPS;

// Fields for control of block motion sub-module
// (part of VPP_VDO_NR_CTRL structure)
typedef struct tagVPP_VDO_NR_TNR_FINE_CTRL
{
    int        EnblNudge;
    int        EnblAsd;
    int        EnblBlk;
    int        EnblBlkMotion;
    int        EnblBlkBeta;
    int        EnblBlkFilm;
}VPP_VDO_NR_TNR_FINE_CTRL, *PVPP_VDO_NR_TNR_FINE_CTRL;

// NR Control Fields
typedef struct tagVPP_VDO_NR_CTRL
{
    VPP_VDO_NR_MODE     VnrMode;
    int                YthAdaptive;
    int                CthAdaptive;
    int                YBetaAdaptive;
    int                CBetaAdaptive;
    VPP_VDO_NR_FTB_POS  FtbPos;
    int                ProscanInput;

    int                EnblYSnr;
    int                EnblCSnr;
    int                EnblYTnr;
    int                EnblCTnr;
    int                EnblLumaFtd;
    int                EnblChromaFtd;

    VPP_VDO_NR_TNR_FINE_CTRL    YTnrFineCtrl;
    VPP_VDO_NR_TNR_FINE_CTRL    CTnrFineCtrl;
    VPP_VDO_NR_CHROMA_CHN_MOTION_SEL ChromaChnMotSel;
}VPP_VDO_NR_CTRL, *PVPP_VDO_NR_CTRL;

// NR Parameters - Threshold settings for various sub-modules
typedef struct tagVPP_VDO_NR_PARAMS
{
    // Block Motion Module settings (for TNR)
    unsigned short              YBlkTh;
    unsigned short              CBlkTh;
    unsigned char               BlkXSize;
    unsigned char               BlkYSize;

    // Motion Thresholds
    unsigned char               YMotBaseTh;
    unsigned char               YMotStepTh;
    unsigned char               CMotBaseTh;
    unsigned char               CMotStepTh;

    // SNR settings
    VPP_VDO_NR_SNR_MODE YSnrMode;
    unsigned char               YSnrLowTh;
    unsigned char               YSnrHighTh;
    unsigned char               CSnrLowTh;
    unsigned char               CSnrHighTh;

    // Beta values for TNR
    unsigned char               YBeta;
    unsigned char               CBeta;
    unsigned char               BlkBeta;
}VPP_VDO_NR_PARAMS, *PVPP_VDO_NR_PARAMS;

// Noise Estimation Control fields
typedef struct tagVPP_VDO_NR_NE_CTRL
{
    int                        EnblFldFrmFltr;
    VPP_VDO_NR_NOISE_SRC_MODE   NoiSrcMode;
    VPP_VDO_NR_NOISE_EST_MODE   NoiEstMode;
}VPP_VDO_NR_NE_CTRL, *PVPP_VDO_NR_NE_CTRL;

// Noise Estimation Parameters
typedef struct tagVPP_VDO_NR_NE_PARAMS
{
    // Window Parameters (4 bits each)
    unsigned char       HWindow;
    unsigned char       HOffset;
    unsigned char       VWindow;
    unsigned char       VOffset;
    // Gaussian Noise Standard Deviation
    unsigned char       StdDev;
    unsigned char       NoiNumScale;  //4 bits
    unsigned char       NoiNumOffset; //4 bits
    unsigned char       NoiSat;       //4 bits
    VPP_NR_CHROMA_SCALE_FACTOR NoiChromaScale;
}VPP_VDO_NR_NE_PARAMS, *PVPP_VDO_NR_NE_PARAMS;

// Noise Estimation Status
typedef struct tagVPP_VDO_NR_NE_STATUS
{
    unsigned char       NoiseEstimateSpatial;
    unsigned char       NoiseEstimateTemporal;
}VPP_VDO_NR_NE_STATUS, *PVPP_VDO_NR_NE_STATUS;

// Debug Control Fields
typedef struct tagVPP_VDO_NR_DBG_CTRL
{
    VPP_VDO_NR_OUT_SEL              OutSel;
    VPP_VDO_NR_MOTION_MAP_DISP_MODE MotionMapDispMode;
    int                            Enbl8_0Rnding;
}VPP_VDO_NR_DBG_CTRL, *PVPP_VDO_NR_DBG_CTRL;

typedef union tagVPP_VDO_NR_REG
{
	VPP_VDO_NR_CTRL   NRCtrl;
	VPP_VDO_NR_PARAMS NRParam;
}VPP_VDO_NR_REG, *PVPP_VDO_NR_REG;

/*DEINT DS */

typedef enum tagVPP_DEINTUSER_CAD_MODE
{
    VPP_DEINTUSER_CAD_MODE_1 = 0,
    VPP_DEINTUSER_CAD_MODE_2

}VPP_DEINTUSER_CAD_MODE;

typedef enum tagVPP_DEINTEXCL_PARAM_MODE
{
    VPP_DEINTEXCL_PARAM_MODE_NONE = 0,
    VPP_DEINTEXCL_PARAM_EXCLUSION_SEL,
    VPP_DEINTEXCL_PARAM_EXCLUSION_SEL_2ZONE

}VPP_DEINTEXCL_PARAM_MODE;


typedef struct tagVPP_DEINTEXCL_CTRL_PARAMS
{
    VPP_DEINTEXCL_PARAM_MODE ExclSel;
    unsigned char                    LinesFromTop;
    unsigned char                    LinesFromBottom;
    unsigned char                    PixelsFromLeft;
    unsigned char                    PixelsFromRight;

} VPP_DEINTEXCL_CTRL_PARAMS, *PVPP_DEINTEXCL_CTRL_PARAMS;


typedef struct tagVPP_DEINTUSER_CAD_PARAMS_NEW
{
    VPP_DEINTUSER_CAD_MODE Cadence;
    int   Enable;
    unsigned char  Length;
    unsigned int Pattern;

} VPP_DEINTUSER_CAD_PARAMS_NEW, *PVPP_DEINTUSER_CAD_PARAMS_NEW;

typedef struct tagVPP_DEINTUSER_CAD_PARAMS
{
    int   Enable;
    unsigned char  Length;
    unsigned int Pattern;

} VPP_DEINTUSER_CAD_PARAMS, *PVPP_DEINTUSER_CAD_PARAMS;


/* SHIFT3D DS */
typedef struct tagVPP_SHIFT3D_SETPARAMS
{
	unsigned int BlackLevel;
	unsigned char  TopShift;
	unsigned char  BottomShift;
	unsigned short EndTop;
	unsigned short StartBottom;
}VPP_SHIFT3D_SETPARAMS,*PVPP_SHIFT3D_SETPARAMS;

typedef struct tagVPP_SHIFT3D_SETPARAMS_NEW
{
	int 			SetParam;
	VPP_SHIFT3D_SETPARAMS	ParamVal;
}VPP_SHIFT3D_SETPARAMS_NEW;

typedef struct tagVPP_SHIFT3D_CTRLPARAMS
{
	int Enable3D;
	int HardByPass;
}VPP_SHIFT3D_CTRLPARAMS,*PVPP_SHIFT3D_CTRLPARAMS;

typedef union tagVPP_VDO_SHIFT3D_REG
{
	VPP_SHIFT3D_SETPARAMS_NEW	SHIFT3DSetParam;
	VPP_SHIFT3D_CTRLPARAMS		SHIFT3DCtrlParam;
}VPP_VDO_SHIFT3D_REG;
/*struct for Detail Control LPF settings.*/
typedef struct VPP_FE_DET_LPF_CTRL
{
    unsigned char Lpfmode;  //VPP_FE_DET_LPF_MODE
    int    HlpfEnable;
    int    VlpfEnable;
}VPP_FE_DET_LPF_CTRL,*PVPP_FE_DET_LPF_CTRL;

/*struct for LPF parameters (controls the sharpness).*/
typedef struct VPP_FE_DET_LPF_CTRL_PARAMS
{
    unsigned char   DetailLpfHs;
    unsigned char   DetailLpfVs;
}VPP_FE_DET_LPF_CTRL_PARAMS,*PVPP_FE_DET_LPF_CTRL_PARAMS;

typedef struct VPP_FE_DEINT_LPF_CTRL
{
	VPP_FE_DET_LPF_CTRL		LPFCtrl;
	VPP_FE_DET_LPF_CTRL_PARAMS	LPFParam;
}VPP_FE_DEINT_LPF_CTRL;

typedef enum tagVPP_DEINTVI_MODE
{
    VPP_DEINTMODE_OFF = 0,
    VPP_DEINTMODE_SAFE ,
    VPP_DEINTMODE_AGGRESSIVE

}VPP_DEINTVI_MODE;

typedef enum tagVPP_DEINTCHROMA_MOT_VID_MODE
{
    VPP_DEINTCHROMA_MOT_VID_SAME_AS_LUMA = 0,
    VPP_DEINTCHROMA_MOT_FIXED_2D,
    VPP_DEINTCHROMA_MOT_INDEP_CHROMA_MOT,
    VPP_DEINTCHROMA_MOT_MAX_OF_CHROMA_AND_LUMA_MOT

}VPP_DEINTCHROMA_MOT_VID_MODE;

/*
 * These Params are mainly based on the mode.
 * So they are combined with SetPresetMode().
 */
typedef struct tagVPP_DINT_PRESET_MODE_PARAMS
{
    VPP_DEINTVI_MODE               ViMode;
    VPP_DEINTCHROMA_MOT_VID_MODE   ChrMotVidMode;
    int                           ChrMotFlmMode;

}VPP_DINT_PRESET_MODE_PARAMS, *PVPP_DINT_PRESET_MODE_PARAMS;

typedef struct tagVPP_DEINT_PRESET_MODE
{
	int				DeintPresetMode;
	VPP_DINT_PRESET_MODE_PARAMS	DeintPresetModeParam;
}VPP_FE_DEINT_PRESET_MODE, *PVPP_FE_DEINT_PRESET_MODE;

typedef enum tagVPP_DEINT_SPATIO_TEMP_MIXER_CTRL_ENUM
{
    VPP_DEINT_MOTION_ADAPTIVE = 0,
    VPP_DEINT_FORCED_SPATIAL,
    VPP_DEINT_FORCED_TEMPORAL

}VPP_DEINT_SPATIO_TEMP_MIXER_CTRL_ENUM;

//Deint Saptio-Temporal Mixer Control Parameters
typedef struct tagVPP_DEINT_FORCED2D_CTRL
{
    VPP_DEINT_SPATIO_TEMP_MIXER_CTRL_ENUM       LumaCtrlForVideoPix;
    VPP_DEINT_SPATIO_TEMP_MIXER_CTRL_ENUM       ChromaCtrlForVideoPix;
    VPP_DEINT_SPATIO_TEMP_MIXER_CTRL_ENUM       LumaCtrlForFilmPix;
    VPP_DEINT_SPATIO_TEMP_MIXER_CTRL_ENUM       ChromaCtrlForFilmPix;

}VPP_DEINT_FORCED2D_CTRL, *PVPP_DEINT_FORCED2D_CTRL;

typedef enum tagVPP_DEINT_FILM_ENTRY_MODE
{
	VPP_DEINT_MODE_22=0,
	VPP_DEINT_MODE_32
}VPP_DEINT_FILM_ENTRY_MODE;

typedef struct tagVPP_DEINT_FILM_MODE_ENTRY_PARAM
{
	VPP_DEINT_FILM_ENTRY_MODE	EntryMode;
	unsigned short	NofInHardBld;
	unsigned short	NofInSoftBld;
}VPP_DEINT_FILM_MODE_ENTRY_PARAM, *PVPP_DEINT_FILM_MODE_ENTRY_PARAM;

typedef union tagVPP_VDO_DEINT_REG
{
	VPP_DEINTUSER_CAD_PARAMS_NEW DEINTUserCad;
	VPP_DEINTEXCL_CTRL_PARAMS    DEINTExclCtrl;
	VPP_FE_DEINT_LPF_CTRL	     DEINTLPFCtrl;
	unsigned short			     FilmCadence;
	VPP_FE_DEINT_PRESET_MODE	     DEINTPreset;
	VPP_DEINT_FORCED2D_CTRL		DEINTF2DCtrl;
	VPP_DEINT_FILM_MODE_ENTRY_PARAM	DEINTFilmMode;
}VPP_VDO_DEINT_REG;


/* NEST DS and ENUM */
#define VNR_MAX_NUM_SIGMA  16
#define NE_MAX_NUM_SIGMA   4

/* Type of thresholds for map signal generator */
typedef enum tagVPP_NE_TYPE_OF_THRESHOLD
{
    VPP_NE_BAND_THRESHOLD = 0,
    VPP_NE_FLAT_THRESHOLD,
    VPP_NE_PIX_THRESHOLD,
    VPP_NE_THRESH_MAX
}VPP_NE_TYPE_OF_THRESHOLD,*PVPP_NE_TYPE_OF_THRESHOLD;


/* Type of feedback thresholds */
typedef enum tagVPP_NE_FEEDBACK_THRESH
{
    VPP_NE_TEMPORAL_BETA_FACT_FB = 0,
    VPP_NE_SPATIAL_THRESH_FB,
    VPP_NE_MOTION_THRESH_FB,
    VPP_NE_BLOCK_MOTION_THRESH_FB,
    VPP_NE_FB_MAX
}VPP_NE_FEEDBACK_THRESH,*PVPP_NE_FEEDBACK_THRESH;

typedef struct tagVPP_NE_CROP_CTRL
{
	int 	TypeOfCrop;
	unsigned char	CropVal;
}VPP_NE_CROP_CTRL;

/* Noise Estimation Map control registers */
typedef struct tagVPP_NE_MAP_CTRL
{
    int	GreyLevel;
    unsigned char	GreyLevMin;
    unsigned char	GreyLevMax;
    unsigned char   ThrForFlatness;
    unsigned char   ThrForMedianComp;
    unsigned char   WeightingFactor1Th[3];
    unsigned short  ThrForFlatAreaCntSum[4];
    unsigned char   ThrForFlatAreaCntSumLSB;
    unsigned char   WeightingFactor2Th[3];
    unsigned char   NoOfFrames;
}VPP_NE_MAP_CTRL,*PVPP_NE_MAP_CTRL;

/* NE Feedback control registers */
typedef struct tagVPP_NE_FEEDBACK_CTRL
{
    int	InputType;
    int	OsdSigmaInd;
    unsigned char   HVBlkEnble;
    unsigned char   Threshold;
}VPP_NE_FEEDBACK_CTRL,*PVPP_NE_FEEDBACK_CTRL;


typedef struct tagVPP_NE_THRESHOLDS
{
    VPP_NE_TYPE_OF_THRESHOLD ThType;
    unsigned short ThVal[4];
}VPP_NE_THRESHOLDS,*PVPP_NE_THRESHOLDS;

typedef struct tagVPP_NE_FEEDBACK_THRESHOLDS
{
    VPP_NE_FEEDBACK_THRESH FbThresh;
    unsigned short ThreshVal[VNR_MAX_NUM_SIGMA];
}VPP_NE_FEEDBACK_THRESHOLDS, *PVPP_NE_FEEDBACK_THRESHOLDS;

typedef union tagVPP_VDO_NE_REG
{
	VPP_NE_CROP_CTRL	NESTCropCtrl;
	VPP_NE_MAP_CTRL		NESTMapCtrl;
	VPP_NE_FEEDBACK_CTRL	NESTFDCtrl;
	VPP_NE_THRESHOLDS	NESTThrd;
	VPP_NE_FEEDBACK_THRESHOLDS	NESTFDThrd;
}VPP_VDO_NEST_REG;

/* EE DS */
/*enum for detail path 1 horizontal filter selection (DET_CTRL)*/
typedef enum VPP_FE_DET_HFMODE
{
    VPP_FE_DET_HFMODE_DISABLED = 0x00,  // Filter output is 0
    VPP_FE_DET_HORIZONTAL_BPF  = 0x01,  // Band Pass Filter
    VPP_FE_DET_HORIZONTAL_HPF  = 0x02,  // High Pass Filter
    VPP_FE_DET_HFEND
}VPP_FE_DET_HFMODE, *PVPP_FE_DET_HFMODE;

/*enum for detail path 2 vertiocal filter selection (DET_CTRL)*/
typedef enum VPP_FE_DET_VFMODE
{
    VPP_FE_DET_VFMODE_DISABLED       = 0x00,  // Filter output in Path2 is 0.(Disabled)
    VPP_FE_DET_VERTICAL_BPF          = 0x01,  // Band Pass Filter
    VPP_FE_DET_VERTICAL_HPF          = 0x02,  // High Pass Filter
    VPP_FE_DET_OMNI_DIRECTION_2D_HPF = 0x03,  // Omni-Directional 2D HPF
    VPP_FE_DET_VFEND
}VPP_FE_DET_VFMODE, *PVPP_FE_DET_VFMODE;

/*enum for mode of generating large mask signal (DET_CTRL_PARAMS)*/
typedef enum VPP_FE_DET_MASK_GEN_MODE
{
    VPP_FE_DET_MASK_GEN_DISABLED             = 0x00,   // Mask generation Disabled
    VPP_FE_DET_MASK_GEN_3X3_MAX              = 0x01,   // Generation using 3x3 max
    VPP_FE_DET_MASK_GEN_5X5_AND_AVERAGE_COMB = 0x02,   // Generation using 5x5 max and average combination
    VPP_FE_DET_MASK_GEN_5X5_MAX              = 0x03,   // Generation using 5x5 max
    VPP_FE_DET_MASK_GEN_END
}VPP_FE_DET_MASK_GEN_MODE, *PVPP_FE_DET_MASK_GEN_MODE;
/*struct for FE detail EE control*/
typedef struct VPP_FE_DET_CTRL
{
    int                    EeEnable;
    int                    DetailEnable;
    int                    DetailAdd;
    unsigned char                   HfMode;  //VPP_FE_DET_HFMODE
    unsigned char                   VfMode;  //VPP_FE_DET_HFMODE
    unsigned char                   DetailLut[16];
}VPP_FE_DET_CTRL, *PVPP_FE_DET_CTRL;


/*struct for FE detail EE control parameters*/
typedef struct VPP_FE_DET_CTRL_PARAMS
{
     unsigned char                      DetNosieTh1;
     unsigned char                      DetNosieTh2;
     unsigned char                      DetGain1;
     unsigned char                      DetGain2;
     unsigned char                      DetMaskGenMode;  //VPP_FE_DET_MASK_GEN_MODE
     unsigned char                      DetThBase;
     unsigned char                      DetThStep;
}VPP_FE_DET_CTRL_PARAMS, *PVPP_FE_DET_CTRL_PARAMS;


 typedef enum VPP_CPCB_EE_UNIT_NUM
 {
     VPP_CPCB_EE0       = 0,
     VPP_CPCB_EE1,
     VPP_CPCB_EE_MAX
 }VPP_CPCB_EE_UNIT_NUM, *PVPP_CPCB_EE_UNIT_NUM;

/*struct for CPCB EE control*/
typedef struct VPP_CPCB_EE_CTRL
{
    unsigned char  UpsamplerEn;
    unsigned char  LumaGainEn;
    unsigned char  DetailEn;
    unsigned char  ChromaGainEn;
} VPP_CPCB_EE_CTRL, *PVPP_CPCB_EE_CTRL;


typedef enum tagVPP_CMU_ACE_REGION
{
    VPP_CMU_ACE_REGION1 = 0,
    VPP_CMU_ACE_REGION2,
    VPP_CMU_ACE_REGION3
} VPP_CMU_ACE_REGION;

typedef enum tagVPP_CMU_ACE_THOLD
{
    VPP_CMU_ACE_THOLD0 = 0, // Below this is Black crush
    VPP_CMU_ACE_THOLD1,
    VPP_CMU_ACE_THOLD2,
    VPP_CMU_ACE_THOLD3,
    VPP_CMU_ACE_THOLD4,
    VPP_CMU_ACE_THOLD5          // Above this is white pull up.
} VPP_CMU_ACE_THOLD;


typedef enum tagVPP_CMU_ACE_OUTPUT
{
    VPP_CMU_ACE_OUTPUT0 = 0,    // White (below th0)
    VPP_CMU_ACE_OUTPUT5                 // Black (above th5)
} VPP_CMU_ACE_OUTPUT;


typedef enum tagVPP_CMU_ACE_GUARDBAND
{
    VPP_CMU_ACE_GUARDBAND2 = 0,
    VPP_CMU_ACE_GUARDBAND3
} VPP_CMU_ACE_GUARDBAND;

typedef enum tagVPP_CMU_ACE_MAXSLOPE
{
    VPP_CMU_ACE_MAXSLOPE1= 0,
    VPP_CMU_ACE_MAXSLOPE2,
    VPP_CMU_ACE_MAXSLOPE3
} VPP_CMU_ACE_MAXSLOPE;


typedef enum tagVPP_CMU_ACE_MODE
{
    VPP_CMU_ACE_OFF = 0,
    VPP_CMU_ACE_MANUAL,
    VPP_CMU_ACE_LOW,
    VPP_CMU_ACE_MEDIUM,
    VPP_CMU_ACE_HIGH,
    VPP_CMU_ACE_MAX_MODE
} VPP_CMU_ACE_MODE;


typedef enum tagVPP_CMU_ACE_RANGE
{
    VPP_CMU_ACE_RANGE_0_255 = 0,
    VPP_CMU_ACE_RANGE_16_236,
    VPP_CMU_ACE_MAX_RANGE
} VPP_CMU_ACE_RANGE;

typedef struct tagVPP_CMU_ACE_PARAMS
{
     unsigned char   Enable;
     unsigned char   ColorCompensationLevel;
     unsigned char   Crush;
     unsigned char   WeightingFactor1;
     unsigned char   WeightingFactor2;
     unsigned char   WeightingFactor3;

     unsigned char   ThresHold0;
     unsigned char   ThresHold1;
     unsigned char   ThresHold2;
     unsigned char   ThresHold3;
     unsigned char   ThresHold4;
     unsigned char   ThresHold5;

     unsigned short   OutPut0;  //White
     unsigned short   OutPut5;  // Black

     unsigned char  GuardBand2;
     unsigned char  GuardBand3;

     unsigned char  MaximumSlope1;
     unsigned char  MaximumSlope2;
     unsigned char  MaximumSlope3;

}VPP_CMU_ACE_PARAMS, *PVPP_CMU_ACE_PARAMS;


/*Enum for FRC SCL unit number*/
typedef enum VPP_FRC_SCL_NUM
{
    VPP_FRC_SCL_MAIN = 0,
    VPP_FRC_SCL_PIP,
    VPP_FRC_SCL_OSD,
    VPP_FRC_SCL_PG,
    VPP_FRC_SCL_DETAIL,
    VPP_FRC_SCL_BE,
#if (BERLIN_CHIP_VERSION >= BERLIN_BG2)
    VPP_FRC_SCL_GFX2,
#endif
    VPP_FRC_SCL_MAX
}VPP_FRC_SCL_NUM;


/*data structure for scaler control*/
typedef struct VPP_SCL_CTRL_T
{
    unsigned char  HScalePos;  //vertical scaler position, usually set to auto
    unsigned char  InputClr;     //input color space
    unsigned char  OsdInput;   //whether OSD input
    unsigned char  NLEn;          //enable non linear scaler
    unsigned char  BitMode;     //input and out put bit mode
    unsigned char  I565;          //whether 18 bits 656 input

    unsigned char  HTapNum;
    unsigned char  VTapNum;

    unsigned char  DynamicLoad; // 1: dynamically load coefficient table, 0: don't load coefficient table dynamically.
    unsigned char  ForceSel; // 0: secect coefficients by scaling ratio.1:force selection scaler H coeff, 2:force selection scaler V coeff, 3:force selection both
    int  HSclMode; //if set ForceSel to 1, HSclMode should be set
    int  VSclMode; //if set ForceSel to 1, VSclMode should be set

    unsigned char  CscMode;                   //used when the input is OSD
    unsigned char  CenterFrac;//used when enable NL scaling
} VPP_SCL_CTRL, *PVPP_SCL_CTRL;

/*scaler input and output resolution*/
typedef struct VPP_SCL_RES_T
{
    unsigned int IVRes;
    unsigned int IHRes;
    unsigned int OVRes;
    unsigned int OHRes;
} VPP_SCL_RES, *PVPP_SCL_RES;

typedef struct VPP_SCL_CTRL_PARAM_T
{
    VPP_SCL_RES		IORes;
    VPP_SCL_CTRL	SclCtrl;
}VPP_SCL_CTRL_PARAM;

/************* VPP module external APIs *****************/
int MV_THINVPP_Create(int base_addr, unsigned options);
int MV_THINVPP_Destroy(void);
int MV_THINVPP_Reset(void);
int MV_THINVPP_Config(void);
int MV_THINVPP_SetCPCBOutputResolution(int cpcbID, int resID, int bit_depth);
int MV_THINVPP_IsCPCBActive(int cpcbID);

int MV_THINVPP_SetMainRefWindow(const VPP_WIN *win);
int MV_THINVPP_SetMainDisplayFrame(VBUF_INFO *pinfo);
int MV_THINVPP_OpenDispWindow(int planeID, const VPP_WIN *win, const VPP_WIN_ATTR *attr);

int MV_THINVPP_CloseDispWindow(void);

int MV_THINVPP_Stop(void);

#ifdef __cplusplus
}
#endif

#endif
