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
16#ifndef __HI_COMMON_H__
17#define __HI_COMMON_H__
18
19#include "autoconf.h"
20#include "hi_type.h"
21#include "hi_defines.h"
22
23#ifndef __IGNORE_HWSEC__
24#if !defined(__KERNEL__) || defined(__LITEOS__)
25#include "securectype.h"
26#include "securec.h"
27#include <stdarg.h>
28#endif
29#endif
30
31#ifdef __cplusplus
32#if __cplusplus
33extern "C" {
34#endif
35#endif /* End of #ifdef __cplusplus */
36
37#ifndef VER_X
38#define VER_X                  1
39#endif
40
41#ifndef VER_Y
42#define VER_Y                  0
43#endif
44
45#ifndef VER_Z
46#define VER_Z                  0
47#endif
48
49#ifndef VER_P
50#define VER_P                  0
51#endif
52
53#ifndef VER_B
54#define VER_B                  0
55#endif
56
57#ifdef HI_DEBUG
58#define VER_D                  " Debug"
59#else
60#define VER_D                  " Release"
61#endif
62
63#define ATTRIBUTE              __attribute__((aligned(ALIGN_NUM)))
64#define hi_unused(x)           ((hi_void)x)
65
66#define COMPAT_POINTER(ptr, type) \
67    do { \
68        HI_UL ulAddr = (HI_UINTPTR_T)ptr; \
69        HI_U32 u32Addr = (HI_U32)ulAddr; \
70        ptr = (type)(HI_UINTPTR_T)u32Addr; \
71    } while (0)
72
73#define __MK_VERSION(x, y, z, p, b) #x "." #y "." #z "." #p " B0" #b
74#define MK_VERSION(x, y, z, p, b) __MK_VERSION(x, y, z, p, b)
75#define MPP_VERSION            CHIP_NAME MPP_VER_PRIX MK_VERSION(VER_X, VER_Y, VER_Z, VER_P, VER_B) VER_D
76
77#define VERSION_NAME_MAXLEN    64
78typedef struct hiMPP_VERSION_S {
79    HI_CHAR aVersion[VERSION_NAME_MAXLEN];
80} MPP_VERSION_S;
81
82typedef HI_S32 AI_CHN;
83typedef HI_S32 AO_CHN;
84typedef HI_S32 AENC_CHN;
85typedef HI_S32 ADEC_CHN;
86typedef HI_S32 AUDIO_DEV;
87typedef HI_S32 VI_DEV;
88typedef HI_S32 VI_PIPE;
89typedef HI_S32 VI_CHN;
90typedef HI_S32 VI_STITCH_GRP;
91typedef HI_S32 VI_MCF_GRP;
92typedef HI_S32 VO_DEV;
93typedef HI_S32 VO_LAYER;
94typedef HI_S32 VO_CHN;
95typedef HI_S32 VO_WBC;
96typedef HI_S32 GRAPHIC_LAYER;
97typedef HI_S32 VENC_CHN;
98typedef HI_S32 VDEC_CHN;
99typedef HI_S32 IVE_HANDLE;
100typedef HI_S32 CLS_HANDLE;
101typedef HI_S32 FD_CHN;
102typedef HI_S32 MD_CHN;
103typedef HI_S32 ISP_DEV;
104typedef HI_S32 BLK_DEV;
105typedef HI_S32 SENSOR_ID;
106typedef HI_S32 MIPI_DEV;
107typedef HI_S32 SLAVE_DEV;
108typedef HI_S32 SVP_NNIE_HANDLE;
109typedef HI_S32 SVP_DSP_HANDLE;
110typedef HI_S32 SVP_ALG_CHN;
111typedef HI_S32 VPSS_GRP;
112typedef HI_S32 VPSS_GRP_PIPE;
113typedef HI_S32 VPSS_CHN;
114typedef HI_S32 AVS_GRP;
115typedef HI_S32 AVS_PIPE;
116typedef HI_S32 AVS_CHN;
117typedef HI_S32 MCF_GRP;
118typedef HI_S32 MCF_PIPE;
119typedef HI_S32 MCF_CHN;
120
121#define HI_INVALID_CHN         (-1)
122#define HI_INVALID_WAY         (-1)
123#define HI_INVALID_LAYER       (-1)
124#define HI_INVALID_DEV         (-1)
125#define HI_INVALID_HANDLE      (-1)
126#define HI_INVALID_VALUE       (-1)
127#define HI_INVALID_TYPE        (-1)
128
129#define CCM_MATRIX_SIZE        (9)
130#define CCM_MATRIX_NUM         (7)
131
132#define CLUT_R_NUM             (17)
133#define CLUT_B_NUM             (17)
134#define CLUT_G_NUM             (17)
135#define HI_ISP_CLUT_COEFACMCNT (4850)
136#define CUBIC_POINT_MAX        (5)
137
138typedef enum hiMOD_ID_E {
139    HI_ID_CMPI    = 0,
140    HI_ID_VB      = 1,
141    HI_ID_SYS     = 2,
142    HI_ID_RGN      = 3,
143    HI_ID_CHNL    = 4,
144    HI_ID_VDEC    = 5,
145    HI_ID_AVS     = 6,
146    HI_ID_VPSS    = 7,
147    HI_ID_VENC    = 8,
148    HI_ID_SVP     = 9,
149    HI_ID_H264E   = 10,
150    HI_ID_JPEGE   = 11,
151    HI_ID_MPEG4E  = 12,
152    HI_ID_H265E   = 13,
153    HI_ID_JPEGD   = 14,
154    HI_ID_VO      = 15,
155    HI_ID_VI      = 16,
156    HI_ID_DIS     = 17,
157    HI_ID_VALG    = 18,
158    HI_ID_RC      = 19,
159    HI_ID_AIO     = 20,
160    HI_ID_AI      = 21,
161    HI_ID_AO      = 22,
162    HI_ID_AENC    = 23,
163    HI_ID_ADEC    = 24,
164    HI_ID_VPU    = 25,
165    HI_ID_PCIV    = 26,
166    HI_ID_PCIVFMW = 27,
167    HI_ID_ISP      = 28,
168    HI_ID_IVE      = 29,
169    HI_ID_USER    = 30,
170    HI_ID_DCCM    = 31,
171    HI_ID_DCCS    = 32,
172    HI_ID_PROC    = 33,
173    HI_ID_LOG     = 34,
174    HI_ID_VFMW    = 35,
175    HI_ID_H264D   = 36,
176    HI_ID_GDC     = 37,
177    HI_ID_PHOTO   = 38,
178    HI_ID_FB      = 39,
179    HI_ID_HDMI    = 40,
180    HI_ID_VOIE    = 41,
181    HI_ID_TDE     = 42,
182    HI_ID_HDR      = 43,
183    HI_ID_PRORES  = 44,
184    HI_ID_VGS     = 45,
185    HI_ID_IOP     = 46,
186    HI_ID_FD      = 47,
187    HI_ID_ODT      = 48, /* Object detection trace */
188    HI_ID_VQA      = 49, /* Video quality  analysis */
189    HI_ID_LPR      = 50, /* Object detection trace */
190    HI_ID_SVP_NNIE     = 51,
191    HI_ID_SVP_DSP      = 52,
192    HI_ID_DPU_RECT     = 53,
193    HI_ID_DPU_MATCH    = 54,
194    HI_ID_MOTIONSENSOR = 55,
195    HI_ID_MOTIONFUSION = 56,
196    HI_ID_GYRODIS      = 57,
197    HI_ID_PM           = 58,
198    HI_ID_SVP_ALG      = 59,
199    HI_ID_IVP          = 60,
200    HI_ID_MCF          = 61,
201    HI_ID_QR           = 62,
202    HI_ID_FR           = 63,
203    HI_ID_LED          = 64,
204    HI_ID_PQ_AI        = 65,
205    HI_ID_BUTT,
206} MOD_ID_E;
207
208typedef struct hiMPP_CHN_S {
209    MOD_ID_E    enModId;
210    HI_S32      s32DevId;
211    HI_S32      s32ChnId;
212} MPP_CHN_S;
213
214#define MPP_MOD_VI             "vi"
215#define MPP_MOD_VO             "vo"
216#define MPP_MOD_AVS            "avs"
217#define MPP_MOD_HDMI           "hdmi"
218#define MPP_MOD_VGS            "vgs"
219#define MPP_MOD_GDC            "gdc"
220#define MPP_MOD_DIS            "dis"
221#define MPP_MOD_GYRODIS        "gyrodis"
222
223#define MPP_MOD_CHNL           "chnl"
224#define MPP_MOD_VENC           "venc"
225#define MPP_MOD_VPSS           "vpss"
226#define MPP_MOD_RGN            "rgn"
227#define MPP_MOD_IVE            "ive"
228#define MPP_MOD_FD             "fd"
229#define MPP_MOD_MD             "md"
230#define MPP_MOD_IVP            "ivp"
231#define MPP_MOD_SVP            "svp"
232#define MPP_MOD_SVP_NNIE       "nnie"
233#define MPP_MOD_SVP_DSP        "dsp"
234#define MPP_MOD_SVP_ALG        "svp_alg"
235#define MPP_MOD_DPU_RECT       "rect"
236#define MPP_MOD_DPU_MATCH      "match"
237
238#define MPP_MOD_H264E          "h264e"
239#define MPP_MOD_H265E          "h265e"
240#define MPP_MOD_JPEGE          "jpege"
241#define MPP_MOD_MPEG4E         "mpeg4e"
242#define MPP_MOD_VEDU           "vedu"
243#define MPP_MOD_PRORES         "prores"
244#define MPP_MOD_IOP            "iop"
245
246
247#define MPP_MOD_VDEC           "vdec"
248#define MPP_MOD_H264D          "h264d"
249#define MPP_MOD_JPEGD          "jpegd"
250
251#define MPP_MOD_AI             "ai"
252#define MPP_MOD_AO             "ao"
253#define MPP_MOD_AENC           "aenc"
254#define MPP_MOD_ADEC           "adec"
255#define MPP_MOD_AIO            "aio"
256#define MPP_MOD_ACODEC         "acodec"
257
258#define MPP_MOD_VB             "vb"
259#define MPP_MOD_SYS            "sys"
260#define MPP_MOD_CMPI           "cmpi"
261
262#define MPP_MOD_PCIV           "pciv"
263#define MPP_MOD_PCIVFMW        "pcivfmw"
264
265#define MPP_MOD_PROC           "proc"
266#define MPP_MOD_LOG            "logmpp"
267
268#define MPP_MOD_DCCM           "dccm"
269#define MPP_MOD_DCCS           "dccs"
270
271#define MPP_MOD_FB             "fb"
272
273#define MPP_MOD_RC             "rc"
274
275#define MPP_MOD_VOIE           "voie"
276
277#define MPP_MOD_TDE            "tde"
278#define MPP_MOD_ISP            "isp"
279#define MPP_MOD_USR            "usr"
280#define MPP_MOD_MCF            "mcf"
281#define MPP_MOD_PM             "pm"
282#define MPP_MOD_MFUSION        "motionfusion"
283
284
285/* We just copy this value of payload type from RTP/RTSP definition */
286typedef enum {
287    PT_PCMU          = 0,
288    PT_1016          = 1,
289    PT_G721          = 2,
290    PT_GSM           = 3,
291    PT_G723          = 4,
292    PT_DVI4_8K       = 5,
293    PT_DVI4_16K      = 6,
294    PT_LPC           = 7,
295    PT_PCMA          = 8,
296    PT_G722          = 9,
297    PT_S16BE_STEREO  = 10,
298    PT_S16BE_MONO    = 11,
299    PT_QCELP         = 12,
300    PT_CN            = 13,
301    PT_MPEGAUDIO     = 14,
302    PT_G728          = 15,
303    PT_DVI4_3        = 16,
304    PT_DVI4_4        = 17,
305    PT_G729          = 18,
306    PT_G711A         = 19,
307    PT_G711U         = 20,
308    PT_G726          = 21,
309    PT_G729A         = 22,
310    PT_LPCM          = 23,
311    PT_CelB          = 25,
312    PT_JPEG          = 26,
313    PT_CUSM          = 27,
314    PT_NV            = 28,
315    PT_PICW          = 29,
316    PT_CPV           = 30,
317    PT_H261          = 31,
318    PT_MPEGVIDEO     = 32,
319    PT_MPEG2TS       = 33,
320    PT_H263          = 34,
321    PT_SPEG          = 35,
322    PT_MPEG2VIDEO    = 36,
323    PT_AAC           = 37,
324    PT_WMA9STD       = 38,
325    PT_HEAAC         = 39,
326    PT_PCM_VOICE     = 40,
327    PT_PCM_AUDIO     = 41,
328    PT_MP3           = 43,
329    PT_ADPCMA        = 49,
330    PT_AEC           = 50,
331    PT_X_LD          = 95,
332    PT_H264          = 96,
333    PT_D_GSM_HR      = 200,
334    PT_D_GSM_EFR     = 201,
335    PT_D_L8          = 202,
336    PT_D_RED         = 203,
337    PT_D_VDVI        = 204,
338    PT_D_BT656       = 220,
339    PT_D_H263_1998   = 221,
340    PT_D_MP1S        = 222,
341    PT_D_MP2P        = 223,
342    PT_D_BMPEG       = 224,
343    PT_MP4VIDEO      = 230,
344    PT_MP4AUDIO      = 237,
345    PT_VC1           = 238,
346    PT_JVC_ASF       = 255,
347    PT_D_AVI         = 256,
348    PT_DIVX3         = 257,
349    PT_AVS           = 258,
350    PT_REAL8         = 259,
351    PT_REAL9         = 260,
352    PT_VP6           = 261,
353    PT_VP6F          = 262,
354    PT_VP6A          = 263,
355    PT_SORENSON      = 264,
356    PT_H265          = 265,
357    PT_VP8           = 266,
358    PT_MVC           = 267,
359    PT_PNG           = 268,
360    /* add by hisilicon */
361    PT_AMR           = 1001,
362    PT_MJPEG         = 1002,
363    PT_AMRWB         = 1003,
364    PT_PRORES        = 1006,
365    PT_OPUS          = 1007,
366    PT_BUTT
367} PAYLOAD_TYPE_E;
368
369#ifdef __cplusplus
370#if __cplusplus
371}
372#endif
373#endif /* End of #ifdef __cplusplus */
374
375#endif /* _HI_COMMON_H_ */
376
377