1/*
2 * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#ifndef __HI_COMM_GDC_H__
16#define __HI_COMM_GDC_H__
17
18#include "hi_type.h"
19#include "hi_common.h"
20#include "hi_errno.h"
21#include "hi_comm_video.h"
22
23#ifdef __cplusplus
24#if __cplusplus
25extern "C" {
26#endif
27#endif /* __cplusplus */
28
29/* failure caused by malloc buffer */
30#define HI_ERR_GDC_NOBUF         HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_NOBUF)
31#define HI_ERR_GDC_BUF_EMPTY     HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_EMPTY)
32#define HI_ERR_GDC_NULL_PTR      HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_NULL_PTR)
33#define HI_ERR_GDC_ILLEGAL_PARAM HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_ILLEGAL_PARAM)
34#define HI_ERR_GDC_BUF_FULL      HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_BUF_FULL)
35#define HI_ERR_GDC_SYS_NOTREADY  HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_SYS_NOTREADY)
36#define HI_ERR_GDC_NOT_SUPPORT   HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_SUPPORT)
37#define HI_ERR_GDC_NOT_PERMITTED HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_NOT_PERM)
38#define HI_ERR_GDC_BUSY          HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_BUSY)
39#define HI_ERR_GDC_INVALID_CHNID HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_INVALID_CHNID)
40#define HI_ERR_GDC_CHN_UNEXIST   HI_DEF_ERR(HI_ID_GDC, EN_ERR_LEVEL_ERROR, EN_ERR_UNEXIST)
41
42#define HI_GDC_PRIVATE_DATA_NUM  4
43#define FISHEYE_MAX_REGION_NUM   4
44#define FISHEYE_LMFCOEF_NUM      128
45#define GDC_PMFCOEF_NUM          9
46
47typedef HI_S32 GDC_HANDLE;
48
49typedef struct hiGDC_TASK_ATTR_S {
50    VIDEO_FRAME_INFO_S stImgIn;                      /* Input picture */
51    VIDEO_FRAME_INFO_S stImgOut;                     /* Output picture */
52    HI_U64 au64privateData[HI_GDC_PRIVATE_DATA_NUM]; /* RW; Private data of task */
53    HI_U64 reserved;                                 /* RW; Debug information,state of current picture */
54} GDC_TASK_ATTR_S;
55
56/* Mount mode of device */
57typedef enum hiFISHEYE_MOUNT_MODE_E {
58    FISHEYE_DESKTOP_MOUNT = 0, /* Desktop mount mode */
59    FISHEYE_CEILING_MOUNT = 1, /* Ceiling mount mode */
60    FISHEYE_WALL_MOUNT = 2,    /* wall mount mode */
61
62    FISHEYE_MOUNT_MODE_BUTT
63} FISHEYE_MOUNT_MODE_E;
64
65/* View mode of client */
66typedef enum hiFISHEYE_VIEW_MODE_E {
67    FISHEYE_VIEW_360_PANORAMA = 0, /* 360 panorama mode of gdc correction */
68    FISHEYE_VIEW_180_PANORAMA = 1, /* 180 panorama mode of gdc correction */
69    FISHEYE_VIEW_NORMAL = 2,       /* normal mode of gdc correction */
70    FISHEYE_NO_TRANSFORMATION = 3, /* no gdc correction */
71
72    FISHEYE_VIEW_MODE_BUTT
73} FISHEYE_VIEW_MODE_E;
74
75/* Fisheye region correction attribute */
76typedef struct hiFISHEYE_REGION_ATTR_S {
77    FISHEYE_VIEW_MODE_E enViewMode; /* RW; Range: [0, 3];gdc view mode */
78    HI_U32 u32InRadius; /* RW; inner radius of gdc correction region */
79    HI_U32 u32OutRadius; /* RW; out radius of gdc correction region */
80    HI_U32 u32Pan; /* RW; Range: [0, 360] */
81    HI_U32 u32Tilt; /* RW; Range: [0, 360] */
82    HI_U32 u32HorZoom; /* RW; Range: [1, 4095] */
83    HI_U32 u32VerZoom; /* RW; Range: [1, 4095] */
84    RECT_S stOutRect; /* RW; out Imge rectangle attribute */
85} FISHEYE_REGION_ATTR_S;
86
87typedef struct hiFISHEYE_REGION_ATTR_EX_S {
88    FISHEYE_VIEW_MODE_E enViewMode; /* RW; Range: [0, 3];gdc view mode */
89    HI_U32 u32InRadius; /* RW; inner radius of gdc correction region */
90    HI_U32 u32OutRadius; /* RW; out radius of gdc correction region */
91    HI_U32 u32X; /* RW; Range: [0, 4608] */
92    HI_U32 u32Y; /* RW; Range: [0, 3456] */
93    HI_U32 u32HorZoom; /* RW; Range: [1, 4095] */
94    HI_U32 u32VerZoom; /* RW; Range: [1, 4095] */
95    RECT_S stOutRect; /* RW; out Imge rectangle attribute */
96} FISHEYE_REGION_ATTR_EX_S;
97
98/* Fisheye all regions correction attribute */
99typedef struct hiFISHEYE_ATTR_S {
100    HI_BOOL bEnable; /* RW; Range: [0, 1];whether enable fisheye correction or not */
101    /* RW; Range: [0, 1];whether gdc len's LMF coefficient is from user config or from default linear config */
102    HI_BOOL bLMF;
103    HI_BOOL bBgColor; /* RW; Range: [0, 1];whether use background color or not */
104    HI_U32 u32BgColor; /* RW; Range: [0,0xffffff];the background color RGB888 */
105
106    /* RW; Range: [-511, 511];the horizontal offset between image center and physical center of len */
107    HI_S32 s32HorOffset;
108    /* RW; Range: [-511, 511]; the vertical offset between image center and physical center of len */
109    HI_S32 s32VerOffset;
110
111    HI_U32 u32TrapezoidCoef; /* RW; Range: [0, 32];strength coefficient of trapezoid correction */
112    HI_S32 s32FanStrength; /* RW; Range: [-760, 760];strength coefficient of fan correction */
113
114    FISHEYE_MOUNT_MODE_E enMountMode; /* RW; Range: [0, 2];gdc mount mode */
115
116    HI_U32 u32RegionNum; /* RW; Range: [1, 4]; gdc correction region number */
117    FISHEYE_REGION_ATTR_S astFishEyeRegionAttr[FISHEYE_MAX_REGION_NUM]; /* RW; attribution of gdc correction region */
118} FISHEYE_ATTR_S;
119
120typedef struct hiFISHEYE_ATTR_EX_S {
121    HI_BOOL bEnable; /* RW; Range: [0, 1];whether enable fisheye correction or not */
122    /* RW; Range: [0, 1];whether gdc len's LMF coefficient is from user config or from default linear config */
123    HI_BOOL bLMF;
124    HI_BOOL bBgColor; /* RW; Range: [0, 1];whether use background color or not */
125    HI_U32 u32BgColor; /* RW; Range: [0,0xffffff];the background color RGB888 */
126
127    /* RW; Range: [-511, 511];the horizontal offset between image center and physical center of len */
128    HI_S32 s32HorOffset;
129    /* RW; Range: [-511, 511]; the vertical offset between image center and physical center of len */
130    HI_S32 s32VerOffset;
131
132    HI_U32 u32TrapezoidCoef; /* RW; Range: [0, 32];strength coefficient of trapezoid correction */
133    HI_S32 s32FanStrength; /* RW; Range: [-760, 760];strength coefficient of fan correction */
134
135    FISHEYE_MOUNT_MODE_E enMountMode; /* RW; Range: [0, 2];gdc mount mode */
136
137    HI_U32 u32RegionNum; /* RW; Range: [1, 4]; gdc correction region number */
138    /* RW; attribution of gdc correction region */
139    FISHEYE_REGION_ATTR_EX_S astFishEyeRegionAttr[FISHEYE_MAX_REGION_NUM];
140} FISHEYE_ATTR_EX_S;
141
142/* Spread correction attribute */
143typedef struct hiSPREAD_ATTR_S {
144    /* RW; Range: [0, 1];whether enable spread or not, When spread on,ldc DistortionRatio range should be [0, 500] */
145    HI_BOOL bEnable;
146    HI_U32 u32SpreadCoef; /* RW; Range: [0, 18];strength coefficient of spread correction */
147    SIZE_S stDestSize; /* RW; dest size of spread */
148} SPREAD_ATTR_S;
149
150/* Fisheye Job Config */
151typedef struct hiFISHEYE_JOB_CONFIG_S {
152    HI_U64 u64LenMapPhyAddr; /* LMF coefficient Physic Addr */
153} FISHEYE_JOB_CONFIG_S;
154
155/* Fisheye Config */
156typedef struct hiFISHEYE_CONFIG_S {
157    HI_U16 au16LMFCoef[FISHEYE_LMFCOEF_NUM]; /* RW;  LMF coefficient of gdc len */
158} FISHEYE_CONFIG_S;
159
160/* Gdc PMF Attr */
161typedef struct hiGDC_PMF_ATTR_S {
162    HI_S64 as64PMFCoef[GDC_PMFCOEF_NUM]; /* W;  PMF coefficient of gdc */
163} GDC_PMF_ATTR_S;
164
165/* Gdc FISHEYE POINT QUERY Attr */
166typedef struct hiGDC_FISHEYE_POINT_QUERY_ATTR_S {
167    HI_U32 u32RegionIndex;
168    FISHEYE_ATTR_S *pstFishEyeAttr;
169    HI_U16 au16LMF[FISHEYE_LMFCOEF_NUM];
170} GDC_FISHEYE_POINT_QUERY_ATTR_S;
171
172#ifdef __cplusplus
173#if __cplusplus
174}
175#endif
176#endif /* __cplusplus */
177
178#endif /* __HI_COMM_GDC_H__ */
179