Merge pull request #206 from cptspiff/remove-convutils
[vuplus_xbmc] / xbmc / linux / PlatformDefs.h
1 #ifndef __PLATFORM_DEFS_H__
2 #define __PLATFORM_DEFS_H__
3
4 /*
5  *      Copyright (C) 2005-2008 Team XBMC
6  *      http://www.xbmc.org
7  *
8  *  This Program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2, or (at your option)
11  *  any later version.
12  *
13  *  This Program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with XBMC; see the file COPYING.  If not, write to
20  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21  *  http://www.gnu.org/copyleft/gpl.html
22  *
23  */
24
25 #ifdef _LINUX
26
27 #define LINE_ENDING "\n"
28
29 #ifndef _LARGEFILE64_SOURCE
30 #define _LARGEFILE64_SOURCE
31 #endif
32
33 #undef _FILE_OFFSET_BITS
34 #define _FILE_OFFSET_BITS 64
35
36 #include <sys/types.h>
37 #include <sys/stat.h>
38 #include <fcntl.h>
39 #include <unistd.h>
40 #include <pthread.h>
41 #include <string.h>
42 #ifdef __APPLE__
43 #include <stdio.h>
44 #include <sys/sysctl.h>
45 #include <mach/mach.h>
46 #else
47 #include <sys/sysinfo.h>
48 #endif
49 #include <sys/time.h>
50 #include <time.h>
51 #endif
52
53 // do not move this, it will break osx build bad"
54 #ifdef HAS_SDL
55 #include <SDL/SDL.h>
56 #endif
57
58 #if defined(__ppc__) || defined(__powerpc__)
59 #define PIXEL_ASHIFT 0
60 #define PIXEL_RSHIFT 8
61 #define PIXEL_GSHIFT 16
62 #define PIXEL_BSHIFT 24
63 #define AMASK 0x000000ff
64 #define RMASK 0x0000ff00
65 #define GMASK 0x00ff0000
66 #define BMASK 0xff000000
67 #else
68 #define PIXEL_ASHIFT 24
69 #define PIXEL_RSHIFT 16
70 #define PIXEL_GSHIFT 8
71 #define PIXEL_BSHIFT 0
72 #define AMASK 0xff000000
73 #define RMASK 0x00ff0000
74 #define GMASK 0x0000ff00
75 #define BMASK 0x000000ff
76 #endif
77
78 #include <stdint.h>
79
80 #ifndef PRId64
81 #ifdef _MSC_VER
82 #define PRId64 "I64d"
83 #else
84 #if __WORDSIZE == 64
85 #define PRId64 "ld"
86 #else
87 #define PRId64 "lld"
88 #endif
89 #endif
90 #endif
91
92 #ifndef PRIu64
93 #ifdef _MSC_VER
94 #define PRIu64 "I64u"
95 #else
96 #if __WORDSIZE == 64
97 #define PRIu64 "lu"
98 #else
99 #define PRIu64 "llu"
100 #endif
101 #endif
102 #endif
103         
104 #ifndef PRIx64
105 #ifdef _MSC_VER
106 #define PRIx64 "I64x"
107 #else
108 #if __WORDSIZE == 64
109 #define PRIx64 "lx"
110 #else
111 #define PRIx64 "llx"
112 #endif
113 #endif
114 #endif
115
116 #ifndef PRIdS
117 #define PRIdS "zd"
118 #endif
119
120 #ifndef PRIuS
121 #define PRIuS "zu"
122 #endif
123
124 #ifdef _LINUX
125
126 #define XXLog(a,b) printf("%s", (b))
127
128 #ifndef INSTALL_PATH
129 #define INSTALL_PATH    "/usr/share/xbmc"
130 #endif
131
132 #ifndef BIN_INSTALL_PATH
133 #define BIN_INSTALL_PATH "/usr/lib/xbmc"
134 #endif
135
136 #define CONST   const
137 #define FALSE   0
138 #define TRUE    1
139
140 #define _fdopen fdopen
141 #define _vsnprintf vsnprintf
142 #define _stricmp  strcasecmp
143 #define stricmp   strcasecmp
144 #define strcmpi strcasecmp
145 #define strnicmp  strncasecmp
146 #define _atoi64(x) atoll(x)
147 #define CopyMemory(dst,src,size) memmove(dst, src, size)
148 #define ZeroMemory(dst,size) memset(dst, 0, size)
149
150 #define VOID    void
151 #define byte    unsigned char
152 #define __int8    char
153 #define __int16   short
154 #define __int32   int
155 #define __int64   long long
156 #define __uint64  unsigned long long
157
158 #if defined(__x86_64__) || defined(__powerpc__) || defined(__ppc__) || defined (__arm__) // should this be powerpc64 only?
159 #define __stdcall
160 #else /* !__x86_64__ */
161 #define __stdcall   __attribute__((__stdcall__))
162 #endif /* __x86_64__ */
163 #define __cdecl
164 #define WINBASEAPI
165 #define NTAPI       __stdcall
166 #define CALLBACK    __stdcall
167 #define WINAPI      __stdcall
168 #define WINAPIV     __cdecl
169 #ifndef __APPLE__
170 #define APIENTRY    WINAPI
171 #else
172 #define APIENTRY
173 #endif
174 #define APIPRIVATE  __stdcall
175 #define IN
176 #define OUT
177 #define OPTIONAL
178 #define _declspec(X)
179 #define __declspec(X)
180
181 #define __try try
182 #define EXCEPTION_EXECUTE_HANDLER ...
183 //NOTE: dont try to define __except because it breaks g++ (already uses it).
184
185 typedef pthread_t ThreadIdentifier;
186
187 struct CXHandle; // forward declaration
188 typedef CXHandle* HANDLE;
189
190 typedef void* HINSTANCE;
191 typedef void* HMODULE;
192
193 typedef unsigned int  DWORD;
194 typedef unsigned short  WORD;
195 typedef unsigned char   BYTE;
196 typedef char        CHAR;
197 typedef unsigned char UCHAR;
198 typedef wchar_t     WCHAR;
199 typedef int         BOOL;
200 typedef BYTE        BOOLEAN;
201 typedef short       SHORT;
202 typedef unsigned short  USHORT;
203 typedef int         INT;
204 typedef unsigned int  UINT;
205 // typedef int INT32;              // unused; must match Xmd.h but why bother
206 typedef unsigned int  UINT32;
207 typedef long long     INT64;
208 typedef unsigned long long    UINT64;
209 typedef long        LONG;
210 typedef long long     LONGLONG;
211 typedef unsigned long   ULONG;
212 typedef float         FLOAT;
213 typedef size_t        SIZE_T;
214 typedef void*         PVOID;
215 typedef void*         LPVOID;
216 //typedef PVOID         HANDLE;
217 #define INVALID_HANDLE_VALUE     ((HANDLE)~0U)
218 typedef HANDLE        HDC;
219 typedef void*       HWND;
220 typedef LONG        HRESULT;
221 typedef BYTE*       LPBYTE;
222 typedef DWORD*        LPDWORD;
223 typedef CONST CHAR*   LPCSTR;
224 typedef CONST WCHAR*    LPCWSTR;
225 typedef CHAR*     LPTSTR;
226 typedef WCHAR         *PWSTR,      *LPWSTR,    *NWPSTR;
227 typedef CHAR            *PSTR,       *LPSTR,     *NPSTR;
228 typedef LONG        *PLONG, *LPLONG;
229 #ifdef UNICODE
230 typedef LPCWSTR       LPCTSTR;
231 #else
232 typedef LPCSTR      LPCTSTR;
233 #endif
234 typedef unsigned __int64 ULONGLONG;
235 typedef long        LONG_PTR;
236 typedef unsigned long   ULONG_PTR;
237 typedef ULONG_PTR     DWORD_PTR;
238 typedef __int64     __time64_t;
239 typedef intptr_t (*FARPROC)(void);
240
241 #define MAXWORD   0xffff
242 #define MAXDWORD  0xffffffff
243
244 typedef DWORD LCID;
245 typedef WORD* LPWORD;
246 typedef BOOL* LPBOOL;
247 typedef CHAR* LPCHAR;
248 typedef CHAR* PCHAR;
249 typedef const void* LPCVOID;
250
251 typedef union _LARGE_INTEGER
252 {
253   struct {
254     DWORD LowPart;
255     int32_t HighPart;
256   } u;
257   LONGLONG QuadPart;
258 } LARGE_INTEGER, *PLARGE_INTEGER;
259
260  typedef union _ULARGE_INTEGER {
261   struct {
262       DWORD LowPart;
263       DWORD HighPart;
264   } u;
265   ULONGLONG QuadPart;
266 } ULARGE_INTEGER, *PULARGE_INTEGER;
267
268 #define MAKELONG(low,high)     ((LONG)(((WORD)((DWORD_PTR)(low) & 0xFFFF)) | ((DWORD)((WORD)((DWORD_PTR)(high) & 0xFFFF))) << 16))
269 LONGLONG Int32x32To64(LONG Multiplier, LONG Multiplicand);
270
271 void OutputDebugString(LPCTSTR lpOuputString);
272
273 // Date / Time
274
275 typedef struct _SYSTEMTIME
276 {
277   WORD wYear;
278   WORD wMonth;
279   WORD wDayOfWeek;
280   WORD wDay;
281   WORD wHour;
282   WORD wMinute;
283   WORD wSecond;
284   WORD wMilliseconds;
285 } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
286
287 typedef struct _TIME_ZONE_INFORMATION {
288   LONG Bias;
289   WCHAR StandardName[32];
290   SYSTEMTIME StandardDate;
291   LONG StandardBias;
292   WCHAR DaylightName[32];
293   SYSTEMTIME DaylightDate;
294   LONG DaylightBias;
295 } TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
296
297 #define TIME_ZONE_ID_INVALID    ((DWORD)0xFFFFFFFF)
298 #define TIME_ZONE_ID_UNKNOWN    0
299 #define TIME_ZONE_ID_STANDARD   1
300 #define TIME_ZONE_ID_DAYLIGHT   2
301
302 // Thread
303 #define THREAD_BASE_PRIORITY_LOWRT  15
304 #define THREAD_BASE_PRIORITY_MAX    2
305 #define THREAD_BASE_PRIORITY_MIN   -2
306 #define THREAD_BASE_PRIORITY_IDLE  -15
307 #define THREAD_PRIORITY_LOWEST          THREAD_BASE_PRIORITY_MIN
308 #define THREAD_PRIORITY_BELOW_NORMAL    (THREAD_PRIORITY_LOWEST+1)
309 #define THREAD_PRIORITY_NORMAL          0
310 #define THREAD_PRIORITY_HIGHEST         THREAD_BASE_PRIORITY_MAX
311 #define THREAD_PRIORITY_ABOVE_NORMAL    (THREAD_PRIORITY_HIGHEST-1)
312 #define THREAD_PRIORITY_ERROR_RETURN    (0x7fffffff)
313 #define THREAD_PRIORITY_TIME_CRITICAL   THREAD_BASE_PRIORITY_LOWRT
314 #define THREAD_PRIORITY_IDLE            THREAD_BASE_PRIORITY_IDLE
315
316 // Network
317 #define SOCKADDR_IN struct sockaddr_in
318 #define IN_ADDR struct in_addr
319 #define SOCKET_ERROR (-1)
320 #define INVALID_SOCKET (~0)
321 #define closesocket(s)  close(s)
322 #define ioctlsocket(s, f, v) ioctl(s, f, v)
323 #define WSAGetLastError() (errno)
324 #define WSASetLastError(e) (errno = e)
325 #define WSAECONNRESET ECONNRESET
326 #define WSAHOST_NOT_FOUND ENOENT
327 #define WSAETIMEDOUT  ETIMEDOUT
328 #define WSAEADDRINUSE EADDRINUSE
329 #define WSAECANCELLED EINTR
330 #define WSAECONNREFUSED ECONNREFUSED
331 #define WSAECONNABORTED ECONNABORTED
332 #define WSAETIMEDOUT ETIMEDOUT
333
334 typedef int SOCKET;
335
336 // Thread
337 typedef int (*LPTHREAD_START_ROUTINE)(void *);
338
339 // File
340 #define O_BINARY 0
341 #define O_TEXT   0
342 #define _O_TRUNC O_TRUNC
343 #define _O_RDONLY O_RDONLY
344 #define _O_WRONLY O_WRONLY
345 #define _off_t off_t
346
347 #if defined(__APPLE__)
348 #include <sched.h>
349 #include <AvailabilityMacros.h>
350 typedef int64_t   off64_t;
351 typedef off_t     __off_t;
352 typedef off64_t   __off64_t;
353 typedef fpos_t fpos64_t;
354 #if (MAC_OS_X_VERSION_MAX_ALLOWED < 1050)
355 #define __stat64 stat
356 #define stat64 stat
357 #define statfs64 statfs
358 #define fstat64 fstat
359 #elif defined(__arm__) 
360 #define __stat64 stat
361 #define stat64 stat
362 #define statfs64 statfs
363 #define fstat64 fstat
364 #else
365 #define fstat64 fstat
366 #endif
367 #else
368 #define __stat64 stat64
369 #endif
370
371 struct _stati64 {
372   dev_t st_dev;
373   ino_t st_ino;
374   unsigned short st_mode;
375   short          st_nlink;
376   short          st_uid;
377   short          st_gid;
378   dev_t st_rdev;
379   __int64  st_size;
380   time_t _st_atime;
381   time_t _st_mtime;
382   time_t _st_ctime;
383 };
384
385 typedef struct _FILETIME
386 {
387   DWORD dwLowDateTime;
388   DWORD dwHighDateTime;
389 } FILETIME, *PFILETIME, *LPFILETIME;
390
391 typedef struct _WIN32_FIND_DATA
392 {
393     DWORD     dwFileAttributes;
394     FILETIME  ftCreationTime;
395     FILETIME  ftLastAccessTime;
396     FILETIME  ftLastWriteTime;
397     DWORD     nFileSizeHigh;
398     DWORD     nFileSizeLow;
399     DWORD     dwReserved0;
400     DWORD     dwReserved1;
401     CHAR      cFileName[260];
402     CHAR      cAlternateFileName[14];
403 } WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
404
405 #define LPWIN32_FIND_DATAA LPWIN32_FIND_DATA
406
407 #define FILE_ATTRIBUTE_DIRECTORY           0x00000010
408
409 typedef struct _SECURITY_ATTRIBUTES {
410   DWORD nLength;
411   LPVOID lpSecurityDescriptor;
412   BOOL bInheritHandle;
413 } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
414
415 #define FILE_BEGIN              0
416 #define FILE_CURRENT            1
417 #define FILE_END                2
418
419 #define _S_IFREG  S_IFREG
420 #define _S_IFDIR  S_IFDIR
421 #define MAX_PATH PATH_MAX
422
423 #define _stat stat
424
425 // Memory
426 typedef struct _MEMORYSTATUSEX
427 {
428   DWORD dwLength;
429   DWORD dwMemoryLoad;
430
431   uint64_t ullTotalPhys;
432   uint64_t ullAvailPhys;
433   uint64_t ullTotalPageFile;
434   uint64_t ullAvailPageFile;
435   uint64_t ullTotalVirtual;
436   uint64_t ullAvailVirtual;
437 } MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
438
439 // Common HRESULT values
440 #ifndef NOERROR
441 #define NOERROR           (0L)
442 #endif
443 #ifndef S_OK
444 #define S_OK            (0L)
445 #endif
446 #ifndef E_FAIL
447 #define E_FAIL            (0x80004005L)
448 #endif
449 #ifndef E_OUTOFMEMORY
450 #define E_OUTOFMEMORY         (0x8007000EL)
451 #endif
452 #define FAILED(Status)            ((HRESULT)(Status)<0)
453
454 // Basic D3D stuff
455 typedef struct _RECT {
456   LONG left;
457   LONG top;
458   LONG right;
459   LONG bottom;
460 } RECT, *PRECT;
461
462 typedef DWORD D3DCOLOR;
463
464 typedef enum _D3DFORMAT
465 {
466   D3DFMT_A8R8G8B8         = 0x00000006,
467   D3DFMT_DXT1         = 0x0000000C,
468   D3DFMT_DXT2         = 0x0000000E,
469   D3DFMT_DXT4         = 0x0000000F,
470   D3DFMT_UNKNOWN          = 0xFFFFFFFF
471 } D3DFORMAT;
472
473 typedef enum D3DRESOURCETYPE
474 {
475     D3DRTYPE_SURFACE = 1,
476     D3DRTYPE_VOLUME = 2,
477     D3DRTYPE_TEXTURE = 3,
478     D3DRTYPE_VOLUMETEXTURE = 4,
479     D3DRTYPE_CubeTexture = 5,
480     D3DRTYPE_VERTEXBUFFER = 6,
481     D3DRTYPE_INDEXBUFFER = 7,
482     D3DRTYPE_FORCE_DWORD = 0x7fffffff
483 } D3DRESOURCETYPE, *LPD3DRESOURCETYPE;
484
485 typedef enum D3DXIMAGE_FILEFORMAT
486 {
487     D3DXIFF_BMP = 0,
488     D3DXIFF_JPG = 1,
489     D3DXIFF_TGA = 2,
490     D3DXIFF_PNG = 3,
491     D3DXIFF_DDS = 4,
492     D3DXIFF_PPM = 5,
493     D3DXIFF_DIB = 6,
494     D3DXIFF_HDR = 7,
495     D3DXIFF_PFM = 8,
496     D3DXIFF_FORCE_DWORD = 0x7fffffff
497 } D3DXIMAGE_FILEFORMAT, *LPD3DXIMAGE_FILEFORMAT;
498
499 typedef struct D3DXIMAGE_INFO {
500     UINT Width;
501     UINT Height;
502     UINT Depth;
503     UINT MipLevels;
504     D3DFORMAT Format;
505     D3DRESOURCETYPE ResourceType;
506     D3DXIMAGE_FILEFORMAT ImageFileFormat;
507 } D3DXIMAGE_INFO, *LPD3DXIMAGE_INFO;
508
509 typedef struct _D3DPRESENT_PARAMETERS_
510 {
511     UINT                BackBufferWidth;
512     UINT                BackBufferHeight;
513     D3DFORMAT           BackBufferFormat;
514     UINT                BackBufferCount;
515     //D3DMULTISAMPLE_TYPE MultiSampleType;
516     //D3DSWAPEFFECT       SwapEffect;
517     //HWND                hDeviceWindow;
518     BOOL                Windowed;
519     BOOL                EnableAutoDepthStencil;
520     D3DFORMAT           AutoDepthStencilFormat;
521     DWORD               Flags;
522     UINT                FullScreen_RefreshRateInHz;
523     UINT                FullScreen_PresentationInterval;
524     //D3DSurface         *BufferSurfaces[3];
525     //D3DSurface         *DepthStencilSurface;
526 } D3DPRESENT_PARAMETERS;
527
528 typedef enum D3DPRIMITIVETYPE
529 {
530     D3DPT_POINTLIST = 1,
531     D3DPT_LINELIST = 2,
532     D3DPT_LINESTRIP = 3,
533     D3DPT_TRIANGLELIST = 4,
534     D3DPT_TRIANGLESTRIP = 5,
535     D3DPT_TRIANGLEFAN = 6,
536     D3DPT_FORCE_DWORD = 0x7fffffff
537 } D3DPRIMITIVETYPE, *LPD3DPRIMITIVETYPE;
538
539 typedef struct _D3DMATRIX {
540     union {
541         struct {
542             float        _11, _12, _13, _14;
543             float        _21, _22, _23, _24;
544             float        _31, _32, _33, _34;
545             float        _41, _42, _43, _44;
546         } u;
547         float m[4][4];
548     };
549 } D3DMATRIX;
550
551 // Misc stuff found in the code, not really important
552 #define PAGE_READONLY     0x02
553 #define PAGE_READWRITE    0x04
554 #define MAXULONG_PTR    ((ULONG) 0xffffffff)
555
556 // CreateFile defines
557 #define FILE_FLAG_WRITE_THROUGH         0x80000000
558 #define FILE_FLAG_OVERLAPPED            0x40000000
559 #define FILE_FLAG_NO_BUFFERING          0x20000000
560 #define FILE_FLAG_RANDOM_ACCESS         0x10000000
561 #define FILE_FLAG_SEQUENTIAL_SCAN       0x08000000
562 #define FILE_FLAG_DELETE_ON_CLOSE       0x04000000
563 #define FILE_FLAG_BACKUP_SEMANTICS      0x02000000
564 #define FILE_FLAG_POSIX_SEMANTICS       0x01000000
565 #define FILE_FLAG_OPEN_REPARSE_POINT    0x00200000
566 #define FILE_FLAG_OPEN_NO_RECALL        0x00100000
567 #define FILE_FLAG_FIRST_PIPE_INSTANCE   0x00080000
568
569 #define CREATE_NEW          1
570 #define CREATE_ALWAYS       2
571 #define OPEN_EXISTING       3
572 #define OPEN_ALWAYS         4
573 #define TRUNCATE_EXISTING   5
574
575 #define FILE_ATTRIBUTE_NORMAL 0x00000080
576 #define FILE_ATTRIBUTE_READONLY 0x00000001
577 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
578 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
579 #define FILE_ATTRIBUTE_DIRECTORY  0x00000010
580
581 #define FILE_READ_DATA   ( 0x0001 )
582 #define FILE_WRITE_DATA  ( 0x0002 )
583 #define FILE_APPEND_DATA ( 0x0004 )
584
585 #define GENERIC_READ  FILE_READ_DATA
586 #define GENERIC_WRITE FILE_WRITE_DATA
587 #define FILE_SHARE_READ                  0x00000001
588 #define FILE_SHARE_WRITE                 0x00000002
589 #define FILE_SHARE_DELETE                0x00000004
590
591 // Audio stuff
592 typedef struct tWAVEFORMATEX
593 {
594 WORD    wFormatTag;
595 WORD    nChannels;
596 DWORD   nSamplesPerSec;
597 DWORD   nAvgBytesPerSec;
598 WORD    nBlockAlign;
599 WORD    wBitsPerSample;
600 WORD    cbSize;
601 } __attribute__((__packed__)) WAVEFORMATEX, *PWAVEFORMATEX, *LPWAVEFORMATEX;
602
603 #define WAVE_FORMAT_UNKNOWN           0x0000
604 #define WAVE_FORMAT_PCM               0x0001
605 #define WAVE_FORMAT_ADPCM             0x0002
606 #define WAVE_FORMAT_IEEE_FLOAT        0x0003
607 #define WAVE_FORMAT_EXTENSIBLE        0xFFFE
608
609 #define SPEAKER_FRONT_LEFT            0x00001
610 #define SPEAKER_FRONT_RIGHT           0x00002
611 #define SPEAKER_FRONT_CENTER          0x00004
612 #define SPEAKER_LOW_FREQUENCY         0x00008
613 #define SPEAKER_BACK_LEFT             0x00010
614 #define SPEAKER_BACK_RIGHT            0x00020
615 #define SPEAKER_FRONT_LEFT_OF_CENTER  0x00040
616 #define SPEAKER_FRONT_RIGHT_OF_CENTER 0x00080
617 #define SPEAKER_BACK_CENTER           0x00100
618 #define SPEAKER_SIDE_LEFT             0x00200
619 #define SPEAKER_SIDE_RIGHT            0x00400
620 #define SPEAKER_TOP_CENTER            0x00800
621 #define SPEAKER_TOP_FRONT_LEFT        0x01000
622 #define SPEAKER_TOP_FRONT_CENTER      0x02000
623 #define SPEAKER_TOP_FRONT_RIGHT       0x04000
624 #define SPEAKER_TOP_BACK_LEFT         0x08000
625 #define SPEAKER_TOP_BACK_CENTER       0x10000
626 #define SPEAKER_TOP_BACK_RIGHT        0x20000
627
628 typedef struct tGUID
629 {
630   DWORD Data1;
631   WORD  Data2, Data3;
632   BYTE  Data4[8];
633 } __attribute__((__packed__)) GUID;
634
635 static const GUID KSDATAFORMAT_SUBTYPE_UNKNOWN = {
636   WAVE_FORMAT_UNKNOWN,
637   0x0000, 0x0000,
638   {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
639 };
640
641 static const GUID KSDATAFORMAT_SUBTYPE_PCM = {
642   WAVE_FORMAT_PCM,
643   0x0000, 0x0010,
644   {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
645 };
646
647 static const GUID KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = {
648   WAVE_FORMAT_IEEE_FLOAT,
649   0x0000, 0x0010,
650   {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
651 };
652
653 typedef struct tWAVEFORMATEXTENSIBLE
654 {
655   WAVEFORMATEX Format;
656   union
657   {
658     WORD wValidBitsPerSample;
659     WORD wSamplesPerBlock;
660     WORD wReserved;
661   } Samples;
662   DWORD dwChannelMask;
663   GUID SubFormat;
664 } __attribute__((__packed__)) WAVEFORMATEXTENSIBLE;
665
666
667
668 #endif
669
670 #endif //__PLATFORM_DEFS_H__
671
672