1*4882a593Smuzhiyun /* GPL-2.0 WITH Linux-syscall-note OR Apache 2.0 */ 2*4882a593Smuzhiyun /* Copyright (c) 2023 Fuzhou Rockchip Electronics Co., Ltd */ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef INCLUDE_RT_MPI_RK_COMMON_AVS_H_ 5*4882a593Smuzhiyun #define INCLUDE_RT_MPI_RK_COMMON_AVS_H_ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #include "rk_common.h" 8*4882a593Smuzhiyun #include "rk_errno.h" 9*4882a593Smuzhiyun #include "rk_comm_video.h" 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifdef __cplusplus 12*4882a593Smuzhiyun #if __cplusplus 13*4882a593Smuzhiyun extern "C" { 14*4882a593Smuzhiyun #endif 15*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define AVS_SPLIT_NUM 2 18*4882a593Smuzhiyun #define AVS_SPLIT_PIPE_NUM 6 19*4882a593Smuzhiyun #define AVS_CUBE_MAP_SURFACE_NUM 6 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun typedef enum rkAVS_LUT_ACCURACY_E { 22*4882a593Smuzhiyun AVS_LUT_ACCURACY_HIGH = 0, /* LUT high accuracy. */ 23*4882a593Smuzhiyun AVS_LUT_ACCURACY_LOW = 1, /* LUT low accuracy. */ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun AVS_LUT_ACCURACY_BUTT 26*4882a593Smuzhiyun } AVS_LUT_ACCURACY_E; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun typedef enum rkAVS_LUT_STEP_E { 29*4882a593Smuzhiyun AVS_LUT_STEP_HIGH = 0, /* LUT step size 16 pixel */ 30*4882a593Smuzhiyun AVS_LUT_STEP_MEDIUM = 1, /* LUT step size 32 pixel */ 31*4882a593Smuzhiyun AVS_LUT_STEP_LOW = 2, /* LUT step size 64 pixel */ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun AVS_LUT_STEP_BUTT 34*4882a593Smuzhiyun } AVS_LUT_STEP_E; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun typedef enum rkAVS_FUSE_WIDTH_E { 37*4882a593Smuzhiyun AVS_FUSE_WIDTH_HIGH = 0, /* Fusion zone size 128 pixel */ 38*4882a593Smuzhiyun AVS_FUSE_WIDTH_MEDIUM = 1, /* Fusion zone size 256 pixel */ 39*4882a593Smuzhiyun AVS_FUSE_WIDTH_LOW = 2, /* Fusion zone size 512 pixel */ 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun AVS_FUSE_WIDTH_BUTT 42*4882a593Smuzhiyun } AVS_FUSE_WIDTH_E; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun typedef enum rkAVS_PROJECTION_MODE_E { 45*4882a593Smuzhiyun AVS_PROJECTION_EQUIRECTANGULAR = 0, /* Equirectangular mode. */ 46*4882a593Smuzhiyun AVS_PROJECTION_RECTILINEAR = 1, /* Rectilinear mode. */ 47*4882a593Smuzhiyun AVS_PROJECTION_CYLINDRICAL = 2, /* Cylindrical mode. */ 48*4882a593Smuzhiyun AVS_PROJECTION_CUBE_MAP = 3, /* Cube map mode. */ 49*4882a593Smuzhiyun AVS_PROJECTION_EQUIRECTANGULAR_TRANS = 4, /* Transvers Equirectangular mode. */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun AVS_PROJECTION_BUTT 52*4882a593Smuzhiyun } AVS_PROJECTION_MODE_E; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun typedef enum rkAVS_GAIN_MODE_E { 55*4882a593Smuzhiyun AVS_GAIN_MODE_MANUAL = 0, 56*4882a593Smuzhiyun AVS_GAIN_MODE_AUTO = 1, 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun AVS_GAIN_MODE_BUTT 59*4882a593Smuzhiyun } AVS_GAIN_MODE_E; 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun typedef enum rkAVS_MODE_E { 62*4882a593Smuzhiyun AVS_MODE_BLEND = 0, /* according to LUT stitching, blend at the splicing point */ 63*4882a593Smuzhiyun AVS_MODE_NOBLEND_VER = 1, /* place input images vertically together, no blend at the stitching point. */ 64*4882a593Smuzhiyun AVS_MODE_NOBLEND_HOR = 2, /* place input images horizontally together, no blend at the stitching point */ 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun /* Only 4 image stitching is supported, 67*4882a593Smuzhiyun * two rows are placed, two rows are placed together, 68*4882a593Smuzhiyun * no blend at the stitching point. 69*4882a593Smuzhiyun * The input image arrangement position of each pipe 70*4882a593Smuzhiyun * is as follows. 71*4882a593Smuzhiyun * +-----------+-----------+ 72*4882a593Smuzhiyun * | pipe0 | pipe1 | 73*4882a593Smuzhiyun * +-----------+-----------+ 74*4882a593Smuzhiyun * | pipe2 | pipe3 | 75*4882a593Smuzhiyun * +-----------+-----------+ 76*4882a593Smuzhiyun * */ 77*4882a593Smuzhiyun AVS_MODE_NOBLEND_QR = 3, 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun AVS_MODE_BUTT 80*4882a593Smuzhiyun } AVS_MODE_E; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun typedef enum rkAVS_PARAM_SOURCE_E { 83*4882a593Smuzhiyun AVS_PARAM_SOURCE_LUT = 0, /* Look up table*/ 84*4882a593Smuzhiyun AVS_PARAM_SOURCE_CALIB = 1, /* Calibration file */ 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun AVS_PARAM_SOURCE_MODE_BUT 87*4882a593Smuzhiyun } AVS_PARAM_SOURCE_E; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun typedef struct rkAVS_GAIN_ATTR_S { 90*4882a593Smuzhiyun AVS_GAIN_MODE_E enMode; 91*4882a593Smuzhiyun RK_S32 s32Coef[AVS_PIPE_NUM]; 92*4882a593Smuzhiyun } AVS_GAIN_ATTR_S; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun typedef struct rkAVS_ROTATION_S { 95*4882a593Smuzhiyun RK_S32 s32Yaw; 96*4882a593Smuzhiyun RK_S32 s32Pitch; 97*4882a593Smuzhiyun RK_S32 s32Roll; 98*4882a593Smuzhiyun } AVS_ROTATION_S; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun typedef struct rkAVS_FOV_S { 101*4882a593Smuzhiyun RK_U32 u32FOVX; 102*4882a593Smuzhiyun RK_U32 u32FOVY; 103*4882a593Smuzhiyun } AVS_FOV_S; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun typedef struct rkAVS_LUT_STEP_S { 106*4882a593Smuzhiyun AVS_LUT_STEP_E enStepX; 107*4882a593Smuzhiyun AVS_LUT_STEP_E enStepY; 108*4882a593Smuzhiyun } AVS_STEP_ATTR_S; 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun typedef struct rkAVS_SPLIT_ATTR_S { 111*4882a593Smuzhiyun RK_U32 u32PipeNum; 112*4882a593Smuzhiyun AVS_PIPE AVSPipe[AVS_SPLIT_PIPE_NUM]; 113*4882a593Smuzhiyun } AVS_SPLIT_ATTR_S; 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun typedef struct rkAVS_CUBE_MAP_ATTR_S { 116*4882a593Smuzhiyun RK_BOOL bBgColor; 117*4882a593Smuzhiyun RK_U32 u32BgColor; 118*4882a593Smuzhiyun RK_U32 u32SurfaceLength; 119*4882a593Smuzhiyun POINT_S stStartPoint[AVS_CUBE_MAP_SURFACE_NUM]; /* RW; Start point of each surface. */ 120*4882a593Smuzhiyun } AVS_CUBE_MAP_ATTR_S; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun typedef struct rkAVS_LUT_S { 123*4882a593Smuzhiyun AVS_LUT_ACCURACY_E enAccuracy; 124*4882a593Smuzhiyun AVS_FUSE_WIDTH_E enFuseWidth; 125*4882a593Smuzhiyun AVS_STEP_ATTR_S stLutStep; 126*4882a593Smuzhiyun RK_VOID *pVirAddr[AVS_PIPE_NUM]; 127*4882a593Smuzhiyun } AVS_LUT_S; 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun typedef struct rkAVS_CALIB_S { 130*4882a593Smuzhiyun const RK_CHAR *pCalibFilePath; 131*4882a593Smuzhiyun const RK_CHAR *pMeshAlphaPath; 132*4882a593Smuzhiyun } AVS_CALIB_S; 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun typedef struct rkAVS_FINAL_LUT_S { 135*4882a593Smuzhiyun MB_BLK pMeshBlk[AVS_PIPE_NUM]; 136*4882a593Smuzhiyun MB_BLK pAlphaBlk[AVS_PIPE_NUM]; 137*4882a593Smuzhiyun MB_BLK pLdchBlk[AVS_PIPE_NUM]; 138*4882a593Smuzhiyun MB_BLK pParamBlk[AVS_PIPE_NUM]; 139*4882a593Smuzhiyun } AVS_FINAL_LUT_S; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun typedef struct rkAVS_INPUT_ATTR_S { 142*4882a593Smuzhiyun AVS_PARAM_SOURCE_E enParamSource; /* RW; Input param source. */ 143*4882a593Smuzhiyun union { 144*4882a593Smuzhiyun AVS_LUT_S stLUT; /* Look up table. */ 145*4882a593Smuzhiyun AVS_CALIB_S stCalib; /* Calibration file. */ 146*4882a593Smuzhiyun }; 147*4882a593Smuzhiyun SIZE_S stSize; /* Source resolution */ 148*4882a593Smuzhiyun } AVS_INPUT_ATTR_S; 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun typedef struct rkAVS_OUTPUT_ATTR_S { 151*4882a593Smuzhiyun AVS_PROJECTION_MODE_E enPrjMode; /* RW; Projection mode. */ 152*4882a593Smuzhiyun POINT_S stCenter; /* Center point. */ 153*4882a593Smuzhiyun AVS_FOV_S stFOV; /* Output FOV. */ 154*4882a593Smuzhiyun AVS_ROTATION_S stORIRotation; /* Output original rotation. */ 155*4882a593Smuzhiyun AVS_ROTATION_S stRotation; /* Output rotation. */ 156*4882a593Smuzhiyun AVS_SPLIT_ATTR_S stSplitAttr[AVS_SPLIT_NUM]; /* Split attribute for 7 or 8 inputs stitching. */ 157*4882a593Smuzhiyun AVS_CUBE_MAP_ATTR_S stCubeMapAttr; /* Cube map attribute. */ 158*4882a593Smuzhiyun SIZE_S stSize; /* Mesh resolution */ 159*4882a593Smuzhiyun RK_FLOAT fDistance; /* Optimum stitch distance. */ 160*4882a593Smuzhiyun } AVS_OUTPUT_ATTR_S; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun typedef struct rkAVS_GRP_ATTR_S { 163*4882a593Smuzhiyun AVS_MODE_E enMode; /* Group work mode */ 164*4882a593Smuzhiyun RK_U32 u32PipeNum; /* RW; Pipe number. */ 165*4882a593Smuzhiyun RK_BOOL bSyncPipe; /* RW; Whether sync pipe image. */ 166*4882a593Smuzhiyun AVS_INPUT_ATTR_S stInAttr; /* Input attribute */ 167*4882a593Smuzhiyun AVS_GAIN_ATTR_S stGainAttr; /* Gain attribute. */ 168*4882a593Smuzhiyun RK_U64 u64BBoxPhyAddr[AVS_PIPE_NUM]; /* Physical address of bounding box data. */ 169*4882a593Smuzhiyun AVS_OUTPUT_ATTR_S stOutAttr; /* Output attribute. */ 170*4882a593Smuzhiyun FRAME_RATE_CTRL_S stFrameRate; /* Frame rate control info. */ 171*4882a593Smuzhiyun } AVS_GRP_ATTR_S; 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun typedef struct rkAVS_CHN_ATTR_S { 174*4882a593Smuzhiyun RK_U32 u32Width; /* RW; Width of target image. */ 175*4882a593Smuzhiyun RK_U32 u32Height; /* RW; Height of target image. */ 176*4882a593Smuzhiyun COMPRESS_MODE_E enCompressMode; /* RW; Compression mode of the output. */ 177*4882a593Smuzhiyun DYNAMIC_RANGE_E enDynamicRange; /* RW; Dynamic range. */ 178*4882a593Smuzhiyun RK_U32 u32Depth; /* RW; Chn user list depth. */ 179*4882a593Smuzhiyun FRAME_RATE_CTRL_S stFrameRate; /* Frame rate control info. */ 180*4882a593Smuzhiyun RK_U32 u32FrameBufCnt; /* RW; frame buffer cnt only used by MB_SOURCE_PRIVATE */ 181*4882a593Smuzhiyun } AVS_CHN_ATTR_S; 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun typedef struct rkAVS_MOD_PARAM_S { 184*4882a593Smuzhiyun RK_U32 u32WorkingSetSize; /* RW; AVS work */ 185*4882a593Smuzhiyun MB_SOURCE_E enMBSource; /* RW; AVS MB pool source type */ 186*4882a593Smuzhiyun } AVS_MOD_PARAM_S; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun #define RK_AVS_OK RK_SUCCESS 189*4882a593Smuzhiyun #define RK_ERR_AVS_NULL_PTR RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) 190*4882a593Smuzhiyun #define RK_ERR_AVS_NOTREADY RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY) 191*4882a593Smuzhiyun #define RK_ERR_AVS_INVALID_DEVID RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_DEVID) 192*4882a593Smuzhiyun #define RK_ERR_AVS_INVALID_CHNID RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID) 193*4882a593Smuzhiyun #define RK_ERR_AVS_INVALID_PIPEID RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_PIPEID) 194*4882a593Smuzhiyun #define RK_ERR_AVS_EXIST RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_EXIST) 195*4882a593Smuzhiyun #define RK_ERR_AVS_UNEXIST RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST) 196*4882a593Smuzhiyun #define RK_ERR_AVS_NOT_SUPPORT RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT) 197*4882a593Smuzhiyun #define RK_ERR_AVS_NOT_PERM RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) 198*4882a593Smuzhiyun #define RK_ERR_AVS_NOMEM RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM) 199*4882a593Smuzhiyun #define RK_ERR_AVS_NOBUF RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF) 200*4882a593Smuzhiyun #define RK_ERR_AVS_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) 201*4882a593Smuzhiyun #define RK_ERR_AVS_BUF_EMPTY RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY) 202*4882a593Smuzhiyun #define RK_ERR_AVS_BUF_FULL RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL) 203*4882a593Smuzhiyun #define RK_ERR_AVS_BUSY RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY) 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun #ifdef __cplusplus 206*4882a593Smuzhiyun #if __cplusplus 207*4882a593Smuzhiyun } 208*4882a593Smuzhiyun #endif 209*4882a593Smuzhiyun #endif /* End of #ifdef __cplusplus */ 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun #endif /* INCLUDE_RT_MPI_RK_COMMON_AVS_H_ */ 212