From e5a2e928beb895efe421d0bd05df7e9d842b2d12 Mon Sep 17 00:00:00 2001 From: joq Date: Thu, 11 Sep 2003 17:40:25 +0000 Subject: [PATCH] [0.81.2] dummy driver fixes; man page update git-svn-id: svn+ssh://jackaudio.org/trunk/jack@493 0c269be4-1314-0410-8aa9-9f06e86f4224 --- configure.in | 2 +- drivers/dummy/dummy_driver.c | 33 +++++++++++++++++++-------------- jackd/jackd.1.in | 8 +++++--- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/configure.in b/configure.in index 5febe06..d859a4e 100644 --- a/configure.in +++ b/configure.in @@ -14,7 +14,7 @@ dnl changes are made dnl --- JACK_MAJOR_VERSION=0 JACK_MINOR_VERSION=81 -JACK_MICRO_VERSION=1 +JACK_MICRO_VERSION=2 dnl --- dnl HOWTO: updating the jack protocal version diff --git a/drivers/dummy/dummy_driver.c b/drivers/dummy/dummy_driver.c index de94479..18c53e4 100644 --- a/drivers/dummy/dummy_driver.c +++ b/drivers/dummy/dummy_driver.c @@ -19,6 +19,7 @@ $Id$ */ +#include #include #include #include @@ -50,22 +51,25 @@ dummy_driver_audio_stop (dummy_driver_t *driver) } static jack_nframes_t -dummy_driver_wait (dummy_driver_t *driver, int extra_fd, int *status, float *delayed_usecs) +dummy_driver_wait (dummy_driver_t *driver, int extra_fd, int *status, + float *delayed_usecs) { - jack_time_t processing_time; - - processing_time = driver->last_wait_ust - ? jack_get_microseconds() - driver->last_wait_ust - : 0; - - if (processing_time < driver->wait_time) - usleep (driver->wait_time - processing_time); + jack_time_t starting_time = jack_get_microseconds(); + jack_time_t processing_time = (driver->last_wait_ust? + starting_time - driver->last_wait_ust: 0); + jack_time_t sleeping_time = driver->wait_time - processing_time; + /* JOQ: usleep() is inaccurate for small buffer sizes with Linux + * 2.4. I suspect it can't wait for less than one (or maybe even + * two) scheduler timeslices. Linux 2.6 is probably better. */ + if (sleeping_time > 0) + usleep (sleeping_time); driver->last_wait_ust = jack_get_microseconds (); + driver->engine->transport_cycle_start (driver->engine, driver->last_wait_ust); *status = 0; - *delayed_usecs = 0.0; + *delayed_usecs = driver->last_wait_ust - starting_time - sleeping_time; return driver->period_size; } @@ -198,8 +202,8 @@ dummy_driver_new (jack_client_t * client, driver->start = (JackDriverStartFunction) dummy_driver_audio_start; driver->stop = (JackDriverStopFunction) dummy_driver_audio_stop; - driver->period_usecs = (((float)period_size) / ((float)sample_rate)) / 1000000.0; - + driver->period_usecs = + (jack_time_t) floor ((((float) period_size) / sample_rate) * 1000000.0f); driver->sample_rate = sample_rate; driver->period_size = period_size; driver->wait_time = wait_time; @@ -321,8 +325,9 @@ driver_initialize (jack_client_t *client, int argc, char **argv) if (!wait_time_set) wait_time = (((float)period_size) / ((float)sample_rate)) * 1000000.0; - return dummy_driver_new (client, "dummy_pcm", capture_ports, playback_ports, - sample_rate, period_size, wait_time); + return dummy_driver_new (client, "dummy_pcm", capture_ports, + playback_ports, sample_rate, period_size, + wait_time); } void diff --git a/jackd/jackd.1.in b/jackd/jackd.1.in index 7a62f02..f92bc66 100644 --- a/jackd/jackd.1.in +++ b/jackd/jackd.1.in @@ -1,4 +1,4 @@ -.TH JACKD "1" @VERSION@ "June 2003" +.TH JACKD "1" @VERSION@ "Sept. 2003" .SH NAME jackd, jackstart \- JACK Audio Connection Kit sound server .SH SYNOPSYS @@ -97,13 +97,15 @@ Specify the sample rate. The default is 48000. Specify the number of frames between JACK \fBprocess()\fR calls. 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. +latency, but makes xruns less likely. The JACK input latency in +seconds is \fB\-\-period\fR divided by \fB\-\-rate\fR. .TP \fB\-n, \-\-nperiods \fIint\fR .br 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 is -the JACK buffer size in bytes. +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. .TP \fB\-D, \-\-duplex\fR Provide both capture and playback ports (the default).