Files
Linux_Drivers/freertos/cvitek/common/include/cv1835/cvi_comm_vpss.h
carbon ca03037500 freertos: release the generic version source code
freertos runs on the second core (small one) of the CPU
2023-10-19 14:31:43 +08:00

162 lines
4.6 KiB
C

/*
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
*
* File Name: include/cvi_comm_vpss.h
* Description:
* The common data type defination for VPSS module.
*/
#ifndef __CVI_COMM_VPSS_H__
#define __CVI_COMM_VPSS_H__
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
#include "cvi_type.h"
#include "cvi_common.h"
#include "cvi_errno.h"
#include "cvi_comm_video.h"
#define CVI_TRACE_VPSS(level, fmt, ...) \
CVI_TRACE(level, CVI_ID_VPSS, "%s:%d:%s(): " fmt, __FILENAME__, __LINE__, __func__, ##__VA_ARGS__)
#define CVI_ERR_VPSS_NULL_PTR CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
#define CVI_ERR_VPSS_NOTREADY CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
#define CVI_ERR_VPSS_INVALID_DEVID CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_DEVID)
#define CVI_ERR_VPSS_INVALID_CHNID CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
#define CVI_ERR_VPSS_EXIST CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_EXIST)
#define CVI_ERR_VPSS_UNEXIST CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
#define CVI_ERR_VPSS_NOT_SUPPORT CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
#define CVI_ERR_VPSS_NOT_PERM CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
#define CVI_ERR_VPSS_NOMEM CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_NOMEM)
#define CVI_ERR_VPSS_NOBUF CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
#define CVI_ERR_VPSS_ILLEGAL_PARAM CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
#define CVI_ERR_VPSS_BUSY CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
#define CVI_ERR_VPSS_BUF_EMPTY CVI_DEF_ERR(CVI_ID_VPSS, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
#define VPSS_INVALID_FRMRATE -1
#define VPSS_CHN0 0
#define VPSS_CHN1 1
#define VPSS_CHN2 2
#define VPSS_CHN3 3
#define VPSS_INVALID_CHN -1
#define VPSS_INVALID_GRP -1
/*
* VPSS_CROP_RATIO_COOR: Ratio coordinate.
* VPSS_CROP_ABS_COOR: Absolute coordinate.
*/
typedef enum _VPSS_CROP_COORDINATE_E {
VPSS_CROP_RATIO_COOR = 0,
VPSS_CROP_ABS_COOR,
} VPSS_CROP_COORDINATE_E;
typedef enum _VPSS_ROUNDING_E {
VPSS_ROUNDING_TO_EVEN = 0,
VPSS_ROUNDING_AWAY_FROM_ZERO,
VPSS_ROUNDING_TRUNCATE,
VPSS_ROUNDING_MAX,
} VPSS_ROUNDING_E;
/*
* bEnable: Whether Normalize is enabled.
* factor: scaling factors for 3 planes.
* mean: minus means for 3 planes.
*/
typedef struct _VPSS_NORMALIZE_S {
CVI_BOOL bEnable;
CVI_FLOAT factor[3];
CVI_FLOAT mean[3];
VPSS_ROUNDING_E rounding;
} VPSS_NORMALIZE_S;
/*
* u32MaxW: Range: Width of source image.
* u32MaxH: Range: Height of source image.
* enPixelFormat: Pixel format of target image.
* stFrameRate: Frame rate control info.
* u8VpssDev: Only meaningful if VPSS_MODE_DUAL.
*/
typedef struct _VPSS_GRP_ATTR_S {
CVI_U32 u32MaxW;
CVI_U32 u32MaxH;
PIXEL_FORMAT_E enPixelFormat;
FRAME_RATE_CTRL_S stFrameRate;
CVI_U8 u8VpssDev;
} VPSS_GRP_ATTR_S;
/*
* u32Width: Width of target image.
* u32Height: Height of target image.
* enVideoFormat: Video format of target image.
* enPixelFormat: Pixel format of target image.
* stFrameRate: Frame rate control info.
* bMirror: Mirror enable.
* bFlip: Flip enable.
* u32Depth: User get list depth.
* stAspectRatio: Aspect Ratio info.
*/
typedef struct _VPSS_CHN_ATTR_S {
CVI_U32 u32Width;
CVI_U32 u32Height;
VIDEO_FORMAT_E enVideoFormat;
PIXEL_FORMAT_E enPixelFormat;
FRAME_RATE_CTRL_S stFrameRate;
CVI_BOOL bMirror;
CVI_BOOL bFlip;
CVI_U32 u32Depth;
ASPECT_RATIO_S stAspectRatio;
VPSS_NORMALIZE_S stNormalize;
} VPSS_CHN_ATTR_S;
/*
* bEnable: RW; CROP enable.
* enCropCoordinate: RW; Coordinate mode of the crop start point.
* stCropRect: CROP rectangle.
*/
typedef struct _VPSS_CROP_INFO_S {
CVI_BOOL bEnable;
VPSS_CROP_COORDINATE_E enCropCoordinate;
RECT_S stCropRect;
} VPSS_CROP_INFO_S;
/*
* bEnable: Whether LDC is enbale.
* stAttr: LDC Attribute.
*/
typedef struct _VPSS_LDC_ATTR_S {
CVI_BOOL bEnable;
LDC_ATTR_S stAttr;
} VPSS_LDC_ATTR_S;
typedef struct _VPSS_PARAM_MOD_S {
CVI_U32 u32VpssVbSource;
CVI_U32 u32VpssSplitNodeNum;
} VPSS_MOD_PARAM_S;
typedef enum _VPSS_SCALE_COEF_E {
VPSS_SCALE_COEF_BICUBIC = 0,
VPSS_SCALE_COEF_BILINEAR,
VPSS_SCALE_COEF_NEAREST,
VPSS_SCALE_COEF_OPENCV_BILINEAR,
VPSS_SCALE_COEF_MAX,
} VPSS_SCALE_COEF_E;
typedef struct _VPSS_GRP_WORK_STATUS_S {
CVI_U32 u32RecvCnt;
CVI_U32 u32LostCnt;
CVI_U32 u32StartFailCnt; //start job fail cnt
CVI_U32 u32CostTime; // current job cost time in us
CVI_U32 u32MaxCostTime;
} VPSS_GRP_WORK_STATUS_S;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __CVI_COMM_VPSS_H__ */