xref: /aosp_15_r20/external/intel-media-driver/cmrtlib/linux/share/cm_rt_def_os.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2017, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file      cm_rt_def_os.h
24 //! \brief     Contains linux-specific Definitions for CM
25 //!
26 
27 #ifndef __CM_RT_DEF_OS_H__
28 #define __CM_RT_DEF_OS_H__
29 
30 #include <time.h>
31 #include <va/va.h>
32 
33 #define _tmain main
34 
35 #include <stdio.h>
36 #include <stdlib.h>
37 #include <stdint.h>
38 #include <math.h>
39 #include <malloc.h>
40 #include <string.h>
41 #include <sys/time.h>
42 #include <pthread.h>
43 #include <x86intrin.h>
44 #include <iostream>
45 
46 #ifndef CM_NOINLINE
47     #define CM_NOINLINE __attribute__((noinline))
48 #endif
49 
50 typedef int BOOL;
51 typedef char byte;
52 typedef unsigned char BYTE;
53 typedef unsigned int UINT32;
54 typedef UINT32 DWORD;
55 typedef int INT;
56 typedef unsigned int UINT;
57 typedef signed char INT8;
58 typedef unsigned char UINT8;
59 typedef signed short INT16;
60 typedef unsigned short UINT16;
61 typedef signed int INT32;
62 typedef signed long long INT64;
63 typedef unsigned long long UINT64;
64 
65 typedef enum _VACMTEXTUREADDRESS {
66     VACMTADDRESS_WRAP            = 1,
67     VACMTADDRESS_MIRROR          = 2,
68     VACMTADDRESS_CLAMP           = 3,
69     VACMTADDRESS_BORDER          = 4,
70     VACMTADDRESS_MIRRORONCE      = 5,
71 
72     VACMTADDRESS_FORCE_DWORD     = 0x7fffffff
73 } VACMTEXTUREADDRESS;
74 
75 typedef enum _VACMTEXTUREFILTERTYPE {
76     VACMTEXF_NONE            = 0,
77     VACMTEXF_POINT           = 1,
78     VACMTEXF_LINEAR          = 2,
79     VACMTEXF_ANISOTROPIC     = 3,
80     VACMTEXF_FLATCUBIC       = 4,
81     VACMTEXF_GAUSSIANCUBIC   = 5,
82     VACMTEXF_PYRAMIDALQUAD   = 6,
83     VACMTEXF_GAUSSIANQUAD    = 7,
84     VACMTEXF_CONVOLUTIONMONO = 8,    // Convolution filter for monochrome textures
85     VACMTEXF_FORCE_DWORD     = 0x7fffffff
86 } VACMTEXTUREFILTERTYPE;
87 
88 #define CM_ATTRIBUTE(attribute) __attribute__((attribute))
89 
90 typedef enum _VA_CM_FORMAT {
91 
92     VA_CM_FMT_UNKNOWN              =   0,
93 
94     VA_CM_FMT_A8R8G8B8             =  21,
95     VA_CM_FMT_X8R8G8B8             =  22,
96     VA_CM_FMT_A8                   =  28,
97     VA_CM_FMT_A2B10G10R10          =  31,
98     VA_CM_FMT_A8B8G8R8             =  32,
99     VA_CM_FMT_R16G16UN             =  35,
100     VA_CM_FMT_A16B16G16R16         =  36,
101     VA_CM_FMT_A8P8                 =  40,
102     VA_CM_FMT_P8                   =  41,
103     VA_CM_FMT_R32U                 =  42,
104     VA_CM_FMT_R8G8UN               =  49,
105     VA_CM_FMT_L8                   =  50,
106     VA_CM_FMT_A8L8                 =  51,
107     VA_CM_FMT_R16UN                =  56,
108     VA_CM_FMT_R16U                 =  57,
109     VA_CM_FMT_V8U8                 =  60,
110     VA_CM_FMT_R8UN                 =  61,
111     VA_CM_FMT_R8U                  =  62,
112     VA_CM_FMT_R32S                 =  71,
113     VA_CM_FMT_D16                  =  80,
114     VA_CM_FMT_L16                  =  81,
115     VA_CM_FMT_R16F                 = 111,
116     VA_CM_FMT_IA44                 = 112,
117     VA_CM_FMT_A16B16G16R16F        = 113,
118     VA_CM_FMT_R32F                 = 114,
119     VA_CM_FMT_R32G32B32A32F        = 115,
120     VA_CM_FMT_I420                 =  VA_FOURCC('I','4','2','0'),
121     VA_CM_FMT_P216                 =  VA_FOURCC('P','2','1','6'),
122     VA_CM_FMT_400P                 =  VA_FOURCC('4','0','0','P'),
123     VA_CM_FMT_Y8UN                 =  VA_FOURCC('Y','8','U','N'),
124     VA_CM_FMT_NV12                 =  VA_FOURCC_NV12,
125     VA_CM_FMT_UYVY                 =  VA_FOURCC_UYVY,
126     VA_CM_FMT_YUY2                 =  VA_FOURCC_YUY2,
127     VA_CM_FMT_444P                 =  VA_FOURCC_444P,
128     VA_CM_FMT_411P                 =  VA_FOURCC_411P,
129     VA_CM_FMT_422H                 =  VA_FOURCC_422H,
130     VA_CM_FMT_422V                 =  VA_FOURCC_422V,
131     VA_CM_FMT_411R                 =  VA_FOURCC_411R,
132     VA_CM_FMT_RGBP                 =  VA_FOURCC_RGBP,
133     VA_CM_FMT_BGRP                 =  VA_FOURCC_BGRP,
134     VA_CM_FMT_IMC3                 =  VA_FOURCC_IMC3,
135     VA_CM_FMT_YV12                 =  VA_FOURCC_YV12,
136     VA_CM_FMT_P010                 =  VA_FOURCC_P010,
137     VA_CM_FMT_P012                 =  VA_FOURCC_P012,
138     VA_CM_FMT_P016                 =  VA_FOURCC_P016,
139     VA_CM_FMT_P208                 =  VA_FOURCC_P208,
140     VA_CM_FMT_AYUV                 =  VA_FOURCC_AYUV,
141 #if VA_CHECK_VERSION(1, 13, 0)
142     VA_CM_FMT_XYUV                 =  VA_FOURCC_XYUV,
143 #endif
144     VA_CM_FMT_Y210                 =  VA_FOURCC_Y210,
145 #if VA_CHECK_VERSION(1, 9, 0)
146     VA_CM_FMT_Y212                 =  VA_FOURCC_Y212,
147 #endif
148     VA_CM_FMT_Y410                 =  VA_FOURCC_Y410,
149 #if VA_CHECK_VERSION(1, 9, 0)
150     VA_CM_FMT_Y412                 =  VA_FOURCC_Y412,
151 #endif
152     VA_CM_FMT_Y216                 =  VA_FOURCC_Y216,
153     VA_CM_FMT_Y416                 =  VA_FOURCC_Y416,
154     VA_CM_FMT_AI44                 =  VA_FOURCC_AI44,
155 
156     VA_CM_FMT_MAX                  =  0xFFFFFFFF
157 } VA_CM_FORMAT;
158 
159 template<typename T>
160 inline const char * CM_TYPE_NAME_UNMANGLED();
161 
162 template<> inline const char * CM_TYPE_NAME_UNMANGLED<char>() { return "char"; }
163 template<> inline const char * CM_TYPE_NAME_UNMANGLED<signed char>() { return "signed char"; }
164 template<> inline const char * CM_TYPE_NAME_UNMANGLED<unsigned char>() { return "unsigned char"; }
165 template<> inline const char * CM_TYPE_NAME_UNMANGLED<short>() { return "short"; }
166 template<> inline const char * CM_TYPE_NAME_UNMANGLED<unsigned short>() { return "unsigned short"; }
167 template<> inline const char * CM_TYPE_NAME_UNMANGLED<int>() { return "int"; }
168 template<> inline const char * CM_TYPE_NAME_UNMANGLED<unsigned int>() { return "unsigned int"; }
169 template<> inline const char * CM_TYPE_NAME_UNMANGLED<long>() { return "long"; }
170 template<> inline const char * CM_TYPE_NAME_UNMANGLED<unsigned long>() { return "unsigned long"; }
171 template<> inline const char * CM_TYPE_NAME_UNMANGLED<float>() { return "float"; }
172 template<> inline const char * CM_TYPE_NAME_UNMANGLED<double>() { return "double"; }
173 
174 #define CM_TYPE_NAME(type)   CM_TYPE_NAME_UNMANGLED<type>()
175 
CM_ALIGNED_MALLOC(size_t size,size_t alignment)176 inline void * CM_ALIGNED_MALLOC(size_t size, size_t alignment)
177 {
178   return memalign(alignment, size);
179 }
180 
CM_ALIGNED_FREE(void * memory)181 inline void CM_ALIGNED_FREE(void * memory)
182 {
183   free(memory);
184 }
185 
186 //multi-thread API:
187 #define THREAD_HANDLE pthread_t
CM_THREAD_CREATE(THREAD_HANDLE * handle,void * start_routine,void * arg)188 inline void CM_THREAD_CREATE(THREAD_HANDLE *handle, void * start_routine, void * arg)
189 {
190     int err = 0;
191     err = pthread_create(handle , NULL, (void * (*)(void *))start_routine, arg);
192     if (err) {
193         printf(" cm create thread failed! \n");
194         exit(-1);
195     }
196 }
CM_THREAD_EXIT(void * retval)197 inline void CM_THREAD_EXIT(void * retval)
198 {
199     pthread_exit(retval);
200 }
201 
CM_THREAD_JOIN(THREAD_HANDLE * handle_array,int thread_cnt)202 inline int CM_THREAD_JOIN(THREAD_HANDLE *handle_array, int thread_cnt)
203 {
204     void *tret;
205     for(int i = 0; i < thread_cnt; i++)
206     {
207         pthread_join( handle_array[i], &tret);
208     }
209     return 0;
210 }
211 
212 #define CM_SURFACE_FORMAT                       VA_CM_FORMAT
213 
214 #define CM_SURFACE_FORMAT_UNKNOWN               VA_CM_FMT_UNKNOWN
215 #define CM_SURFACE_FORMAT_A8R8G8B8              VA_CM_FMT_A8R8G8B8
216 #define CM_SURFACE_FORMAT_X8R8G8B8              VA_CM_FMT_X8R8G8B8
217 #define CM_SURFACE_FORMAT_A8B8G8R8              VA_CM_FMT_A8B8G8R8
218 #define CM_SURFACE_FORMAT_A8                    VA_CM_FMT_A8
219 #define CM_SURFACE_FORMAT_P8                    VA_CM_FMT_P8
220 #define CM_SURFACE_FORMAT_R32F                  VA_CM_FMT_R32F
221 #define CM_SURFACE_FORMAT_NV12                  VA_CM_FMT_NV12
222 #define CM_SURFACE_FORMAT_UYVY                  VA_CM_FMT_UYVY
223 #define CM_SURFACE_FORMAT_YUY2                  VA_CM_FMT_YUY2
224 #define CM_SURFACE_FORMAT_V8U8                  VA_CM_FMT_V8U8
225 
226 #define CM_SURFACE_FORMAT_R8_UINT               VA_CM_FMT_R8U
227 #define CM_SURFACE_FORMAT_R16_UINT              VA_CM_FMT_R16U
228 #define CM_SURFACE_FORMAT_R16_SINT              VA_CM_FMT_A8L8
229 #define CM_SURFACE_FORMAT_D16                   VA_CM_FMT_D16
230 #define CM_SURFACE_FORMAT_L16                   VA_CM_FMT_L16
231 #define CM_SURFACE_FORMAT_A16B16G16R16          VA_CM_FMT_A16B16G16R16
232 #define CM_SURFACE_FORMAT_R10G10B10A2           VA_CM_FMT_A2B10G10R10
233 #define CM_SURFACE_FORMAT_A16B16G16R16F         VA_CM_FMT_A16B16G16R16F
234 #define CM_SURFACE_FORMAT_R32G32B32A32F         VA_CM_FMT_R32G32B32A32F
235 
236 #define CM_SURFACE_FORMAT_444P                  VA_CM_FMT_444P
237 #define CM_SURFACE_FORMAT_422H                  VA_CM_FMT_422H
238 #define CM_SURFACE_FORMAT_422V                  VA_CM_FMT_422V
239 #define CM_SURFACE_FORMAT_411P                  VA_CM_FMT_411P
240 #define CM_SURFACE_FORMAT_411R                  VA_CM_FMT_411R
241 #define CM_SURFACE_FORMAT_RGBP                  VA_CM_FMT_RGBP
242 #define CM_SURFACE_FORMAT_BGRP                  VA_CM_FMT_BGRP
243 #define CM_SURFACE_FORMAT_IMC3                  VA_CM_FMT_IMC3
244 #define CM_SURFACE_FORMAT_YV12                  VA_CM_FMT_YV12
245 #define CM_SURFACE_FORMAT_P010                  VA_CM_FMT_P010
246 #define CM_SURFACE_FORMAT_P016                  VA_CM_FMT_P016
247 #define CM_SURFACE_FORMAT_P208                  VA_CM_FMT_P208
248 #define CM_SURFACE_FORMAT_AYUV                  VA_CM_FMT_AYUV
249 #define CM_SURFACE_FORMAT_Y210                  VA_CM_FMT_Y210
250 #define CM_SURFACE_FORMAT_Y410                  VA_CM_FMT_Y410
251 #define CM_SURFACE_FORMAT_Y216                  VA_CM_FMT_Y216
252 #define CM_SURFACE_FORMAT_Y416                  VA_CM_FMT_Y416
253 
254 #define CM_SURFACE_FORMAT_IA44                  VA_CM_FMT_IA44
255 #define CM_SURFACE_FORMAT_AI44                  VA_CM_FMT_AI44
256 #define CM_SURFACE_FORMAT_I420                  VA_CM_FMT_I420
257 #define CM_SURFACE_FORMAT_P216                  VA_CM_FMT_P216
258 #define CM_SURFACE_FORMAT_400P                  VA_CM_FMT_400P
259 #define CM_SURFACE_FORMAT_R16_FLOAT             VA_CM_FMT_R16F
260 #define CM_SURFACE_FORMAT_Y8_UNORM              VA_CM_FMT_Y8UN
261 #define CM_SURFACE_FORMAT_A8P8                  VA_CM_FMT_A8P8
262 #define CM_SURFACE_FORMAT_R32_SINT              VA_CM_FMT_R32S
263 #define CM_SURFACE_FORMAT_R32_UINT              VA_CM_FMT_R32U
264 #define CM_SURFACE_FORMAT_R8G8_UNORM            VA_CM_FMT_R8G8UN
265 #define CM_SURFACE_FORMAT_R8_UNORM              VA_CM_FMT_R8UN
266 #define CM_SURFACE_FORMAT_R16G16_UNORM          VA_CM_FMT_R16G16UN
267 #define CM_SURFACE_FORMAT_R16_UNORM             VA_CM_FMT_R16UN
268 
269 
270 #define CM_TEXTURE_ADDRESS_TYPE                 VACMTEXTUREADDRESS
271 #define CM_TEXTURE_ADDRESS_WRAP                 VACMTADDRESS_WRAP
272 #define CM_TEXTURE_ADDRESS_MIRROR               VACMTADDRESS_MIRROR
273 #define CM_TEXTURE_ADDRESS_CLAMP                VACMTADDRESS_CLAMP
274 #define CM_TEXTURE_ADDRESS_BORDER               VACMTADDRESS_BORDER
275 #define CM_TEXTURE_ADDRESS_MIRRORONCE           VACMTADDRESS_MIRRORONCE
276 
277 #define CM_TEXTURE_FILTER_TYPE                  VACMTEXTUREFILTERTYPE
278 #define CM_TEXTURE_FILTER_TYPE_NONE             VACMTEXF_NONE
279 #define CM_TEXTURE_FILTER_TYPE_POINT            VACMTEXF_POINT
280 #define CM_TEXTURE_FILTER_TYPE_LINEAR           VACMTEXF_LINEAR
281 #define CM_TEXTURE_FILTER_TYPE_ANISOTROPIC      VACMTEXF_ANISOTROPIC
282 #define CM_TEXTURE_FILTER_TYPE_FLATCUBIC        VACMTEXF_FLATCUBIC
283 #define CM_TEXTURE_FILTER_TYPE_GAUSSIANCUBIC    VACMTEXF_GAUSSIANCUBIC
284 #define CM_TEXTURE_FILTER_TYPE_PYRAMIDALQUAD    VACMTEXF_PYRAMIDALQUAD
285 #define CM_TEXTURE_FILTER_TYPE_GAUSSIANQUAD     VACMTEXF_GAUSSIANQUAD
286 #define CM_TEXTURE_FILTER_TYPE_CONVOLUTIONMONO  VACMTEXF_CONVOLUTIONMONO
287 
288 /* Surrport for common-used data type */
289 #define  _TCHAR char
290 #define __cdecl
291 #ifndef TRUE
292 #define TRUE 1
293 #endif
294 
295 typedef int HKEY;
296 
297 typedef unsigned int uint;
298 typedef unsigned int* PUINT;
299 
300 typedef float FLOAT;
301 typedef unsigned long long DWORDLONG;
302 #ifndef ULONG_PTR
303     #define ULONG_PTR unsigned long
304 #endif
305 
306 /* Handle Type */
307 typedef void *HMODULE;
308 typedef void *HINSTANCE;
309 typedef int HANDLE;
310 typedef void *PVOID;
311 typedef int WINBOOL;
312 typedef BOOL *PBOOL;
313 typedef unsigned long ULONG;
314 typedef ULONG *PULONG;
315 typedef unsigned short USHORT;
316 typedef USHORT *PUSHORT;
317 typedef unsigned char UCHAR;
318 typedef UCHAR *PUCHAR;
319 typedef char CHAR;
320 typedef short SHORT;
321 typedef long LONG;
322 typedef double DOUBLE;
323 
324 #define __int8 char
325 #define __int16 short
326 #define __int32 int
327 #define __int64 long long
328 
329 typedef unsigned short WORD;
330 typedef float FLOAT;
331 typedef FLOAT *PFLOAT;
332 typedef BYTE *PBYTE;
333 typedef int *PINT;
334 typedef WORD *PWORD;
335 typedef DWORD *PDWORD;
336 typedef unsigned int *PUINT;
337 typedef LONG HRESULT;
338 typedef long long LONGLONG;
339 
340 typedef union _LARGE_INTEGER {
341     struct {
342         uint32_t LowPart;
343         int32_t HighPart;
344     } u;
345     int64_t QuadPart;
346 } LARGE_INTEGER;
347 
348 //Performance
349 EXTERN_C INT QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
350 EXTERN_C INT QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);
351 
352 struct BITMAPFILEHEADER
353 {
354   WORD  bfType;
355   DWORD bfSize;
356   WORD  bfReserved1;
357   WORD  bfReserved2;
358   DWORD bfOffBits;
359 }  __attribute__((packed)) ;
360 
361 struct BITMAPINFOHEADER
362 {
363   DWORD biSize;
364   DWORD  biWidth;
365   DWORD  biHeight;
366   WORD  biPlanes;
367   WORD  biBitCount;
368   DWORD biCompression;
369   DWORD biSizeImage;
370   DWORD  biXPelsPerMeter;
371   DWORD  biYPelsPerMeter;
372   DWORD biClrUsed;
373   DWORD biClrImportant;
374 };
375 
376 struct RGBQUAD
377 {
378   BYTE rgbBlue;
379   BYTE rgbGreen;
380   BYTE rgbRed;
381   BYTE rgbReserved;
382 };
383 
384 #define CM_KERNEL_FUNCTION2(...) #__VA_ARGS__
385 #define _NAME(...) #__VA_ARGS__
386 
387 #endif //__CM_RT_DEF_OS_H__
388