Files
Linux_Drivers/middleware/v2/include/linux/cvi_comm_region.h
wangliang.wang db9bea8b47 fix build error.
Change-Id: I733d10d084d6cea8f281eb3d38a3bdd06c042b33
2023-03-10 20:30:16 +08:00

346 lines
7.9 KiB
C

/*
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
*
* File Name: include/cvi_comm_region.h
* Description:
* Common region definitions.
*/
#ifndef __CVI_COMM_REGION_H__
#define __CVI_COMM_REGION_H__
#include <linux/types.h>
#include <linux/cvi_common.h>
#include <linux/cvi_comm_video.h>
#include <linux/cvi_defines.h>
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
#define RGN_COLOR_LUT_NUM 2
#define RGN_BATCHHANDLE_MAX 24
#define RGN_INVALID_HANDLE (-1U)
#define RGN_CMPR_MIN_SIZE 128000
typedef CVI_U32 RGN_HANDLE;
typedef CVI_U32 RGN_HANDLEGROUP;
/* type of video regions */
typedef enum _RGN_TYPE_E {
OVERLAY_RGN = 0,
COVER_RGN,
COVEREX_RGN,
OVERLAYEX_RGN,
MOSAIC_RGN,
RGN_BUTT
} RGN_TYPE_E;
typedef enum _RGN_AREA_TYPE_E {
AREA_RECT = 0,
AREA_QUAD_RANGLE,
AREA_BUTT
} RGN_AREA_TYPE_E;
/*
* RGN_ABS_COOR: Absolute coordinate.
* RGN_RATIO_COOR: Ratio coordinate.
*/
typedef enum _RGN_COORDINATE_E {
RGN_ABS_COOR = 0,
RGN_RATIO_COOR
} RGN_COORDINATE_E;
/*
* bSolid: whether solid or dashed quadrangle
* u32Thick: Line Width of quadrangle, valid when dashed quadrangle
* stPoint[4]: points of quadrilateral
*/
typedef struct _RGN_QUADRANGLE_S {
CVI_BOOL bSolid;
CVI_U32 u32Thick;
POINT_S stPoint[4];
} RGN_QUADRANGLE_S;
/*
* enCoverType: rect or arbitrary quadrilateral COVER
* stRect: config of rect
* stQuadRangle: config of arbitrary quadrilateral COVER
* u32Color: color of region.
* u32Layer: COVER region layer
* enCoordinate: ratio coordiante or abs coordinate
*/
typedef struct _COVER_CHN_ATTR_S {
RGN_AREA_TYPE_E enCoverType;
union {
RECT_S stRect;
RGN_QUADRANGLE_S stQuadRangle;
};
CVI_U32 u32Color;
CVI_U32 u32Layer;
RGN_COORDINATE_E enCoordinate;
} COVER_CHN_ATTR_S;
/*
* enCoverType: rect or arbitrary quadrilateral COVER
* stRect: config of rect
* stQuadRangle: config of arbitrary quadrilateral COVER
* u32Color: color of region.
* u32Layer: COVER region layer
*/
typedef struct _COVEREX_CHN_ATTR_S {
RGN_AREA_TYPE_E enCoverType;
union {
RECT_S stRect;
RGN_QUADRANGLE_S stQuadRangle;
};
CVI_U32 u32Color;
CVI_U32 u32Layer;
} COVEREX_CHN_ATTR_S;
typedef enum _MOSAIC_BLK_SIZE_E {
MOSAIC_BLK_SIZE_8 = 0, /* block size 8*8 of MOSAIC */
MOSAIC_BLK_SIZE_16, /* block size 16*16 of MOSAIC */
MOSAIC_BLK_SIZE_BUTT
} MOSAIC_BLK_SIZE_E;
/*
* stRect: config of rect
* enBlkSize: block size of MOSAIC
* u32Layer: MOSAIC region layer range
*/
typedef struct _MOSAIC_CHN_ATTR_S {
RECT_S stRect;
MOSAIC_BLK_SIZE_E enBlkSize;
CVI_U32 u32Layer;
} MOSAIC_CHN_ATTR_S;
/*
* OSD_COMPRESS_MODE_NONE : No compression
* OSD_COMPRESS_MODE_SW : data from SW compressor
* OSD_COMPRESS_MODE_HW : data from HW compressor
*/
typedef enum _OSD_COMPRESS_MODE_E {
OSD_COMPRESS_MODE_NONE = 0,
OSD_COMPRESS_MODE_SW,
OSD_COMPRESS_MODE_HW,
OSD_COMPRESS_MODE_BUTT
} OSD_COMPRESS_MODE_E;
/*
* enOSDCompressMode : Check the VGOP input data from SW/HW compressor.
* u32EstCompressSize : Estimate bitstream size(SW compressor) for ion_alloc.
* u32CompressSize : Real bitstream size(HW compressor) for ion_alloc.
*/
typedef struct _OSD_COMPRESS_INFO_S {
OSD_COMPRESS_MODE_E enOSDCompressMode;
CVI_U32 u32EstCompressedSize;
CVI_U32 u32CompressedSize;
} OSD_COMPRESS_INFO_S;
/*
* u32BgColor: background color, format depends on "enPixelFormat"
* stSize: region size
* u32CanvasNum: num of canvas. 2 for double buffer.
*/
typedef struct _OVERLAY_ATTR_S {
PIXEL_FORMAT_E enPixelFormat;
CVI_U32 u32BgColor;
SIZE_S stSize;
CVI_U32 u32CanvasNum;
OSD_COMPRESS_INFO_S stCompressInfo;
} OVERLAY_ATTR_S;
/*
* u32BgColor: background color, format depends on "enPixelFormat"
* stSize: region size
* u32CanvasNum: num of canvas. 2 for double buffer.
*/
typedef struct _OVERLAYEX_ATTR_S {
PIXEL_FORMAT_E enPixelFormat;
CVI_U32 u32BgColor;
SIZE_S stSize;
CVI_U32 u32CanvasNum;
OSD_COMPRESS_INFO_S stCompressInfo;
} OVERLAYEX_ATTR_S;
typedef enum _INVERT_COLOR_MODE_E {
LESSTHAN_LUM_THRESH = 0, /* the lum of the video is less than the lum threshold which is set by u32LumThresh */
MORETHAN_LUM_THRESH, /* the lum of the video is more than the lum threshold which is set by u32LumThresh */
INVERT_COLOR_BUTT
} INVERT_COLOR_MODE_E;
typedef struct _OVERLAY_INVERT_COLOR_S {
SIZE_S stInvColArea;
CVI_U32 u32LumThresh;
INVERT_COLOR_MODE_E enChgMod;
CVI_BOOL bInvColEn; /* The switch of inverting color. */
} OVERLAY_INVERT_COLOR_S;
/*
* stPoint: position of region.
* u32Layer: region layer.
*/
typedef struct _OVERLAY_CHN_ATTR_S {
POINT_S stPoint;
CVI_U32 u32Layer;
OVERLAY_INVERT_COLOR_S stInvertColor;
} OVERLAY_CHN_ATTR_S;
/*
* stPoint: position of region.
* u32Layer: region layer.
*/
typedef struct _OVERLAYEX_CHN_ATTR_S {
POINT_S stPoint;
CVI_U32 u32Layer;
OVERLAY_INVERT_COLOR_S stInvertColor;
} OVERLAYEX_CHN_ATTR_S;
typedef union _RGN_ATTR_U {
OVERLAY_ATTR_S stOverlay; /* attribute of overlay region */
OVERLAYEX_ATTR_S stOverlayEx; /* attribute of overlayex region */
} RGN_ATTR_U;
/* attribute of a region.
*
* enType: region type.
* unAttr: region attribute.
*/
typedef struct _RGN_ATTR_S {
RGN_TYPE_E enType;
RGN_ATTR_U unAttr;
} RGN_ATTR_S;
/*
* stOverlayChn: attribute of overlay region
* stCoverChn: attribute of cover region
* stCoverExChn: attribute of coverex region
* stOverlayExChn: attribute of overlayex region
* stMosaicChn: attribute of mosic region
*/
typedef union _RGN_CHN_ATTR_U {
OVERLAY_CHN_ATTR_S stOverlayChn;
COVER_CHN_ATTR_S stCoverChn;
COVEREX_CHN_ATTR_S stCoverExChn;
OVERLAYEX_CHN_ATTR_S stOverlayExChn;
MOSAIC_CHN_ATTR_S stMosaicChn;
} RGN_CHN_ATTR_U;
/* attribute of a region
*
* bShow: region show or not.
* enType: region type.
* unChnAttr: region attribute.
*/
typedef struct _RGN_CHN_ATTR_S {
CVI_BOOL bShow;
RGN_TYPE_E enType;
RGN_CHN_ATTR_U unChnAttr;
} RGN_CHN_ATTR_S;
typedef enum _RGN_CMPR_TYPE_E {
RGN_CMPR_RECT = 0,
RGN_CMPR_BIT_MAP,
RGN_CMPR_LINE,
RGN_CMPR_BUTT
} RGN_CMPR_TYPE_E;
typedef struct _RGN_LINE_ATTR_S {
POINT_S stPointStart;
POINT_S stPointEnd;
CVI_U32 u32Thick;
CVI_U32 u32Color;
} RGN_LINE_ATTR_S;
typedef struct _RGN_RECT_ATTR_S {
RECT_S stRect;
CVI_U32 u32Thick;
CVI_U32 u32Color;
CVI_U32 u32IsFill;
} RGN_RECT_ATTR_S;
typedef struct _RGN_BITMAP_ATTR_S {
RECT_S stRect;
CVI_U32 u32BitmapPAddr;
} RGN_BITMAP_ATTR_S;
typedef struct _RGN_CMPR_OBJ_ATTR_S {
RGN_CMPR_TYPE_E enObjType;
union {
RGN_LINE_ATTR_S stLine;
RGN_RECT_ATTR_S stRgnRect;
RGN_BITMAP_ATTR_S stBitmap;
};
} RGN_CMPR_OBJ_ATTR_S;
typedef struct _RGN_CANVAS_CMPR_ATTR_S {
CVI_U32 u32Width;
CVI_U32 u32Height;
CVI_U32 u32BgColor;
PIXEL_FORMAT_E enPixelFormat;
CVI_U32 u32BsSize;
CVI_U32 u32ObjNum;
} RGN_CANVAS_CMPR_ATTR_S;
typedef struct _RGN_CANVAS_INFO_S {
CVI_U64 u64PhyAddr;
CVI_U8 *pu8VirtAddr;
#ifdef __arm__
__u32 padding; /* padding for keeping same size of this structure */
#endif
SIZE_S stSize;
CVI_U32 u32Stride;
PIXEL_FORMAT_E enPixelFormat;
CVI_BOOL bCompressed;
CVI_U32 u32CompressedSize;
OSD_COMPRESS_MODE_E enOSDCompressMode;
RGN_CANVAS_CMPR_ATTR_S *pstCanvasCmprAttr;
RGN_CMPR_OBJ_ATTR_S *pstObjAttr;
} RGN_CANVAS_INFO_S;
typedef struct _RGN_COMPONENT_INFO_S {
CVI_S32 alen;
CVI_S32 rlen;
CVI_S32 glen;
CVI_S32 blen;
} RGN_COMP_INFO_S;
typedef struct _RGN_RGBQUAD {
CVI_U8 argbAlpha;
CVI_U8 argbRed;
CVI_U8 argbGreen;
CVI_U8 argbBlue;
} RGN_RGBQUARD_S;
/* the color format OSD supported */
typedef enum _RGN_COLOR_FMT_E {
RGN_COLOR_FMT_RGB444 = 0,
RGN_COLOR_FMT_RGB4444 = 1,
RGN_COLOR_FMT_RGB555 = 2,
RGN_COLOR_FMT_RGB565 = 3,
RGN_COLOR_FMT_RGB1555 = 4,
RGN_COLOR_FMT_RGB888 = 6,
RGN_COLOR_FMT_RGB8888 = 7,
RGN_COLOR_FMT_ARGB4444 = 8,
RGN_COLOR_FMT_ARGB1555 = 9,
RGN_COLOR_FMT_ARGB8888 = 10,
RGN_COLOR_FMT_BUTT
} RGN_COLOR_FMT_E;
typedef struct _RGN_PALETTE {
RGN_RGBQUARD_S *pstPaletteTable;
CVI_U16 lut_length;
RGN_COLOR_FMT_E pixelFormat;
} RGN_PALETTE_S;
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */
#endif /* __CVI_COMM_REGION_H__ */