- 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]) | AC_MSG_CHECKING([platform dependencies]) | ||||
HOST_DEFAULT_TMP_DIR=/dev/shm | HOST_DEFAULT_TMP_DIR=/dev/shm | ||||
USE_MD5SUM=1 | |||||
case "${host_os}" in | case "${host_os}" in | ||||
freebsd*) | freebsd*) | ||||
# current FreeBSD header files conflict with the OSS driver's | # current FreeBSD header files conflict with the OSS driver's | ||||
# barrier code, this may be fixed in 5.3, stay tuned. | # barrier code, this may be fixed in 5.3, stay tuned. | ||||
USE_BARRIER="no" | USE_BARRIER="no" | ||||
USE_MD5SUM=0 | |||||
;; | ;; | ||||
openbsd*) | openbsd*) | ||||
# pthread_barrier* not implemented | # pthread_barrier* not implemented | ||||
USE_BARRIER="no" | USE_BARRIER="no" | ||||
USE_MD5SUM=0 | |||||
# need small realtime stack | # need small realtime stack | ||||
JACK_THREAD_STACK_TOUCH=10000 | JACK_THREAD_STACK_TOUCH=10000 | ||||
;; | ;; | ||||
@@ -189,6 +192,9 @@ case "${host_os}" in | |||||
esac | esac | ||||
AC_SUBST(OS_LDFLAGS) | 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 | # 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 | fi | ||||
# headers | # 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_MSG_ERROR([*** a required header file is missing])) | ||||
AC_CHECK_HEADERS(getopt.h, [], [ | AC_CHECK_HEADERS(getopt.h, [], [ | ||||
@@ -783,7 +789,7 @@ AC_SUBST(NETJACK_CFLAGS) | |||||
# Check which backend drivers can be built. The last one successfully | # Check which backend drivers can be built. The last one successfully | ||||
# configured becomes the default JACK driver; so the order of | # 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\" | JACK_DEFAULT_DRIVER=\"dummy\" | ||||
@@ -843,6 +849,20 @@ then | |||||
fi | fi | ||||
AM_CONDITIONAL(HAVE_SUN, $HAVE_SUN) | 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 ]), | AC_ARG_ENABLE(freebob, AC_HELP_STRING([--disable-freebob],[ignore FreeBob driver ]), | ||||
TRY_FREEBOB=$enableval , TRY_FREEBOB=yes ) | TRY_FREEBOB=$enableval , TRY_FREEBOB=yes ) | ||||
HAVE_FREEBOB="false" | HAVE_FREEBOB="false" | ||||
@@ -975,6 +995,7 @@ drivers/alsa_midi/Makefile | |||||
drivers/dummy/Makefile | drivers/dummy/Makefile | ||||
drivers/oss/Makefile | drivers/oss/Makefile | ||||
drivers/sun/Makefile | drivers/sun/Makefile | ||||
drivers/sndio/Makefile | |||||
drivers/portaudio/Makefile | drivers/portaudio/Makefile | ||||
drivers/coreaudio/Makefile | drivers/coreaudio/Makefile | ||||
drivers/freebob/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 new FireWire \(FFADO\) support............... : $HAVE_FIREWIRE | ||||
echo \| Build with OSS support................................ : $HAVE_OSS | echo \| Build with OSS support................................ : $HAVE_OSS | ||||
echo \| Build with Sun audio support.......................... : $HAVE_SUN | 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 CoreAudio support.......................... : $HAVE_COREAUDIO | ||||
echo \| Build with PortAudio support.......................... : $HAVE_PA | echo \| Build with PortAudio support.......................... : $HAVE_PA | ||||
echo \| Build with Celt support............................... : $HAVE_CELT | echo \| Build with Celt support............................... : $HAVE_CELT | ||||
@@ -48,5 +48,11 @@ else | |||||
FIREWIRE_DIR = | FIREWIRE_DIR = | ||||
endif | 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; | jack_nframes_t nframes = driver->period_size; | ||||
struct timespec now; | struct timespec now; | ||||
struct timespec ts; | |||||
*status = 0; | *status = 0; | ||||
/* this driver doesn't work so well if we report a delay */ | /* 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); | driver->next_wakeup = add_ts (driver->next_wakeup, driver->wait_time); | ||||
} else { | } 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"); | jack_error ("error while sleeping"); | ||||
*status = -1; | *status = -1; | ||||
} else { | } 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 | if STRIPPED_JACKD | ||||
strip -R .note -R .comment .libs/jackd | strip -R .note -R .comment .libs/jackd | ||||
endif | endif | ||||
if USE_MD5SUM | |||||
echo "#define JACKD_MD5_SUM \"`md5sum .libs/jackd | awk '{print $$1}'`\"" > jack_md5.h | 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_SOURCES = jackstart.c md5.c | ||||
jackstart_LDFLAGS = -lcap | jackstart_LDFLAGS = -lcap | ||||
@@ -843,7 +843,7 @@ get_realtime_priority_constraint () | |||||
return constraint_ptr; | return constraint_ptr; | ||||
#else | #else | ||||
return NULL | |||||
return NULL; | |||||
#endif | #endif | ||||
} | } | ||||
@@ -1429,7 +1429,7 @@ handle_external_client_request (jack_engine_t *engine, int fd) | |||||
if ((r = read (client->request_fd, &req, sizeof(req))) | if ((r = read (client->request_fd, &req, sizeof(req))) | ||||
< (ssize_t)sizeof(req)) { | < (ssize_t)sizeof(req)) { | ||||
if (r == 0) { | if (r == 0) { | ||||
#ifdef JACK_USE_MACH_THREADS | |||||
#if defined(JACK_USE_MACH_THREADS) || defined(__OpenBSD__) | |||||
/* poll is implemented using | /* poll is implemented using | ||||
select (see the macosx/fakepoll | select (see the macosx/fakepoll | ||||
code). When the socket is closed | code). When the socket is closed | ||||
@@ -28,7 +28,7 @@ For the latest JACK information, please consult the web site, | |||||
.br | .br | ||||
Select the audio interface backend. The current list of supported | Select the audio interface backend. The current list of supported | ||||
backends is: \fBalsa\fR, \fBcoreaudio\fR, \fBdummy\fR, \fBfreebob\fR, | 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. | on all platforms. All \fIbackend\-parameters\fR are optional. | ||||
.TP | .TP | ||||
\fB\-h, \-\-help\fR | \fB\-h, \-\-help\fR | ||||
@@ -523,6 +523,43 @@ Driver name (default: none) | |||||
.TP | .TP | ||||
\fB\-z \-\-dither\fR | \fB\-z \-\-dither\fR | ||||
Dithering mode (default: none) | 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" | .SH "EXAMPLES" | ||||
.PP | .PP | ||||
Print usage message for the parameters specific to each backend. | 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 | \fBjackd \-d sun \-\-help\fR | ||||
.br | .br | ||||
\fBjackd \-d portaudio \-\-help\fR | \fBjackd \-d portaudio \-\-help\fR | ||||
.br | |||||
\fBjackd \-d sndio \-\-help\fR | |||||
.PP | .PP | ||||
Run the JACK daemon with realtime priority using the first ALSA | Run the JACK daemon with realtime priority using the first ALSA | ||||
hardware card defined in \fB/etc/modules.conf\fR. | hardware card defined in \fB/etc/modules.conf\fR. | ||||
@@ -537,7 +537,7 @@ static void usage (FILE *file) | |||||
#ifdef __APPLE__ | #ifdef __APPLE__ | ||||
" Available backends may include: coreaudio, dummy, net, portaudio.\n\n" | " Available backends may include: coreaudio, dummy, net, portaudio.\n\n" | ||||
#else | #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 | #endif | ||||
" jackd -d backend --help\n" | " jackd -d backend --help\n" | ||||
" to display options for each backend\n\n"); | " to display options for each backend\n\n"); | ||||