- md5sum is not available. - adding sndio support from Jacob Meuser <jakemsr@sdf.lonestar.org>. - various patches from ajacoutot@, jasper@ and sthen@tags/0.125.0
| @@ -165,15 +165,18 @@ CFLAGS="$ORIGINAL_CFLAGS" | |||
| AC_MSG_CHECKING([platform dependencies]) | |||
| HOST_DEFAULT_TMP_DIR=/dev/shm | |||
| USE_MD5SUM=1 | |||
| case "${host_os}" in | |||
| freebsd*) | |||
| # current FreeBSD header files conflict with the OSS driver's | |||
| # barrier code, this may be fixed in 5.3, stay tuned. | |||
| USE_BARRIER="no" | |||
| USE_MD5SUM=0 | |||
| ;; | |||
| openbsd*) | |||
| # pthread_barrier* not implemented | |||
| USE_BARRIER="no" | |||
| USE_MD5SUM=0 | |||
| # need small realtime stack | |||
| JACK_THREAD_STACK_TOUCH=10000 | |||
| ;; | |||
| @@ -189,6 +192,9 @@ case "${host_os}" in | |||
| esac | |||
| AC_SUBST(OS_LDFLAGS) | |||
| AC_SUBST(USE_MD5SUM) | |||
| AC_DEFINE_UNQUOTED(USE_MD5SUM,"$USE_MD5SUM",[Using md5sum command line if available]) | |||
| AM_CONDITIONAL(USE_MD5SUM, $USE_MD5SUM) | |||
| # | |||
| # We need to establish suitable defaults for a 64-bit OS | |||
| @@ -228,7 +234,7 @@ if test "x$JACK_USE_MACH_THREADS" != "x"; then | |||
| fi | |||
| # headers | |||
| AC_CHECK_HEADERS(string.h strings.h alloca.h db.h, [], | |||
| AC_CHECK_HEADERS(string.h strings.h db.h, [], | |||
| AC_MSG_ERROR([*** a required header file is missing])) | |||
| AC_CHECK_HEADERS(getopt.h, [], [ | |||
| @@ -783,7 +789,7 @@ AC_SUBST(NETJACK_CFLAGS) | |||
| # Check which backend drivers can be built. The last one successfully | |||
| # configured becomes the default JACK driver; so the order of | |||
| # precedence is: alsa, sun, oss, coreaudio, portaudio, dummy. | |||
| # precedence is: alsa, sun, oss, coreaudio, portaudio, sndio, dummy. | |||
| JACK_DEFAULT_DRIVER=\"dummy\" | |||
| @@ -843,6 +849,20 @@ then | |||
| fi | |||
| AM_CONDITIONAL(HAVE_SUN, $HAVE_SUN) | |||
| AC_ARG_ENABLE(sndio, AC_HELP_STRING([--disable-sndio],[ignore sndio driver ]), | |||
| TRY_SNDIO=$enableval , TRY_SNDIO=yes ) | |||
| HAVE_SNDIO="false" | |||
| if test "x$TRY_SNDIO" = "xyes" | |||
| then | |||
| # check for sndio audio API | |||
| AC_CHECK_HEADER([sndio.h], | |||
| [HAVE_SNDIO="true" | |||
| JACK_DEFAULT_DRIVER=\"sndio\"]) | |||
| SNDIO_LIBS="-lsndio" | |||
| AC_SUBST([SNDIO_LIBS]) | |||
| fi | |||
| AM_CONDITIONAL(HAVE_SNDIO, $HAVE_SNDIO) | |||
| AC_ARG_ENABLE(freebob, AC_HELP_STRING([--disable-freebob],[ignore FreeBob driver ]), | |||
| TRY_FREEBOB=$enableval , TRY_FREEBOB=yes ) | |||
| HAVE_FREEBOB="false" | |||
| @@ -975,6 +995,7 @@ drivers/alsa_midi/Makefile | |||
| drivers/dummy/Makefile | |||
| drivers/oss/Makefile | |||
| drivers/sun/Makefile | |||
| drivers/sndio/Makefile | |||
| drivers/portaudio/Makefile | |||
| drivers/coreaudio/Makefile | |||
| drivers/freebob/Makefile | |||
| @@ -1006,6 +1027,7 @@ echo \| Build with old FireWire \(FreeBob\) support............. : $HAVE_FREEBOB | |||
| echo \| Build with new FireWire \(FFADO\) support............... : $HAVE_FIREWIRE | |||
| echo \| Build with OSS support................................ : $HAVE_OSS | |||
| echo \| Build with Sun audio support.......................... : $HAVE_SUN | |||
| echo \| Build with Sndio audio support........................ : $HAVE_SNDIO | |||
| echo \| Build with CoreAudio support.......................... : $HAVE_COREAUDIO | |||
| echo \| Build with PortAudio support.......................... : $HAVE_PA | |||
| echo \| Build with Celt support............................... : $HAVE_CELT | |||
| @@ -48,5 +48,11 @@ else | |||
| FIREWIRE_DIR = | |||
| endif | |||
| SUBDIRS = $(ALSA_MIDI_DIR) $(ALSA_DIR) dummy $(OSS_DIR) $(SUN_DIR) $(PA_DIR) $(CA_DIR) $(FREEBOB_DIR) $(FIREWIRE_DIR) netjack | |||
| DIST_SUBDIRS = alsa alsa_midi dummy oss sun portaudio coreaudio freebob firewire netjack | |||
| if HAVE_SNDIO | |||
| SNDIO_DIR = sndio | |||
| else | |||
| SNDIO_DIR = | |||
| endif | |||
| SUBDIRS = $(ALSA_MIDI_DIR) $(ALSA_DIR) dummy $(OSS_DIR) $(SUN_DIR) $(PA_DIR) $(CA_DIR) $(FREEBOB_DIR) $(FIREWIRE_DIR) ${SNDIO_DIR} netjack | |||
| DIST_SUBDIRS = alsa alsa_midi dummy oss sun portaudio coreaudio freebob firewire netjack sndio | |||
| @@ -111,6 +111,7 @@ dummy_driver_wait (dummy_driver_t *driver, int extra_fd, int *status, | |||
| { | |||
| jack_nframes_t nframes = driver->period_size; | |||
| struct timespec now; | |||
| struct timespec ts; | |||
| *status = 0; | |||
| /* this driver doesn't work so well if we report a delay */ | |||
| @@ -136,7 +137,9 @@ dummy_driver_wait (dummy_driver_t *driver, int extra_fd, int *status, | |||
| } | |||
| driver->next_wakeup = add_ts (driver->next_wakeup, driver->wait_time); | |||
| } else { | |||
| if (clock_nanosleep (CLOCK_REALTIME, TIMER_ABSTIME, &driver->next_wakeup, NULL)) { | |||
| ts.tv_sec = 0; | |||
| ts.tv_nsec = ts_to_nsec(driver->next_wakeup) - ts_to_nsec(now); | |||
| if (nanosleep (&ts, NULL)) { | |||
| jack_error ("error while sleeping"); | |||
| *status = -1; | |||
| } else { | |||
| @@ -0,0 +1,13 @@ | |||
| MAINTAINCLEANFILES = Makefile.in | |||
| AM_CFLAGS = $(JACK_CFLAGS) | |||
| plugindir = $(ADDON_DIR) | |||
| plugin_LTLIBRARIES = jack_sndio.la | |||
| jack_sndio_la_LDFLAGS = -module -avoid-version | |||
| jack_sndio_la_LIBADD = $(SNDIO_LIBS) | |||
| jack_sndio_la_SOURCES = sndio_driver.c sndio_driver.h | |||
| noinst_HEADERS = sndio_driver.h | |||
| @@ -0,0 +1,74 @@ | |||
| /* | |||
| * Copyright (c) 2009 Jacob Meuser <jakemsr@sdf.lonestar.org> | |||
| * | |||
| * Permission to use, copy, modify, and distribute this software for any | |||
| * purpose with or without fee is hereby granted, provided that the above | |||
| * copyright notice and this permission notice appear in all copies. | |||
| * | |||
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
| * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||
| * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||
| * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||
| * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
| */ | |||
| #ifndef __JACK_SNDIO_DRIVER_H__ | |||
| #define __JACK_SNDIO_DRIVER_H__ | |||
| #include <sys/types.h> | |||
| #include <pthread.h> | |||
| #include <semaphore.h> | |||
| #include <jack/types.h> | |||
| #include <jack/jslist.h> | |||
| #include <driver.h> | |||
| #include <jack/jack.h> | |||
| #define SNDIO_DRIVER_DEF_DEV "default" | |||
| #define SNDIO_DRIVER_DEF_FS 44100 | |||
| #define SNDIO_DRIVER_DEF_BLKSIZE 1024 | |||
| #define SNDIO_DRIVER_DEF_NPERIODS 2 | |||
| #define SNDIO_DRIVER_DEF_BITS 16 | |||
| #define SNDIO_DRIVER_DEF_INS 2 | |||
| #define SNDIO_DRIVER_DEF_OUTS 2 | |||
| typedef jack_default_audio_sample_t jack_sample_t; | |||
| typedef struct _sndio_driver | |||
| { | |||
| JACK_DRIVER_NT_DECL | |||
| jack_nframes_t sample_rate; | |||
| jack_nframes_t period_size; | |||
| jack_nframes_t orig_period_size; | |||
| unsigned int nperiods; | |||
| int bits; | |||
| unsigned int capture_channels; | |||
| unsigned int playback_channels; | |||
| jack_nframes_t sys_cap_latency; | |||
| jack_nframes_t sys_play_latency; | |||
| int ignorehwbuf; | |||
| struct sio_hdl *hdl; | |||
| char *dev; | |||
| void *capbuf; | |||
| size_t capbufsize; | |||
| void *playbuf; | |||
| size_t playbufsize; | |||
| JSList *capture_ports; | |||
| JSList *playback_ports; | |||
| int sample_bytes; | |||
| size_t pprime; | |||
| int poll_timeout; | |||
| jack_time_t poll_next; | |||
| jack_client_t *client; | |||
| } sndio_driver_t; | |||
| #endif | |||
| @@ -37,7 +37,11 @@ jack_md5.h: jackd | |||
| if STRIPPED_JACKD | |||
| strip -R .note -R .comment .libs/jackd | |||
| endif | |||
| if USE_MD5SUM | |||
| echo "#define JACKD_MD5_SUM \"`md5sum .libs/jackd | awk '{print $$1}'`\"" > jack_md5.h | |||
| else | |||
| echo "#define JACKD_MD5_SUM \"`md5 -q .libs/jackd | awk '{print $$1}'`\"" > jack_md5.h | |||
| endif | |||
| jackstart_SOURCES = jackstart.c md5.c | |||
| jackstart_LDFLAGS = -lcap | |||
| @@ -843,7 +843,7 @@ get_realtime_priority_constraint () | |||
| return constraint_ptr; | |||
| #else | |||
| return NULL | |||
| return NULL; | |||
| #endif | |||
| } | |||
| @@ -1429,7 +1429,7 @@ handle_external_client_request (jack_engine_t *engine, int fd) | |||
| if ((r = read (client->request_fd, &req, sizeof(req))) | |||
| < (ssize_t)sizeof(req)) { | |||
| if (r == 0) { | |||
| #ifdef JACK_USE_MACH_THREADS | |||
| #if defined(JACK_USE_MACH_THREADS) || defined(__OpenBSD__) | |||
| /* poll is implemented using | |||
| select (see the macosx/fakepoll | |||
| code). When the socket is closed | |||
| @@ -28,7 +28,7 @@ For the latest JACK information, please consult the web site, | |||
| .br | |||
| Select the audio interface backend. The current list of supported | |||
| backends is: \fBalsa\fR, \fBcoreaudio\fR, \fBdummy\fR, \fBfreebob\fR, | |||
| \fBoss\fR \fBsun\fR and \fBportaudio\fR. They are not all available | |||
| \fBoss\fR \fBsun\fR \fBportaudio\fR and \fB sndio. They are not all available | |||
| on all platforms. All \fIbackend\-parameters\fR are optional. | |||
| .TP | |||
| \fB\-h, \-\-help\fR | |||
| @@ -523,6 +523,43 @@ Driver name (default: none) | |||
| .TP | |||
| \fB\-z \-\-dither\fR | |||
| Dithering mode (default: none) | |||
| .SS SNDIO BACKEND PARAMETERS | |||
| .TP | |||
| \fB\-r, \-\-rate \fIint\fR | |||
| Specify the sample rate. The default is 44100. | |||
| .TP | |||
| \fB\-p, \-\-period \fIint\fR | |||
| Specify the number of frames between JACK \fBprocess()\fR calls. This | |||
| value must be a power of 2, and the default is 1024. If you need low | |||
| latency, set \fB\-p\fR as low as you can go without seeing xruns. A larger | |||
| period size yields higher latency, but makes xruns less likely. The JACK | |||
| capture latency in seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR. | |||
| Note that this value is mostly advisory when aucat server is running | |||
| and may be updated internally. | |||
| .TP | |||
| \fB\-n, \-\-nperiods \fIint\fR | |||
| Specify the number of periods in the hardware buffer. The default is | |||
| 2. The period size (\fB\-p\fR) times \fB\-\-nperiods\fR times four | |||
| (assuming 2 channels 16-bit samples) is the JACK buffer size in bytes. | |||
| The JACK output latency in seconds is \fB\-\-nperiods\fR times | |||
| \fB\-\-period\fR divided by \fB\-\-rate\fR. | |||
| Note that this value is mostly advisory when aucat server is running | |||
| and may be updated internally. | |||
| .TP | |||
| \fB\-w, \-\-wordlength \fIint\fR | |||
| Specify the sample size in bits. The default is 16. | |||
| .TP | |||
| \fB\-i, \-\-inchannels \fIint\fR | |||
| Specify how many channels to capture (default: 2) | |||
| .TP | |||
| \fB\-o, \-\-outchannels \fIint\fR | |||
| Specify number of playback channels (default: 2) | |||
| .TP | |||
| \fB\-d, \-\-device \fIdevice_file\fR | |||
| Specify device for capture and playback (default: NULL) | |||
| .TP | |||
| \fB\-b, \-\-ignorehwbuf \fIboolean\fR | |||
| Specify, whether to ignore hardware period size (default: false) | |||
| .SH "EXAMPLES" | |||
| .PP | |||
| Print usage message for the parameters specific to each backend. | |||
| @@ -544,6 +581,8 @@ Print usage message for the parameters specific to each backend. | |||
| \fBjackd \-d sun \-\-help\fR | |||
| .br | |||
| \fBjackd \-d portaudio \-\-help\fR | |||
| .br | |||
| \fBjackd \-d sndio \-\-help\fR | |||
| .PP | |||
| Run the JACK daemon with realtime priority using the first ALSA | |||
| hardware card defined in \fB/etc/modules.conf\fR. | |||
| @@ -537,7 +537,7 @@ static void usage (FILE *file) | |||
| #ifdef __APPLE__ | |||
| " Available backends may include: coreaudio, dummy, net, portaudio.\n\n" | |||
| #else | |||
| " Available backends may include: alsa, dummy, freebob, firewire, net, oss, sun, or portaudio.\n\n" | |||
| " Available backends may include: alsa, dummy, freebob, firewire, net, oss, sun, portaudio or sndio.\n\n" | |||
| #endif | |||
| " jackd -d backend --help\n" | |||
| " to display options for each backend\n\n"); | |||