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