From e941d5b10fac40de77b98f1330e0c0216b3e618c Mon Sep 17 00:00:00 2001 From: Aaron Culliney Date: Sun, 12 Oct 2014 12:14:13 -0700 Subject: [PATCH] First cut at getting audio working on Mac --- Apple2Mac/Apple2Mac.xcodeproj/project.pbxproj | 64 +++++++++- src/audio/alhelpers.c | 118 +----------------- src/audio/alhelpers.h | 17 --- src/audio/ds-shim.h | 6 + src/audio/soundcore-openal.h | 5 + src/audio/win-shim.c | 15 ++- src/audio/win-shim.h | 21 +++- 7 files changed, 111 insertions(+), 135 deletions(-) diff --git a/Apple2Mac/Apple2Mac.xcodeproj/project.pbxproj b/Apple2Mac/Apple2Mac.xcodeproj/project.pbxproj index 15805a05..020874ac 100644 --- a/Apple2Mac/Apple2Mac.xcodeproj/project.pbxproj +++ b/Apple2Mac/Apple2Mac.xcodeproj/project.pbxproj @@ -119,6 +119,14 @@ 779F562319DA59D600A6F107 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 773B3D241956885A0085CE5F /* MainMenu.xib */; }; 779F562919E4FE9E00A6F107 /* Basic.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 779F562719E4FE9E00A6F107 /* Basic.vsh */; }; 779F562A19E4FE9E00A6F107 /* Basic.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 779F562819E4FE9E00A6F107 /* Basic.fsh */; }; + 779F565819EAF66E00A6F107 /* alhelpers.c in Sources */ = {isa = PBXBuildFile; fileRef = 779F564719EAF66E00A6F107 /* alhelpers.c */; }; + 779F565919EAF66E00A6F107 /* AY8910.c in Sources */ = {isa = PBXBuildFile; fileRef = 779F564919EAF66E00A6F107 /* AY8910.c */; }; + 779F565A19EAF66E00A6F107 /* mockingboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 779F564C19EAF66E00A6F107 /* mockingboard.c */; }; + 779F565B19EAF66E00A6F107 /* soundcore-openal.c in Sources */ = {isa = PBXBuildFile; fileRef = 779F564F19EAF66E00A6F107 /* soundcore-openal.c */; }; + 779F565C19EAF66E00A6F107 /* soundcore.c in Sources */ = {isa = PBXBuildFile; fileRef = 779F565119EAF66E00A6F107 /* soundcore.c */; }; + 779F565D19EAF66E00A6F107 /* speaker.c in Sources */ = {isa = PBXBuildFile; fileRef = 779F565319EAF66E00A6F107 /* speaker.c */; }; + 779F565E19EAF66E00A6F107 /* win-shim.c in Sources */ = {isa = PBXBuildFile; fileRef = 779F565619EAF66E00A6F107 /* win-shim.c */; }; + 779F566019EAF6D000A6F107 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 779F565F19EAF6D000A6F107 /* OpenAL.framework */; }; 77E1C0B319D72700004344E0 /* vectorUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = 77E1C0A919D72700004344E0 /* vectorUtil.c */; }; 77E1C0B419D72700004344E0 /* sourceUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = 77E1C0AB19D72700004344E0 /* sourceUtil.c */; }; 77E1C0B519D72700004344E0 /* modelUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = 77E1C0AD19D72700004344E0 /* modelUtil.c */; }; @@ -205,6 +213,24 @@ 779F561B19D78B8200A6F107 /* renderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = renderer.h; sourceTree = ""; }; 779F562719E4FE9E00A6F107 /* Basic.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = Basic.vsh; sourceTree = ""; }; 779F562819E4FE9E00A6F107 /* Basic.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = Basic.fsh; sourceTree = ""; }; + 779F564719EAF66E00A6F107 /* alhelpers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = alhelpers.c; sourceTree = ""; }; + 779F564819EAF66E00A6F107 /* alhelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alhelpers.h; sourceTree = ""; }; + 779F564919EAF66E00A6F107 /* AY8910.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = AY8910.c; sourceTree = ""; }; + 779F564A19EAF66E00A6F107 /* AY8910.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AY8910.h; sourceTree = ""; }; + 779F564B19EAF66E00A6F107 /* ds-shim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ds-shim.h"; sourceTree = ""; }; + 779F564C19EAF66E00A6F107 /* mockingboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mockingboard.c; sourceTree = ""; }; + 779F564D19EAF66E00A6F107 /* mockingboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mockingboard.h; sourceTree = ""; }; + 779F564E19EAF66E00A6F107 /* peripherals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = peripherals.h; sourceTree = ""; }; + 779F564F19EAF66E00A6F107 /* soundcore-openal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "soundcore-openal.c"; sourceTree = ""; }; + 779F565019EAF66E00A6F107 /* soundcore-openal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "soundcore-openal.h"; sourceTree = ""; }; + 779F565119EAF66E00A6F107 /* soundcore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = soundcore.c; sourceTree = ""; }; + 779F565219EAF66E00A6F107 /* soundcore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = soundcore.h; sourceTree = ""; }; + 779F565319EAF66E00A6F107 /* speaker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = speaker.c; sourceTree = ""; }; + 779F565419EAF66E00A6F107 /* speaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speaker.h; sourceTree = ""; }; + 779F565519EAF66E00A6F107 /* SSI263Phonemes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSI263Phonemes.h; sourceTree = ""; }; + 779F565619EAF66E00A6F107 /* win-shim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "win-shim.c"; sourceTree = ""; }; + 779F565719EAF66E00A6F107 /* win-shim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "win-shim.h"; sourceTree = ""; }; + 779F565F19EAF6D000A6F107 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; }; 77E1C0A819D72700004344E0 /* vectorUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vectorUtil.h; path = video_util/vectorUtil.h; sourceTree = ""; }; 77E1C0A919D72700004344E0 /* vectorUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vectorUtil.c; path = video_util/vectorUtil.c; sourceTree = ""; }; 77E1C0AA19D72700004344E0 /* sourceUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sourceUtil.h; path = video_util/sourceUtil.h; sourceTree = ""; }; @@ -230,6 +256,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 779F566019EAF6D000A6F107 /* OpenAL.framework in Frameworks */, 4ADC521A19E8CA4500186B36 /* libz.1.1.3.dylib in Frameworks */, 4ADC521B19E8CA4500186B36 /* Cocoa.framework in Frameworks */, ); @@ -296,6 +323,7 @@ 773B3D0E1956885A0085CE5F /* Frameworks */ = { isa = PBXGroup; children = ( + 779F565F19EAF6D000A6F107 /* OpenAL.framework */, 773B3DCA1956903D0085CE5F /* libz.1.1.3.dylib */, 773B3D0F1956885A0085CE5F /* Cocoa.framework */, 773B3D2E1956885A0085CE5F /* XCTest.framework */, @@ -386,6 +414,7 @@ 773B3D4519568A570085CE5F /* src */ = { isa = PBXGroup; children = ( + 779F564619EAF66E00A6F107 /* audio */, 773B3D4719568A570085CE5F /* apple2.h */, 773B3D5C19568A570085CE5F /* common.h */, 773B3D5D19568A570085CE5F /* cpu-supp.c */, @@ -469,6 +498,30 @@ path = x86; sourceTree = ""; }; + 779F564619EAF66E00A6F107 /* audio */ = { + isa = PBXGroup; + children = ( + 779F564719EAF66E00A6F107 /* alhelpers.c */, + 779F564819EAF66E00A6F107 /* alhelpers.h */, + 779F564919EAF66E00A6F107 /* AY8910.c */, + 779F564A19EAF66E00A6F107 /* AY8910.h */, + 779F564B19EAF66E00A6F107 /* ds-shim.h */, + 779F564C19EAF66E00A6F107 /* mockingboard.c */, + 779F564D19EAF66E00A6F107 /* mockingboard.h */, + 779F564E19EAF66E00A6F107 /* peripherals.h */, + 779F564F19EAF66E00A6F107 /* soundcore-openal.c */, + 779F565019EAF66E00A6F107 /* soundcore-openal.h */, + 779F565119EAF66E00A6F107 /* soundcore.c */, + 779F565219EAF66E00A6F107 /* soundcore.h */, + 779F565319EAF66E00A6F107 /* speaker.c */, + 779F565419EAF66E00A6F107 /* speaker.h */, + 779F565519EAF66E00A6F107 /* SSI263Phonemes.h */, + 779F565619EAF66E00A6F107 /* win-shim.c */, + 779F565719EAF66E00A6F107 /* win-shim.h */, + ); + path = audio; + sourceTree = ""; + }; 77E1C09E19D726B8004344E0 /* Shaders */ = { isa = PBXGroup; children = ( @@ -679,7 +732,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$SRCROOT/../src/x86/genglue\" \"$SRCROOT/../src/disk.c\" \"$SRCROOT/../src/misc.c\" \"$SRCROOT/../src/display.c\" \"$SRCROOT/../src/vm.c\" > \"$SRCROOT/../src/x86/glue.S\""; + shellScript = "\"$SRCROOT/../src/x86/genglue\" \"$SRCROOT/../src/disk.c\" \"$SRCROOT/../src/misc.c\" \"$SRCROOT/../src/display.c\" \"$SRCROOT/../src/vm.c\" \"$SRCROOT/../src/audio/mockingboard.c\" > \"$SRCROOT/../src/x86/glue.S\""; showEnvVarsInLog = 0; }; 773B3DC919568BF20085CE5F /* ShellScript */ = { @@ -766,6 +819,8 @@ buildActionMask = 2147483647; files = ( 773B3DBF19568A570085CE5F /* cpu.S in Sources */, + 779F565D19EAF66E00A6F107 /* speaker.c in Sources */, + 779F565B19EAF66E00A6F107 /* soundcore-openal.c in Sources */, 773B3DB019568A570085CE5F /* prefs.c in Sources */, 773B3DA419568A570085CE5F /* display.c in Sources */, 773B3DA319568A570085CE5F /* disk.c in Sources */, @@ -778,17 +833,22 @@ 77E1C0B619D72700004344E0 /* matrixUtil.c in Sources */, 77E1C0C519D7298F004344E0 /* EmulatorGLView.m in Sources */, 773B3DAE19568A570085CE5F /* opcodes.c in Sources */, + 779F565C19EAF66E00A6F107 /* soundcore.c in Sources */, 779DD827195764E200DF89E5 /* rom-shim.c in Sources */, 773B3DC319568A570085CE5F /* zlib-helpers.c in Sources */, 77E1C0B719D72700004344E0 /* imageUtil.m in Sources */, 773B3DA219568A570085CE5F /* darwin-shim.c in Sources */, 77E1C0B519D72700004344E0 /* modelUtil.c in Sources */, 773B3DAC19568A570085CE5F /* debug.l in Sources */, + 779F565E19EAF66E00A6F107 /* win-shim.c in Sources */, + 779F565919EAF66E00A6F107 /* AY8910.c in Sources */, 77E1C0C619D7298F004344E0 /* EmulatorFullscreenWindow.m in Sources */, 773B3DA519568A570085CE5F /* font.c in Sources */, 773B3DA019568A570085CE5F /* cpu-supp.c in Sources */, 779F561C19D7929100A6F107 /* glvideo.c in Sources */, + 779F565A19EAF66E00A6F107 /* mockingboard.c in Sources */, 77E1C0B419D72700004344E0 /* sourceUtil.c in Sources */, + 779F565819EAF66E00A6F107 /* alhelpers.c in Sources */, 773B3DBE19568A570085CE5F /* vm.c in Sources */, 773B3DC019568A570085CE5F /* darwin-glue.S in Sources */, 773B3D1C1956885A0085CE5F /* main.m in Sources */, @@ -1018,6 +1078,7 @@ "APPLE2IX=1", "DEBUGGER=1", "KEYPAD_JOYSTICK=1", + "AUDIO_ENABLED=1", ); HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -1044,6 +1105,7 @@ "APPLE2IX=1", "DEBUGGER=1", "KEYPAD_JOYSTICK=1", + "AUDIO_ENABLED=1", ); HEADER_SEARCH_PATHS = ( "$(inherited)", diff --git a/src/audio/alhelpers.c b/src/audio/alhelpers.c index 254ea47c..31910d3f 100644 --- a/src/audio/alhelpers.c +++ b/src/audio/alhelpers.c @@ -28,9 +28,14 @@ * finding an appropriate buffer format, and getting readable strings for * channel configs and sample types. */ +#ifdef __APPLE__ +#import +#import +#else #include #include #include +#endif #include "common.h" #include "audio/alhelpers.h" @@ -86,116 +91,3 @@ void CloseAL(void) alcDestroyContext(ctx); alcCloseDevice(device); } - -const char *ChannelsName(ALenum chans) -{ - switch(chans) - { - case AL_MONO_SOFT: return "Mono"; - case AL_STEREO_SOFT: return "Stereo"; - case AL_REAR_SOFT: return "Rear"; - case AL_QUAD_SOFT: return "Quadraphonic"; - case AL_5POINT1_SOFT: return "5.1 Surround"; - case AL_6POINT1_SOFT: return "6.1 Surround"; - case AL_7POINT1_SOFT: return "7.1 Surround"; - } - return "Unknown Channels"; -} - -const char *TypeName(ALenum type) -{ - switch(type) - { - case AL_BYTE_SOFT: return "S8"; - case AL_UNSIGNED_BYTE_SOFT: return "U8"; - case AL_SHORT_SOFT: return "S16"; - case AL_UNSIGNED_SHORT_SOFT: return "U16"; - case AL_INT_SOFT: return "S32"; - case AL_UNSIGNED_INT_SOFT: return "U32"; - case AL_FLOAT_SOFT: return "Float32"; - case AL_DOUBLE_SOFT: return "Float64"; - } - return "Unknown Type"; -} - -const char *FormatName(ALenum format) -{ - switch (format) - { - case AL_FORMAT_MONO8: return "MONO8"; - case AL_FORMAT_MONO16: return "MONO16"; - case AL_FORMAT_STEREO8: return "STEREO8"; - case AL_FORMAT_STEREO16: return "STEREO16"; - - case AL_FORMAT_QUAD8: return "QUAD8"; - case AL_FORMAT_QUAD16: return "QUAD16"; - case AL_FORMAT_QUAD32: return "QUAD32"; - case AL_FORMAT_REAR8: return "REAR8"; - case AL_FORMAT_REAR16: return "REAR16"; - case AL_FORMAT_REAR32: return "REAR32"; - case AL_FORMAT_51CHN8: return "51CHN8"; - case AL_FORMAT_51CHN16: return "51CHN16"; - case AL_FORMAT_51CHN32: return "51CHN32"; - case AL_FORMAT_61CHN8: return "61CHN8"; - case AL_FORMAT_61CHN16: return "61CHN16"; - case AL_FORMAT_61CHN32: return "61CHN32"; - case AL_FORMAT_71CHN8: return "71CHN8"; - case AL_FORMAT_71CHN16: return "71CHN16"; - case AL_FORMAT_71CHN32: return "71CHN32"; - case AL_FORMAT_WAVE_EXT: return "WAVE_EXT"; - case AL_FORMAT_IMA_ADPCM_MONO16_EXT: return "IMA_ADPCM_MONO16_EXT"; - case AL_FORMAT_IMA_ADPCM_STEREO16_EXT: return "IMA_ADPCM_STEREO16_EXT"; - case AL_FORMAT_VORBIS_EXT: return "VORBIS_EXT"; - case AL_FORMAT_MONO_FLOAT32: return "MONO_FLOAT32"; - case AL_FORMAT_STEREO_FLOAT32: return "STEREO_FLOAT32"; - case AL_FORMAT_MONO_DOUBLE_EXT: return "MONO_DOUBLE_EXT"; - case AL_FORMAT_STEREO_DOUBLE_EXT: return "STEREO_DOUBLE_EXT"; - case AL_FORMAT_MONO_MULAW_EXT: return "MONO_MULAW(_EXT)"; - //case AL_FORMAT_MONO_MULAW: return "MONO_MULAW"; - case AL_FORMAT_STEREO_MULAW_EXT: return "STEREO_MULAW(_EXT)"; - //case AL_FORMAT_STEREO_MULAW: return "STEREO_MULAW"; - case AL_FORMAT_QUAD8_LOKI: return "QUAD8_LOKI"; - case AL_FORMAT_QUAD16_LOKI: return "QUAD16_LOKI"; - case AL_FORMAT_QUAD_MULAW: return "QUAD_MULAW"; - case AL_FORMAT_REAR_MULAW: return "REAR_MULAW"; - case AL_FORMAT_51CHN_MULAW: return "51CHN_MULAW"; - case AL_FORMAT_61CHN_MULAW: return "61CHN_MULAW"; - case AL_FORMAT_71CHN_MULAW: return "71CHN_MULAW"; - case AL_FORMAT_MONO_IMA4: return "MONO_IMA4"; - case AL_FORMAT_STEREO_IMA4: return "STEREO_IMA4"; - } - return "Unknown Format"; -} - -ALsizei FramesToBytes(ALsizei size, ALenum channels, ALenum type) -{ - switch(channels) - { - case AL_MONO_SOFT: size *= 1; break; - case AL_STEREO_SOFT: size *= 2; break; - case AL_REAR_SOFT: size *= 2; break; - case AL_QUAD_SOFT: size *= 4; break; - case AL_5POINT1_SOFT: size *= 6; break; - case AL_6POINT1_SOFT: size *= 7; break; - case AL_7POINT1_SOFT: size *= 8; break; - } - - switch(type) - { - case AL_BYTE_SOFT: size *= sizeof(ALbyte); break; - case AL_UNSIGNED_BYTE_SOFT: size *= sizeof(ALubyte); break; - case AL_SHORT_SOFT: size *= sizeof(ALshort); break; - case AL_UNSIGNED_SHORT_SOFT: size *= sizeof(ALushort); break; - case AL_INT_SOFT: size *= sizeof(ALint); break; - case AL_UNSIGNED_INT_SOFT: size *= sizeof(ALuint); break; - case AL_FLOAT_SOFT: size *= sizeof(ALfloat); break; - case AL_DOUBLE_SOFT: size *= sizeof(ALdouble); break; - } - - return size; -} - -ALsizei BytesToFrames(ALsizei size, ALenum channels, ALenum type) -{ - return size / FramesToBytes(1, channels, type); -} diff --git a/src/audio/alhelpers.h b/src/audio/alhelpers.h index 47caa7b8..665715c7 100644 --- a/src/audio/alhelpers.h +++ b/src/audio/alhelpers.h @@ -12,23 +12,6 @@ extern "C" { #endif /* __cplusplus */ -/* Some helper functions to get the name from the channel and type enums. */ -const char *ChannelsName(ALenum chans); -const char *TypeName(ALenum type); -const char *FormatName(ALenum format); - -/* Helpers to convert frame counts and byte lengths. */ -ALsizei FramesToBytes(ALsizei size, ALenum channels, ALenum type); -ALsizei BytesToFrames(ALsizei size, ALenum channels, ALenum type); - -/* Loads samples into a buffer using the standard alBufferData call, but with a - * LPALBUFFERSAMPLESSOFT-compatible prototype. Assumes internalformat is valid - * for alBufferData, and that channels and type match it. */ -void AL_APIENTRY wrap_BufferSamples(ALuint buffer, ALuint samplerate, - ALenum internalformat, ALsizei samples, - ALenum channels, ALenum type, - const ALvoid *data); - /* Easy device init/deinit functions. */ ALCcontext* InitAL(void); void CloseAL(void); diff --git a/src/audio/ds-shim.h b/src/audio/ds-shim.h index 0a077c26..f1cd3491 100644 --- a/src/audio/ds-shim.h +++ b/src/audio/ds-shim.h @@ -133,6 +133,12 @@ typedef struct IDirectSoundBuffer { #define DSSCL_NORMAL 0x00000001 +#if defined(FAILED) +#undef FAILED +#endif +#if defined(SUCCEEDED) +#undef SUCCEEDED +#endif static inline bool FAILED(HRESULT x) { return x != DS_OK; } static inline bool SUCCEEDED(HRESULT x) { return x == DS_OK; } diff --git a/src/audio/soundcore-openal.h b/src/audio/soundcore-openal.h index 2eec7292..74d71f5d 100644 --- a/src/audio/soundcore-openal.h +++ b/src/audio/soundcore-openal.h @@ -14,9 +14,14 @@ #include "common.h" +#ifdef __APPLE__ +#import +#import +#else #include #include #include +#endif #undef DSBVOLUME_MIN #define DSBVOLUME_MIN 0 diff --git a/src/audio/win-shim.c b/src/audio/win-shim.c index f1edc7ec..1dee83c8 100644 --- a/src/audio/win-shim.c +++ b/src/audio/win-shim.c @@ -27,7 +27,9 @@ pthread_t CreateThread(void* unused_lpThreadAttributes, int unused_dwStackSize, bool SetThreadPriority(pthread_t thread, int unused_nPriority) { // assuming time critical ... - +#if defined(__APPLE__) +#warning possible FIXME possible TODO : set thread priority in Darwin/Mach ? +#else int policy = sched_getscheduler(getpid()); int prio = 0; @@ -43,12 +45,22 @@ bool SetThreadPriority(pthread_t thread, int unused_nPriority) ERRLOG("OOPS pthread_setschedprio"); return 0; } +#endif return 1; } bool GetExitCodeThread(pthread_t thread, unsigned long *lpExitCode) { +#if defined(__APPLE__) + int err = 0; + if ( (err = pthread_join(thread, NULL)) ) { + ERRLOG("OOPS pthread_join"); + } + if (lpExitCode) { + *lpExitCode = err; + } +#else if (pthread_tryjoin_np(thread, NULL)) { if (lpExitCode) @@ -60,6 +72,7 @@ bool GetExitCodeThread(pthread_t thread, unsigned long *lpExitCode) { *lpExitCode = 0; } +#endif return 1; } diff --git a/src/audio/win-shim.h b/src/audio/win-shim.h index 430c1d7f..1cd20254 100644 --- a/src/audio/win-shim.h +++ b/src/audio/win-shim.h @@ -14,6 +14,10 @@ #include "common.h" +#ifdef __APPLE__ +#import +#endif + /* * This is mostly a shim for Windows-related stuff but also contains some AppleWin-isms * @@ -22,13 +26,19 @@ // 2013/09/19 - http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx typedef unsigned long DWORD; +#ifdef __APPLE__ +typedef UInt32 ULONG; +typedef SInt32 HRESULT; +typedef signed char BOOL; +#else typedef unsigned long ULONG; -typedef long LONG; typedef long HRESULT; +typedef bool BOOL; +#endif +typedef long LONG; typedef unsigned int UINT; typedef uint32_t UINT32; typedef uint64_t UINT64; -typedef bool BOOL; typedef char TCHAR; typedef uint8_t UCHAR; typedef int16_t INT16; @@ -45,7 +55,9 @@ typedef DWORD *LPDWORD; typedef char *GUID; // HACK typedef GUID IID; +#if !defined(__APPLE__) typedef IID* REFIID; +#endif typedef GUID *LPGUID; typedef char *LPCSTR; @@ -67,9 +79,12 @@ typedef void* HANDLE; #define CALLBACK #define FAR -typedef bool BOOL; +#if !defined(TRUE) #define TRUE true +#endif +#if !defined(FALSE) #define FALSE false +#endif extern FILE *g_fh;