[FFmpeg-devel] [PATCH] Fixed issue #43 JACK indev support on OSX
Josh de Kock
josh at itanimul.li
Fri Feb 19 21:27:50 CET 2016
---
configure | 13 ++++++++++---
libavdevice/jack.c | 10 ++++++++++
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/configure b/configure
index 287896f..78f9618 100755
--- a/configure
+++ b/configure
@@ -1732,6 +1732,7 @@ BUILTIN_LIST="
mm_empty
rdtsc
sarestart
+ sem_timedwait
sync_val_compare_and_swap
"
HAVE_LIST_CMDLINE="
@@ -1753,6 +1754,7 @@ HEADERS_LIST="
asm_types_h
cdio_paranoia_h
cdio_paranoia_paranoia_h
+ dispatch_dispatch_h
dev_bktr_ioctl_bt848_h
dev_bktr_ioctl_meteor_h
dev_ic_bt8xx_h
@@ -2757,7 +2759,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"
@@ -5266,6 +5268,7 @@ check_builtin atomic_compare_exchange "" "int *ptr, *oldval; int newval; __atomi
check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()"
check_builtin MemoryBarrier windows.h "MemoryBarrier()"
check_builtin sarestart signal.h "SA_RESTART"
+check_builtin sem_timedwait semaphore.h "sem_t *s; sem_init(s,0,0); sem_timedwait(s,0); sem_destroy(s)" -lpthread
check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)"
check_builtin gmtime_r time.h "time_t *time; struct tm *tm; gmtime_r(time, tm)"
check_builtin localtime_r time.h "time_t *time; struct tm *tm; localtime_r(time, tm)"
@@ -5330,6 +5333,7 @@ check_func_headers glob.h glob
enabled xlib &&
check_func_headers "X11/Xlib.h X11/extensions/Xvlib.h" XvGetPortAttribute -lXv -lX11 -lXext
+check_header dispatch/dispatch.h
check_header direct.h
check_header dirent.h
check_header dlfcn.h
@@ -5702,8 +5706,11 @@ 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 &&
- check_func jack_port_get_latency_range -ljack
+enabled jack_indev &&
+ check_lib2 jack/jack.h jack_client_open -ljack &&
+ check_func jack_port_get_latency_range -ljack &&
+ enabled_any sem_timedwait dispatch_dispatch_h ||
+ disable jack_indev
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..5455484 100644
--- a/libavdevice/jack.c
+++ b/libavdevice/jack.c
@@ -35,6 +35,16 @@
#include "timefilter.h"
#include "avdevice.h"
+#if HAVE_DISPATCH_DISPATCH_H
+#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)
+#endif
+
/**
* Size of the internal FIFO buffers as a number of audio packets
*/
--
2.5.4 (Apple Git-61)
> this breaks build when libjack is not available
>
> for example on mingw64
> without explicitly enabling jack it fails with:
> ERROR: input device jack could not be enabled
For some reason I assumed that the JACK indev had to be manually enabled, and therefore if it would be an error if it's dependencies. However, looking at the other indevs, I found that none of them threw errors, making it likely that all the indevs were on by default, and turned off when they weren't available (which would make sense).
I've removed the die statement which, hopefully, will fix all remaining issues.
Thanks for your patience,
Josh
More information about the ffmpeg-devel
mailing list