Skip to content

Instantly share code, notes, and snippets.

Created February 17, 2016 22:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/eb759174e887a6ddb765 to your computer and use it in GitHub Desktop.
Save anonymous/eb759174e887a6ddb765 to your computer and use it in GitHub Desktop.
diff --git a/configure b/configure
index fb81a19..de1bd34 100755
--- a/configure
+++ b/configure
@@ -1766,6 +1766,8 @@ BUILTIN_LIST="
rdtsc
sarestart
sync_val_compare_and_swap
+ sem_timedwait
+ dispatch_semaphore_wait
"
HAVE_LIST_CMDLINE="
inline_asm
@@ -2790,7 +2792,7 @@ gdigrab_indev_deps="CreateDIBSection"
gdigrab_indev_extralibs="-lgdi32"
gdigrab_indev_select="bmp_decoder"
iec61883_indev_deps="libiec61883"
-jack_indev_deps="jack_jack_h sem_timedwait"
+jack_indev_deps="jack_jack_h"
lavfi_indev_deps="avfilter"
libcdio_indev_deps="libcdio"
libdc1394_indev_deps="libdc1394"
@@ -5752,7 +5754,7 @@ check_header soundcard.h
enabled_any alsa_indev alsa_outdev &&
check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound
-enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait &&
+enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack &&
check_func jack_port_get_latency_range -ljack
enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
diff --git a/libavdevice/jack.c b/libavdevice/jack.c
index 9ecbf9e..de2e386 100644
--- a/libavdevice/jack.c
+++ b/libavdevice/jack.c
@@ -35,6 +35,21 @@
#include "timefilter.h"
#include "avdevice.h"
+#if HAVE_SEM_TIMEDWAIT
+#elif HAVE_DISPATCH_SEMAPHORE_WAIT
+
+#include <dispatch/dispatch.h>
+#define sem_t dispatch_semaphore_t
+#define sem_init(psem,x,val) *psem = dispatch_semaphore_create(val)
+#define sem_post(psem) dispatch_semaphore_signal(*psem)
+#define sem_wait(psem) dispatch_semaphore_wait(*psem, DISPATCH_TIME_FOREVER)
+#define sem_timedwait(psem, val) dispatch_semaphore_wait(*psem, dispatch_walltime(val, 0))
+#define sem_destroy(psem) dispatch_release(*psem)
+
+#else
+#error "No mechanism for semaphores"
+#endif /* HAVE_SEM_TIMEDWAIT */
+
/**
* Size of the internal FIFO buffers as a number of audio packets
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment