linuxOS_AP05/external/rockit/mpi/sdk/include/rk_comm_vi.h
2025-06-02 13:59:07 +08:00

257 lines
11 KiB
C

/*
* 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_COMM_VI_H_
#define INCLUDE_RT_MPI_RK_COMM_VI_H_
#include "rk_common.h"
#include "rk_errno.h"
#include "rk_comm_video.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */
#define VI_CHN0 0
#define VI_CHN1 1
#define VI_CHN2 2
#define VI_CHN3 3
#define MAX_VI_FILE_PATH_LEN 256
#define MAX_VI_FILE_NAME_LEN 256
#define MAX_VI_ENTITY_NAME_LEN 32
#define MAX_VI_BIND_PIPE_NUM 16
/* interface mode of video input */
typedef enum rkVI_INTF_MODE_E {
VI_MODE_BT656 = 0, /* ITU-R BT.656 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_SPI, /* SPi mode */
VI_MODE_SLVS, /* SLVS mode */
VI_MODE_BUTT
} VI_INTF_MODE_E;
/* Input mode */
typedef enum rkVI_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_SPI, /* SPi mode */
VI_INPUT_MODE_SLVS, /* SLVS mode */
VI_INPUT_MODE_BUTT
} VI_INPUT_MODE_E;
/* Work mode */
typedef enum rkVI_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;
/* Sequence of YUV data */
typedef enum rkVI_YUV_DATA_SEQ_E {
/*
* The input sequence of the second component
* (only contains u and v) in BT.1120 mode is VUVU
*/
VI_DATA_SEQ_VUVU = 0,
/*
* The input sequence of the second component
* (only contains u and v) in BT.1120 mode is UVUV
*/
VI_DATA_SEQ_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;
/* Input data type */
typedef enum rkVI_DATA_TYPE_E {
VI_DATA_TYPE_YUV = 0,
VI_DATA_TYPE_RGB,
VI_DATA_TYPE_BUTT
} VI_DATA_TYPE_E;
/* The attributes of a VI device */
typedef struct rkVI_DEV_ATTR_S {
/* RW;Interface mode */
VI_INTF_MODE_E enIntfMode;
/* RW;Work mode */
VI_WORK_MODE_E enWorkMode;
/* The below members must be configured in BT.601 mode or DC mode and are invalid in other modes */
/* RW;Input data sequence (only the YUV format is supported) */
VI_YUV_DATA_SEQ_E enDataSeq;
/* RW;RGB: CSC-709 or CSC-601, PT YUV444 disable; YUV: default yuv CSC coef PT YUV444 enable. */
VI_DATA_TYPE_E enInputDataType;
/* RW;Input max size */
SIZE_S stMaxSize;
/* RW;Data rate of Device */
DATA_RATE_E enDataRate;
} VI_DEV_ATTR_S;
/* Information of pipe binded to device */
typedef struct rkVI_DEV_BIND_PIPE_S {
RK_U32 u32Num; /* RW;Range [1,VI_MAX_PHY_PIPE_NUM] */
VI_PIPE PipeId[MAX_VI_BIND_PIPE_NUM]; /* RW;Array of pipe ID */
} VI_DEV_BIND_PIPE_S;
/* The attributes of pipe */
typedef struct rkVI_PIPE_ATTR_S {
/* RW;Range:[0,1];ISP bypass enable */
RK_BOOL bIspBypass;
/* RW;Range:[0,1];Range[VI_PIPE_MIN_WIDTH,VI_PIPE_MAX_WIDTH];Maximum width */
RK_U32 u32MaxW;
/* RW;Range[VI_PIPE_MIN_HEIGHT,VI_PIPE_MAX_HEIGHT];Maximum height */
RK_U32 u32MaxH;
/* RW;Pixel format */
PIXEL_FORMAT_E enPixFmt;
/* RW;Range:[0,4];Compress mode.*/
COMPRESS_MODE_E enCompressMode;
/* RW;Range:[0,4];Bit width*/
DATA_BITWIDTH_E enBitWidth;
/* RW;Frame rate */
FRAME_RATE_CTRL_S stFrameRate;
} VI_PIPE_ATTR_S;
typedef enum rkVI_ALLOC_BUF_TYPE_E {
VI_ALLOC_BUF_TYPE_INTERNAL,
VI_ALLOC_BUF_TYPE_EXTERNAL
} VI_ALLOC_BUF_TYPE_E;
typedef enum rkVI_V4L2_CAPTURE_TYPE {
VI_V4L2_CAPTURE_TYPE_VIDEO_CAPTURE = 1,
VI_V4L2_CAPTURE_TYPE_VBI_CAPTURE = 4,
VI_V4L2_CAPTURE_TYPE_SLICED_VBI_CAPTURE = 6,
VI_V4L2_CAPTURE_TYPE_VIDEO_CAPTURE_MPLANE = 9,
VI_V4L2_CAPTURE_TYPE_SDR_CAPTURE = 11,
VI_V4L2_CAPTURE_TYPE_META_CAPTURE = 13,
/* Deprecated, do not use */
VI_V4L2_CAPTURE_TYPE_PRIVATE = 0x80,
} VI_V4L2_CAPTURE_TYPE;
typedef enum rkVI_V4L2_MEMORY_TYPE {
VI_V4L2_MEMORY_TYPE_MMAP = 1,
VI_V4L2_MEMORY_TYPE_USERPTR = 2,
VI_V4L2_MEMORY_TYPE_OVERLAY = 3,
VI_V4L2_MEMORY_TYPE_DMABUF = 4,
} VI_V4L2_MEMORY_TYPE;
/* The attributes of channel for isp opt */
typedef struct rkVI_ISP_OPT_S {
RK_U32 u32BufCount; /* RW;isp buf count */
RK_U32 u32BufSize; /* R;isp buf size */
VI_V4L2_CAPTURE_TYPE enCaptureType; /* RW;isp capture type */
VI_V4L2_MEMORY_TYPE enMemoryType; /* RW;isp buf memory type */
RK_CHAR aEntityName[MAX_VI_ENTITY_NAME_LEN]; /* RW;isp capture entity name*/
RK_BOOL bNoUseLibV4L2; /* RW;is use libv4l2 */
SIZE_S stMaxSize; /* RW;isp bypass resolution */
} VI_ISP_OPT_S;
/* The attributes of channel */
typedef struct rkVI_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. */
RK_BOOL bMirror; /* RW;Mirror enable */
RK_BOOL bFlip; /* RW;Flip enable */
RK_U32 u32Depth; /* RW; Range: [0, 8]; User get list depth.*/
FRAME_RATE_CTRL_S stFrameRate; /* RW;Frame rate */
VI_ALLOC_BUF_TYPE_E enAllocBufType; /* RW;channel alloc buf opt */
VI_ISP_OPT_S stIspOpt; /* RW;isp opt */
} VI_CHN_ATTR_S;
/* The status of chn */
typedef struct rkVI_CHN_STATUS_S {
RK_BOOL bEnable; /* RO;Whether this channel is enabled */
RK_U32 u32FrameRate; /* RO;current frame rate */
RK_U32 u32LostFrame; /* RO;Lost frame count */
RK_U32 u32VbFail; /* RO;Video buffer malloc failure */
SIZE_S stSize; /* RO;chn output size */
} VI_CHN_STATUS_S;
/*Defines the configure parameters of AI saving file.*/
typedef struct rkVI_SAVE_FILE_INFO_S {
RK_BOOL bCfg;
RK_CHAR aFilePath[MAX_VI_FILE_PATH_LEN];
RK_CHAR aFileName[MAX_VI_FILE_NAME_LEN];
RK_U32 u32FileSize; /*in KB*/
} VI_SAVE_FILE_INFO_S;
/* Defines the features of an frame */
typedef struct rkVI_FRAME_S {
MB_BLK pMbBlk; /* R; the mediabuf of frame */
RK_U32 u32UniqueId; /* R; the UniqueId of frame */
RK_U32 u32Fd; /* R; the fd of frame */
RK_U32 u32Len; /* R; the length of frame */
RK_S64 s64PTS; /* R; PTS */
RK_S32 s32Seq; /* R; the list number of frame*/
PIXEL_FORMAT_E enPixelFormat; /* R; the pixel format */
SIZE_S stSize; /* R; the frame out put size */
COMPRESS_MODE_E enCompressMode; /* R; 256B Segment compress or no compress. */
} VI_FRAME_S;
#define RK_ERR_VI_INVALID_PARA RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_ILLEGAL_PARAM)
#define RK_ERR_VI_INVALID_DEVID RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_DEVID)
#define RK_ERR_VI_INVALID_PIPEID RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_PIPEID)
#define RK_ERR_VI_INVALID_CHNID RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_INVALID_CHNID)
#define RK_ERR_VI_INVALID_NULL_PTR RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_NULL_PTR)
#define RK_ERR_VI_FAILED_NOTCONFIG RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_CONFIG)
#define RK_ERR_VI_SYS_NOTREADY RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_NOTREADY)
#define RK_ERR_VI_BUF_EMPTY RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_EMPTY)
#define RK_ERR_VI_BUF_FULL RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_BUF_FULL)
#define RK_ERR_VI_NOMEM RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_NOMEM)
#define RK_ERR_VI_NOT_SUPPORT RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_SUPPORT)
#define RK_ERR_VI_BUSY RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_BUSY)
#define RK_ERR_VI_NOT_PERM RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_PERM)
/* try to enable or initialize system,device or pipe or channel, before configing attribute */
#define RK_ERR_VI_NOT_CONFIG RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_NOT_CONFIG)
/* the channle is not existed */
#define RK_ERR_VI_UNEXIST RK_DEF_ERR(RK_ID_VI, RK_ERR_LEVEL_ERROR, RK_ERR_UNEXIST)
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* End of #ifndef INCLUDE_RT_MPI_RK_COMM_VI_H_ */