/* * Copyright 2020 Rockchip Electronics Co. LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef INCLUDE_RT_MPI_RK_COMMON_AVS_H_ #define INCLUDE_RT_MPI_RK_COMMON_AVS_H_ #include "rk_type.h" #include "rk_common.h" #include "rk_errno.h" #include "rk_comm_video.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* End of #ifdef __cplusplus */ #define AVS_MAX_GRP_NUM 32 #define AVS_PIPE_NUM 6 #define AVS_MAX_CHN_NUM 2 #define AVS_SPLIT_NUM 2 #define AVS_SPLIT_PIPE_NUM 6 #define AVS_CUBE_MAP_SURFACE_NUM 6 #define AVS_MAX_IN_WIDTH 8192 #define AVS_MAX_IN_HEIGHT 8192 #define AVS_MIN_IN_WIDTH 1280 #define AVS_MIN_IN_HEIGHT 720 #define AVS_MAX_OUT_WIDTH 10000 #define AVS_MAX_OUT_HEIGHT 10000 #define AVS_MIN_OUT_WIDTH 256 #define AVS_MIN_OUT_HEIGHT 256 #define MAX_AVS_FILE_PATH_LEN 256 typedef enum rkAVS_LUT_ACCURAY_E { AVS_LUT_ACCURACY_HIGH = 0, /* LUT high accuracy. */ AVS_LUT_ACCURACY_LOW = 1, /* LUT low accuracy. */ AVS_LUT_ACCURACY_BUTT } AVS_LUT_ACCURAY_E; typedef struct rkAVS_LUT_S { AVS_LUT_ACCURAY_E enAccuracy; RK_CHAR aFilePath[MAX_AVS_FILE_PATH_LEN]; } AVS_LUT_S; typedef enum rkAVS_PROJECTION_MODE_E { AVS_PROJECTION_EQUIRECTANGULAR = 0, /* Equirectangular mode. */ AVS_PROJECTION_RECTILINEAR = 1, /* Rectilinear mode. */ AVS_PROJECTION_CYLINDRICAL = 2, /* Cylindrical mode. */ AVS_PROJECTION_CUBE_MAP = 3, /* Cube map mode. */ AVS_PROJECTION_BUTT } AVS_PROJECTION_MODE_E; typedef enum rkAVS_GAIN_MODE_E { AVS_GAIN_MODE_MANUAL = 0, AVS_GAIN_MODE_AUTO = 1, AVS_GAIN_MODE_BUTT } AVS_GAIN_MODE_E; typedef enum rkAVS_MODE_E { AVS_MODE_BLEND = 0, /* according to LUT stitching, blend at the splicing point */ AVS_MODE_NOBLEND_VER = 1, /* place input images vertically together, no blend at the stitching point. */ AVS_MODE_NOBLEND_HOR = 2, /* place input images horizontally together, no blend at the stitching point */ /* Only 4 image stitching is supported, * two rows are placed, two rows are placed together, * no blend at the stitching point. */ AVS_MODE_NOBLEND_QR = 3, AVS_MODE_BUTT } AVS_MODE_E; typedef struct rkAVS_GAIN_ATTR_S { AVS_GAIN_MODE_E enMode; RK_S32 s32Coef[AVS_PIPE_NUM]; } AVS_GAIN_ATTR_S; typedef struct rkAVS_ROTATION_S { RK_S32 s32Yaw; RK_S32 s32Pitch; RK_S32 s32Roll; } AVS_ROTATION_S; typedef struct rkAVS_FOV_S { RK_U32 u32FOVX; RK_U32 u32FOVY; } AVS_FOV_S; typedef struct rkAVS_SPLIT_ATTR_S { RK_U32 u32PipeNum; AVS_PIPE AVSPipe[AVS_SPLIT_PIPE_NUM]; } AVS_SPLIT_ATTR_S; typedef struct rkAVS_CUBE_MAP_ATTR_S { RK_BOOL bBgColor; RK_U32 u32BgColor; RK_U32 u32SurfaceLength; POINT_S stStartPoint[AVS_CUBE_MAP_SURFACE_NUM]; /* RW; Start point of each surface. */ } AVS_CUBE_MAP_ATTR_S; typedef struct rkAVS_OUTPUT_ATTR_S { AVS_PROJECTION_MODE_E enPrjMode; /* RW; Projection mode. */ POINT_S stCenter; /* Center point. */ AVS_FOV_S stFOV; /* Output FOV. */ AVS_ROTATION_S stORIRotation; /* Output original rotation. */ AVS_ROTATION_S stRotation; /* Output rotation. */ AVS_SPLIT_ATTR_S stSplitAttr[AVS_SPLIT_NUM]; /* Split attribute for 7 or 8 inputs stitching. */ AVS_CUBE_MAP_ATTR_S stCubeMapAttr; /* Cube map attribute. */ } AVS_OUTPUT_ATTR_S; typedef struct rkAVS_GRP_ATTR_S { AVS_MODE_E enMode; /* Group work mode */ RK_U32 u32PipeNum; /* RW; Pipe number. */ RK_BOOL bSyncPipe; /* RW; Whether sync pipe image. */ AVS_LUT_S stLUT; /* Look up table. */ AVS_GAIN_ATTR_S stGainAttr; /* Gain attribute. */ RK_U64 u64BBoxPhyAddr[AVS_PIPE_NUM]; /* Physical address of bounding box data. */ AVS_OUTPUT_ATTR_S stOutAttr; /* Output attribute. */ FRAME_RATE_CTRL_S stFrameRate; /* Frame rate control info. */ } AVS_GRP_ATTR_S; typedef struct rkAVS_CHN_ATTR_S { RK_U32 u32Width; /* RW; Width of target image. */ RK_U32 u32Height; /* RW; Height of target image. */ COMPRESS_MODE_E enCompressMode; /* RW; Compression mode of the output. */ DYNAMIC_RANGE_E enDynamicRange; /* RW; Dynamic range. */ RK_U32 u32Depth; /* RW; Chn user list depth. */ FRAME_RATE_CTRL_S stFrameRate; /* Frame rate control info. */ } AVS_CHN_ATTR_S; typedef struct rkAVS_MOD_PARAM_S { RK_U32 u32WorkingSetSize; /* RW; AVS work */ } AVS_MOD_PARAM_S; #define RK_AVS_OK RK_SUCCESS #define RK_ERR_AVS_NULL_PTR RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR) #define RK_ERR_AVS_NOTREADY RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY) #define RK_ERR_AVS_INVALID_DEVID RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_DEVID) #define RK_ERR_AVS_INVALID_CHNID RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID) #define RK_ERR_AVS_INVALID_PIPEID RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_PIPEID) #define RK_ERR_AVS_EXIST RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_EXIST) #define RK_ERR_AVS_UNEXIST RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST) #define RK_ERR_AVS_NOT_SUPPORT RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT) #define RK_ERR_AVS_NOT_PERM RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM) #define RK_ERR_AVS_NOMEM RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM) #define RK_ERR_AVS_NOBUF RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_NOBUF) #define RK_ERR_AVS_ILLEGAL_PARAM RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM) #define RK_ERR_AVS_BUF_EMPTY RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY) #define RK_ERR_AVS_BUF_FULL RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL) #define RK_ERR_AVS_BUSY RK_DEF_ERR(RK_ID_AVS, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY) #ifdef __cplusplus #if __cplusplus } #endif #endif /* End of #ifdef __cplusplus */ #endif /* INCLUDE_RT_MPI_RK_COMMON_AVS_H_ */