summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224>2008-11-29 12:20:45 +0000
committerpaul <paul@0c269be4-1314-0410-8aa9-9f06e86f4224>2008-11-29 12:20:45 +0000
commitae0ea1f84a8a085dd9250fa4630204f94fc9dbfb (patch)
treef3752eb8e529db27648134e1bf41089aa9353986
parent66ec6fb249c2504e4d4b87bc8a0d6b4298b0e7f8 (diff)
downloadjack1-ae0ea1f84a8a085dd9250fa4630204f94fc9dbfb.tar.gz
support OS X with new netjack code, plus a small netjack fix/improvement
git-svn-id: svn+ssh://jackaudio.org/trunk/jack@3135 0c269be4-1314-0410-8aa9-9f06e86f4224
-rw-r--r--Makefile.am2
-rw-r--r--configure.ac17
-rw-r--r--drivers/netjack/Makefile.am3
-rw-r--r--drivers/netjack/net_driver.c6
-rw-r--r--drivers/netjack/netjack_packet.c20
-rw-r--r--tools/Makefile.am3
6 files changed, 47 insertions, 4 deletions
diff --git a/Makefile.am b/Makefile.am
index c63dc71..86bb029 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,7 +19,7 @@ DIST_SUBDIRS = config jack libjack jackd drivers example-clients tools doc
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = jack.pc
-EXTRA_DIST = COPYING COPYING.GPL COPYING.LGPL libjack/simd.c
+EXTRA_DIST = COPYING COPYING.GPL COPYING.LGPL libjack/simd.c jack.spec
AUTOMAKE_OPTIONS = foreign
diff --git a/configure.ac b/configure.ac
index 2a9a3a0..d7fafa4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -78,6 +78,7 @@ AC_PROG_CXX
AC_PROG_LD
AM_PROG_LIBTOOL
AC_PROG_LN_S
+AM_PROG_CC_C_O
AC_C_BIGENDIAN
AC_MSG_CHECKING([platform dependencies])
@@ -170,6 +171,21 @@ AC_CHECK_FUNCS(on_exit atexit)
AC_CHECK_FUNCS(posix_memalign)
AC_CHECK_LIB(m, sin)
+echo -n "Checking for ppoll()... "
+AC_EGREP_CPP( ppoll,
+[
+#define _GNU_SOURCE
+#include <poll.h>
+], [
+ AC_DEFINE(HAVE_PPOLL,1,"Whether ppoll is available")
+ echo "yes"
+ ],[
+ AC_DEFINE(HAVE_PPOLL,0,"Whether ppoll is available")
+ echo "no"
+ ] )
+
+
+
AC_CHECK_FUNC(clock_gettime,
[
AC_DEFINE(HAVE_CLOCK_GETTIME,0,"Whether or not clock_gettime can be found in system libraries")
@@ -762,6 +778,7 @@ AM_CONDITIONAL(HAVE_READLINE, $HAVE_READLINE)
AM_CONDITIONAL(HAVE_DOXYGEN, $HAVE_DOXYGEN)
AM_CONDITIONAL(USE_CAPABILITIES, $USE_CAPABILITIES)
AM_CONDITIONAL(STRIPPED_JACKD, $STRIPPED_JACKD)
+AM_CONDITIONAL(HAVE_PPOLL, $HAVE_PPOLL)
AC_OUTPUT(
Makefile
diff --git a/drivers/netjack/Makefile.am b/drivers/netjack/Makefile.am
index bbd41a6..e6de10f 100644
--- a/drivers/netjack/Makefile.am
+++ b/drivers/netjack/Makefile.am
@@ -7,6 +7,9 @@ if HAVE_SAMPLERATE
if HAVE_CELT
AM_CFLAGS += -DHAVE_CELT
endif
+if HAVE_PPOLL
+AM_CFLAGS += -DHAVE_PPOLL
+endif
plugindir = $(ADDON_DIR)
diff --git a/drivers/netjack/net_driver.c b/drivers/netjack/net_driver.c
index 2f8fb5e..10ece22 100644
--- a/drivers/netjack/net_driver.c
+++ b/drivers/netjack/net_driver.c
@@ -52,6 +52,8 @@ $Id: net_driver.c,v 1.17 2006/04/16 20:16:10 torbenh Exp $
#undef DEBUG_WAKEUP
+#define MIN(x,y) ((x)<(y) ? (x) : (y))
+
static int sync_state = TRUE;
static jack_transport_state_t last_transport_state;
@@ -300,7 +302,7 @@ net_driver_read (net_driver_t* driver, jack_nframes_t nframes)
framecnt = pkthdr->framecnt;
driver->reply_port = pkthdr->reply_port;
driver->latency = pkthdr->latency;
- driver->resync_threshold = pkthdr->latency-1;
+ driver->resync_threshold = MIN( 15, pkthdr->latency-1 );
// check whether, we should handle the transport sync stuff, or leave trnasports untouched.
if (driver->handle_transport_sync) {
@@ -704,7 +706,7 @@ net_driver_new (jack_client_t * client,
driver->num_lost_packets = 0;
driver->next_deadline_valid = 0;
- driver->resync_threshold = driver->latency - 1;
+ driver->resync_threshold = MIN( 15, driver->latency-1 );
driver->running_free = 0;
jack_info ("netjack: period : up: %d / dn: %d", driver->net_period_up, driver->net_period_down);
diff --git a/drivers/netjack/netjack_packet.c b/drivers/netjack/netjack_packet.c
index d90b538..ee3bd73 100644
--- a/drivers/netjack/netjack_packet.c
+++ b/drivers/netjack/netjack_packet.c
@@ -26,6 +26,9 @@
*
*/
+#ifdef HAVE_PPOLL
+#define _GNU_SOURCE
+#endif
#include <math.h>
#include <stdio.h>
@@ -323,15 +326,24 @@ netjack_poll_deadline (int sockfd, jack_time_t deadline)
{
struct pollfd fds;
int i, poll_err = 0;
- sigset_t sigmask;
+ sigset_t sigmask, rsigmask;
struct sigaction action;
+#ifdef HAVE_PPOLL
struct timespec timeout_spec = { 0, 0 };
+#else
+ int timeout;
+#endif
+
jack_time_t now = jack_get_microseconds();
if( now >= deadline )
return 0;
+#ifdef HAVE_PPOLL
timeout_spec.tv_nsec = (deadline - now) * 1000;
+#else
+ timeout = lrintf( (float)(deadline - now) / 1000.0 );
+#endif
sigemptyset(&sigmask);
sigaddset(&sigmask, SIGHUP);
@@ -353,7 +365,13 @@ netjack_poll_deadline (int sockfd, jack_time_t deadline)
fds.fd = sockfd;
fds.events = POLLIN;
+#ifdef HAVE_PPOLL
poll_err = ppoll (&fds, 1, &timeout_spec, &sigmask);
+#else
+ sigprocmask (SIG_UNBLOCK, &sigmask, &rsigmask);
+ poll_err = poll (&fds, 1, timeout);
+ sigprocmask (SIG_SETMASK, &rsigmask, NULL);
+#endif
if (poll_err == -1)
{
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 8a8012c..472a475 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -127,6 +127,9 @@ jack_netsource_CFLAGS = -I$(top_srcdir)/drivers/netjack
if HAVE_CELT
jack_netsource_CFLAGS += -DHAVE_CELT
endif
+if HAVE_PPOLL
+jack_netsource_CFLAGS += -DHAVE_PPOLL
+endif
jack_netsource_LDFLAGS = -lsamplerate @OS_LDFLAGS@
jack_netsource_LDADD = $(top_builddir)/libjack/libjack.la