diff options
Diffstat (limited to 'drivers/oss/oss_driver.c')
-rw-r--r-- | drivers/oss/oss_driver.c | 1426 |
1 files changed, 668 insertions, 758 deletions
diff --git a/drivers/oss/oss_driver.c b/drivers/oss/oss_driver.c index 2289e49..f53a2dd 100644 --- a/drivers/oss/oss_driver.c +++ b/drivers/oss/oss_driver.c @@ -1,24 +1,24 @@ /* - OSS driver for Jack - Copyright (C) 2003-2007 Jussi Laako <jussi@sonarnerd.net> + OSS driver for Jack + Copyright (C) 2003-2007 Jussi Laako <jussi@sonarnerd.net> - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, - MA 02111-1307 USA + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, + MA 02111-1307 USA -*/ + */ #include <config.h> @@ -31,7 +31,7 @@ * defined as optional by the standard, so OS conformance to this level * doesn't necessarily mean everything exists. */ -#define _XOPEN_SOURCE 600 +#define _XOPEN_SOURCE 600 #endif #ifndef _REENTRANT #define _REENTRANT @@ -70,103 +70,92 @@ #ifndef SNDCTL_DSP_COOKEDMODE #ifdef _SIOWR -#define SNDCTL_DSP_COOKEDMODE _SIOWR('P', 30, int) +#define SNDCTL_DSP_COOKEDMODE _SIOWR ('P', 30, int) #else /* _SIOWR */ #warning "Unable to define cooked mode!" #define OSS_NO_COOKED_MODE #endif /* _SIOWR */ #endif /* SNDCTL_DSP_COOKEDMODE */ -#define OSS_DRIVER_N_PARAMS 11 +#define OSS_DRIVER_N_PARAMS 11 const static jack_driver_param_desc_t oss_params[OSS_DRIVER_N_PARAMS] = { { "rate", - 'r', - JackDriverParamUInt, - { .ui = OSS_DRIVER_DEF_FS }, - NULL, - "sample rate", - "sample rate" - }, + 'r', + JackDriverParamUInt, + { .ui = OSS_DRIVER_DEF_FS }, + NULL, + "sample rate", + "sample rate" }, { "period", - 'p', - JackDriverParamUInt, - { .ui = OSS_DRIVER_DEF_BLKSIZE }, - NULL, - "period size", - "period size" - }, + 'p', + JackDriverParamUInt, + { .ui = OSS_DRIVER_DEF_BLKSIZE }, + NULL, + "period size", + "period size" }, { "nperiods", - 'n', - JackDriverParamUInt, - { .ui = OSS_DRIVER_DEF_NPERIODS }, - NULL, - "number of periods in buffer", - "number of periods in buffer" - }, + 'n', + JackDriverParamUInt, + { .ui = OSS_DRIVER_DEF_NPERIODS }, + NULL, + "number of periods in buffer", + "number of periods in buffer" }, { "wordlength", - 'w', - JackDriverParamInt, - { .i = OSS_DRIVER_DEF_BITS }, - NULL, - "word length", - "word length" - }, + 'w', + JackDriverParamInt, + { .i = OSS_DRIVER_DEF_BITS }, + NULL, + "word length", + "word length" }, { "inchannels", - 'i', - JackDriverParamUInt, - { .ui = OSS_DRIVER_DEF_INS }, - NULL, - "capture channels", - "capture channels" - }, + 'i', + JackDriverParamUInt, + { .ui = OSS_DRIVER_DEF_INS }, + NULL, + "capture channels", + "capture channels" }, { "outchannels", - 'o', - JackDriverParamUInt, - { .ui = OSS_DRIVER_DEF_OUTS }, - NULL, - "playback channels", - "playback channels" - }, + 'o', + JackDriverParamUInt, + { .ui = OSS_DRIVER_DEF_OUTS }, + NULL, + "playback channels", + "playback channels" }, { "capture", - 'C', - JackDriverParamString, - { .str = OSS_DRIVER_DEF_DEV }, - NULL, - "input device", - "input device" - }, + 'C', + JackDriverParamString, + { .str = OSS_DRIVER_DEF_DEV }, + NULL, + "input device", + "input device" }, { "playback", - 'P', - JackDriverParamString, - { .str = OSS_DRIVER_DEF_DEV }, - NULL, - "output device", - "output device" - }, + 'P', + JackDriverParamString, + { .str = OSS_DRIVER_DEF_DEV }, + NULL, + "output device", + "output device" }, { "ignorehwbuf", - 'b', - JackDriverParamBool, - { }, - NULL, - "ignore hardware period size", - "ignore hardware period size" - }, + 'b', + JackDriverParamBool, + { }, + NULL, + "ignore hardware period size", + "ignore hardware period size" }, { "input latency", - 'I', - JackDriverParamUInt, - { .ui = 0 }, - NULL, - "system input latency", - "system input latency" - }, + 'I', + JackDriverParamUInt, + { .ui = 0 }, + NULL, + "system input latency", + "system input latency" }, { "output latency", - 'O', - JackDriverParamUInt, - { .ui = 0 }, - NULL, - "system output latency", - "system output latency" - } + 'O', + JackDriverParamUInt, + { .ui = 0 }, + NULL, + "system output latency", + "system output latency" } }; @@ -174,16 +163,16 @@ const static jack_driver_param_desc_t oss_params[OSS_DRIVER_N_PARAMS] = { /* internal functions */ -static void set_period_size (oss_driver_t *driver, - jack_nframes_t new_period_size) +static void set_period_size (oss_driver_t *driver, + jack_nframes_t new_period_size) { driver->period_size = new_period_size; - driver->period_usecs = - ((double) driver->period_size / - (double) driver->sample_rate) * 1e6; + driver->period_usecs = + ((double)driver->period_size / + (double)driver->sample_rate) * 1e6; driver->last_wait_ust = 0; - driver->last_periodtime = driver->engine->get_microseconds(); + driver->last_periodtime = driver->engine->get_microseconds (); driver->next_periodtime = 0; driver->iodelay = 0.0F; } @@ -191,15 +180,13 @@ static void set_period_size (oss_driver_t *driver, static inline void update_times (oss_driver_t *driver) { - driver->last_periodtime = driver->engine->get_microseconds(); - if (driver->next_periodtime > 0) - { + driver->last_periodtime = driver->engine->get_microseconds (); + if (driver->next_periodtime > 0) { driver->iodelay = (float) - ((long double) driver->last_periodtime - - (long double) driver->next_periodtime); - } - else driver->iodelay = 0.0F; - driver->next_periodtime = + ((long double)driver->last_periodtime - + (long double)driver->next_periodtime); + } else { driver->iodelay = 0.0F; } + driver->next_periodtime = driver->last_periodtime + driver->period_usecs; } @@ -207,120 +194,110 @@ static inline void update_times (oss_driver_t *driver) static inline void driver_cycle (oss_driver_t *driver) { - update_times(driver); - driver->engine->transport_cycle_start(driver->engine, - driver->last_periodtime); + update_times (driver); + driver->engine->transport_cycle_start (driver->engine, + driver->last_periodtime); driver->last_wait_ust = driver->last_periodtime; - driver->engine->run_cycle(driver->engine, - driver->period_size, driver->iodelay); + driver->engine->run_cycle (driver->engine, + driver->period_size, driver->iodelay); } -static void copy_and_convert_in (jack_sample_t *dst, void *src, - size_t nframes, int channel, int chcount, int bits) +static void copy_and_convert_in (jack_sample_t *dst, void *src, + size_t nframes, int channel, int chcount, int bits) { int srcidx; int dstidx; - signed short *s16src = (signed short *) src; - signed int *s32src = (signed int *) src; - double *f64src = (double *) src; + signed short *s16src = (signed short*)src; + signed int *s32src = (signed int*)src; + double *f64src = (double*)src; jack_sample_t scale; srcidx = channel; - switch (bits) - { - case 16: - scale = 1.0f / 0x7fff; - for (dstidx = 0; dstidx < nframes; dstidx++) - { - dst[dstidx] = (jack_sample_t) - s16src[srcidx] * scale; - srcidx += chcount; - } - break; - case 24: - scale = 1.0f / 0x7fffff; - for (dstidx = 0; dstidx < nframes; dstidx++) - { - dst[dstidx] = (jack_sample_t) - s32src[srcidx] * scale; - srcidx += chcount; - } - break; - case 32: - scale = 1.0f / 0x7fffffff; - for (dstidx = 0; dstidx < nframes; dstidx++) - { - dst[dstidx] = (jack_sample_t) - s32src[srcidx] * scale; - srcidx += chcount; - } - break; - case 64: - for (dstidx = 0; dstidx < nframes; dstidx++) - { - dst[dstidx] = (jack_sample_t) f64src[srcidx]; - srcidx += chcount; - } - break; + switch (bits) { + case 16: + scale = 1.0f / 0x7fff; + for (dstidx = 0; dstidx < nframes; dstidx++) { + dst[dstidx] = (jack_sample_t) + s16src[srcidx] * scale; + srcidx += chcount; + } + break; + case 24: + scale = 1.0f / 0x7fffff; + for (dstidx = 0; dstidx < nframes; dstidx++) { + dst[dstidx] = (jack_sample_t) + s32src[srcidx] * scale; + srcidx += chcount; + } + break; + case 32: + scale = 1.0f / 0x7fffffff; + for (dstidx = 0; dstidx < nframes; dstidx++) { + dst[dstidx] = (jack_sample_t) + s32src[srcidx] * scale; + srcidx += chcount; + } + break; + case 64: + for (dstidx = 0; dstidx < nframes; dstidx++) { + dst[dstidx] = (jack_sample_t)f64src[srcidx]; + srcidx += chcount; + } + break; } } -static void copy_and_convert_out (void *dst, jack_sample_t *src, - size_t nframes, int channel, int chcount, int bits) +static void copy_and_convert_out (void *dst, jack_sample_t *src, + size_t nframes, int channel, int chcount, int bits) { int srcidx; int dstidx; - signed short *s16dst = (signed short *) dst; - signed int *s32dst = (signed int *) dst; - double *f64dst = (double *) dst; + signed short *s16dst = (signed short*)dst; + signed int *s32dst = (signed int*)dst; + double *f64dst = (double*)dst; jack_sample_t scale; dstidx = channel; - switch (bits) - { - case 16: - scale = 0x7fff; - for (srcidx = 0; srcidx < nframes; srcidx++) - { - s16dst[dstidx] = (signed short) - (src[srcidx] >= 0.0f) ? - (src[srcidx] * scale + 0.5f) : - (src[srcidx] * scale - 0.5f); - dstidx += chcount; - } - break; - case 24: - scale = 0x7fffff; - for (srcidx = 0; srcidx < nframes; srcidx++) - { - s32dst[dstidx] = (signed int) - (src[srcidx] >= 0.0f) ? - (src[srcidx] * scale + 0.5f) : - (src[srcidx] * scale - 0.5f); - dstidx += chcount; - } - break; - case 32: - scale = 0x7fffffff; - for (srcidx = 0; srcidx < nframes; srcidx++) - { - s32dst[dstidx] = (signed int) - (src[srcidx] >= 0.0f) ? - (src[srcidx] * scale + 0.5f) : - (src[srcidx] * scale - 0.5f); - dstidx += chcount; - } - break; - case 64: - for (srcidx = 0; srcidx < nframes; srcidx++) - { - f64dst[dstidx] = (double) src[srcidx]; - dstidx += chcount; - } - break; + switch (bits) { + case 16: + scale = 0x7fff; + for (srcidx = 0; srcidx < nframes; srcidx++) { + s16dst[dstidx] = (signed short) + (src[srcidx] >= 0.0f) ? + (src[srcidx] * scale + 0.5f) : + (src[srcidx] * scale - 0.5f); + dstidx += chcount; + } + break; + case 24: + scale = 0x7fffff; + for (srcidx = 0; srcidx < nframes; srcidx++) { + s32dst[dstidx] = (signed int) + (src[srcidx] >= 0.0f) ? + (src[srcidx] * scale + 0.5f) : + (src[srcidx] * scale - 0.5f); + dstidx += chcount; + } + break; + case 32: + scale = 0x7fffffff; + for (srcidx = 0; srcidx < nframes; srcidx++) { + s32dst[dstidx] = (signed int) + (src[srcidx] >= 0.0f) ? + (src[srcidx] * scale + 0.5f) : + (src[srcidx] * scale - 0.5f); + dstidx += chcount; + } + break; + case 64: + for (srcidx = 0; srcidx < nframes; srcidx++) { + f64dst[dstidx] = (double)src[srcidx]; + dstidx += chcount; + } + break; } } @@ -330,12 +307,11 @@ static void set_fragment (int fd, size_t fragsize, unsigned int fragcount) int fragsize_2p; int fragments; - fragsize_2p = (int) (log(fragsize) / log(2.0) + 0.5); + fragsize_2p = (int)(log (fragsize) / log (2.0) + 0.5); fragments = ((fragcount << 16) | (fragsize_2p & 0xffff)); - if (ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &fragments) < 0) - { - jack_error("OSS: failed to set fragment size: %s@%i, errno=%d", - __FILE__, __LINE__, errno); + if (ioctl (fd, SNDCTL_DSP_SETFRAGMENT, &fragments) < 0) { + jack_error ("OSS: failed to set fragment size: %s@%i, errno=%d", + __FILE__, __LINE__, errno); } } @@ -344,17 +320,16 @@ static int get_fragment (int fd) { int fragsize; - if (ioctl(fd, SNDCTL_DSP_GETBLKSIZE, &fragsize) < 0) - { - jack_error("OSS: failed to get fragment size: %s@%i, errno=%d", - __FILE__, __LINE__, errno); + if (ioctl (fd, SNDCTL_DSP_GETBLKSIZE, &fragsize) < 0) { + jack_error ("OSS: failed to get fragment size: %s@%i, errno=%d", + __FILE__, __LINE__, errno); return 0; } return fragsize; } -static void *io_thread (void *); +static void *io_thread(void *); /* jack driver interface */ @@ -369,54 +344,50 @@ static int oss_driver_attach (oss_driver_t *driver, jack_engine_t *engine) jack_latency_range_t range; driver->engine = engine; - set_period_size(driver, driver->period_size); + set_period_size (driver, driver->period_size); - if (engine->set_buffer_size(engine, driver->period_size)) { + if (engine->set_buffer_size (engine, driver->period_size)) { jack_error ("OSS: cannot set engine buffer size to %d (check MIDI)", driver->period_size); return -1; } - engine->set_sample_rate(engine, driver->sample_rate); - - port_flags = JackPortIsOutput|JackPortIsPhysical|JackPortIsTerminal; - for (channel = 0; channel < driver->capture_channels; channel++) - { - snprintf(channel_name, sizeof(channel_name), - "capture_%u", channel + 1); - port = jack_port_register(driver->client, channel_name, - JACK_DEFAULT_AUDIO_TYPE, port_flags, 0); - if (port == NULL) - { - jack_error("OSS: cannot register port for %s: %s@%i", - channel_name, __FILE__, __LINE__); + engine->set_sample_rate (engine, driver->sample_rate); + + port_flags = JackPortIsOutput | JackPortIsPhysical | JackPortIsTerminal; + for (channel = 0; channel < driver->capture_channels; channel++) { + snprintf (channel_name, sizeof(channel_name), + "capture_%u", channel + 1); + port = jack_port_register (driver->client, channel_name, + JACK_DEFAULT_AUDIO_TYPE, port_flags, 0); + if (port == NULL) { + jack_error ("OSS: cannot register port for %s: %s@%i", + channel_name, __FILE__, __LINE__); break; } range.min = range.max = driver->period_size + driver->sys_in_latency; - jack_port_set_latency_range(port, JackCaptureLatency, &range); - driver->capture_ports = - jack_slist_append(driver->capture_ports, port); + jack_port_set_latency_range (port, JackCaptureLatency, &range); + driver->capture_ports = + jack_slist_append (driver->capture_ports, port); } - port_flags = JackPortIsInput|JackPortIsPhysical|JackPortIsTerminal; - for (channel = 0; channel < driver->playback_channels; channel++) - { - snprintf(channel_name, sizeof(channel_name), - "playback_%u", channel + 1); - port = jack_port_register(driver->client, channel_name, - JACK_DEFAULT_AUDIO_TYPE, port_flags, 0); - if (port == NULL) - { - jack_error("OSS: cannot register port for %s: %s@%i", - channel_name, __FILE__, __LINE__); + port_flags = JackPortIsInput | JackPortIsPhysical | JackPortIsTerminal; + for (channel = 0; channel < driver->playback_channels; channel++) { + snprintf (channel_name, sizeof(channel_name), + "playback_%u", channel + 1); + port = jack_port_register (driver->client, channel_name, + JACK_DEFAULT_AUDIO_TYPE, port_flags, 0); + if (port == NULL) { + jack_error ("OSS: cannot register port for %s: %s@%i", + channel_name, __FILE__, __LINE__); break; } range.min = range.max = driver->period_size + driver->sys_out_latency; - jack_port_set_latency_range(port, JackPlaybackLatency, &range); + jack_port_set_latency_range (port, JackPlaybackLatency, &range); driver->playback_ports = - jack_slist_append(driver->playback_ports, port); + jack_slist_append (driver->playback_ports, port); } - jack_activate(driver->client); + jack_activate (driver->client); return 0; } @@ -426,29 +397,28 @@ static int oss_driver_detach (oss_driver_t *driver, jack_engine_t *engine) { JSList *node; - if (driver->engine == NULL) + if (driver->engine == NULL) { return -1; + } /*jack_deactivate(driver->client);*/ /* ? */ node = driver->capture_ports; - while (node != NULL) - { - jack_port_unregister(driver->client, - ((jack_port_t *) node->data)); - node = jack_slist_next(node); + while (node != NULL) { + jack_port_unregister (driver->client, + ((jack_port_t*)node->data)); + node = jack_slist_next (node); } - jack_slist_free(driver->capture_ports); + jack_slist_free (driver->capture_ports); driver->capture_ports = NULL; node = driver->playback_ports; - while (node != NULL) - { - jack_port_unregister(driver->client, - ((jack_port_t *) node->data)); - node = jack_slist_next(node); + while (node != NULL) { + jack_port_unregister (driver->client, + ((jack_port_t*)node->data)); + node = jack_slist_next (node); } - jack_slist_free(driver->playback_ports); + jack_slist_free (driver->playback_ports); driver->playback_ports = NULL; driver->engine = NULL; @@ -471,298 +441,271 @@ static int oss_driver_start (oss_driver_t *driver) const char *indev = driver->indev; const char *outdev = driver->outdev; - switch (driver->bits) - { - case 24: - case 32: - samplesize = sizeof(int); - break; - case 64: - samplesize = sizeof(double); - break; - case 16: - default: - samplesize = sizeof(short); - break; + switch (driver->bits) { + case 24: + case 32: + samplesize = sizeof(int); + break; + case 64: + samplesize = sizeof(double); + break; + case 16: + default: + samplesize = sizeof(short); + break; } driver->trigger = 0; - if (strcmp(indev, outdev) != 0) - { - if (driver->capture_channels > 0) - { - infd = open(indev, O_RDONLY|O_EXCL); - if (infd < 0) - { - jack_error( + if (strcmp (indev, outdev) != 0) { + if (driver->capture_channels > 0) { + infd = open (indev, O_RDONLY | O_EXCL); + if (infd < 0) { + jack_error ( "OSS: failed to open input device %s: %s@%i, errno=%d", indev, __FILE__, __LINE__, errno); } #ifndef OSS_NO_COOKED_MODE - ioctl(infd, SNDCTL_DSP_COOKEDMODE, &flags); + ioctl (infd, SNDCTL_DSP_COOKEDMODE, &flags); #endif - fragsize = driver->period_size * - driver->capture_channels * samplesize; - set_fragment(infd, fragsize, driver->nperiods); - } - else infd = -1; - - if (driver->playback_channels > 0) - { - outfd = open(outdev, O_WRONLY|O_EXCL); - if (outfd < 0) - { - jack_error( + fragsize = driver->period_size * + driver->capture_channels * samplesize; + set_fragment (infd, fragsize, driver->nperiods); + } else { infd = -1; } + + if (driver->playback_channels > 0) { + outfd = open (outdev, O_WRONLY | O_EXCL); + if (outfd < 0) { + jack_error ( "OSS: failed to open output device %s: %s@%i, errno=%d", outdev, __FILE__, __LINE__, errno); } #ifndef OSS_NO_COOKED_MODE - ioctl(outfd, SNDCTL_DSP_COOKEDMODE, &flags); + ioctl (outfd, SNDCTL_DSP_COOKEDMODE, &flags); #endif - fragsize = driver->period_size * - driver->playback_channels * samplesize; - set_fragment(outfd, fragsize, driver->nperiods); - } - else outfd = -1; - } - else - { + fragsize = driver->period_size * + driver->playback_channels * samplesize; + set_fragment (outfd, fragsize, driver->nperiods); + } else { outfd = -1; } + } else { if (driver->capture_channels != 0 && - driver->playback_channels == 0) - { - infd = open(indev, O_RDWR|O_EXCL); + driver->playback_channels == 0) { + infd = open (indev, O_RDWR | O_EXCL); outfd = -1; - if (infd < 0) - { - jack_error( + if (infd < 0) { + jack_error ( "OSS: failed to open device %s: %s@%i, errno=%d", indev, __FILE__, __LINE__, errno); return -1; } #ifndef OSS_NO_COOKED_MODE - ioctl(infd, SNDCTL_DSP_COOKEDMODE, &flags); + ioctl (infd, SNDCTL_DSP_COOKEDMODE, &flags); #endif - } - else if (driver->capture_channels == 0 && - driver->playback_channels != 0) - { + } else if (driver->capture_channels == 0 && + driver->playback_channels != 0) { infd = -1; - outfd = open(outdev, O_RDWR|O_EXCL); - if (outfd < 0) - { - jack_error( + outfd = open (outdev, O_RDWR | O_EXCL); + if (outfd < 0) { + jack_error ( "OSS: failed to open device %s: %s@%i, errno=%d", outdev, __FILE__, __LINE__, errno); return -1; } #ifndef OSS_NO_COOKED_MODE - ioctl(outfd, SNDCTL_DSP_COOKEDMODE, &flags); + ioctl (outfd, SNDCTL_DSP_COOKEDMODE, &flags); #endif - } - else - { - infd = outfd = open(indev, O_RDWR|O_EXCL); - if (infd < 0) - { - jack_error( + } else { + infd = outfd = open (indev, O_RDWR | O_EXCL); + if (infd < 0) { + jack_error ( "OSS: failed to open device %s: %s@%i, errno=%d", indev, __FILE__, __LINE__, errno); return -1; } #ifndef OSS_NO_COOKED_MODE - ioctl(infd, SNDCTL_DSP_COOKEDMODE, &flags); + ioctl (infd, SNDCTL_DSP_COOKEDMODE, &flags); #endif } - if (infd >= 0 && outfd >= 0) - { - ioctl(outfd, SNDCTL_DSP_SETTRIGGER, &driver->trigger); - driver->trigger = (PCM_ENABLE_INPUT|PCM_ENABLE_OUTPUT); - if (ioctl(infd, SNDCTL_DSP_SETDUPLEX, 0) < 0) - { - if (errno != EINVAL) /* Dont care */ - jack_error( + if (infd >= 0 && outfd >= 0) { + ioctl (outfd, SNDCTL_DSP_SETTRIGGER, &driver->trigger); + driver->trigger = (PCM_ENABLE_INPUT | PCM_ENABLE_OUTPUT); + if (ioctl (infd, SNDCTL_DSP_SETDUPLEX, 0) < 0) { + if (errno != EINVAL) { /* Dont care */ + jack_error ( "OSS: failed to enable full duplex for %s: %s@%i, errno=%d", indev, __FILE__, __LINE__, errno); + } } } - if (infd >= 0) - { - fragsize = driver->period_size * - driver->capture_channels * samplesize; - set_fragment(infd, fragsize, driver->nperiods); + if (infd >= 0) { + fragsize = driver->period_size * + driver->capture_channels * samplesize; + set_fragment (infd, fragsize, driver->nperiods); } - if (outfd >= 0 && infd < 0) - { - fragsize = driver->period_size * - driver->playback_channels * samplesize; - set_fragment(outfd, fragsize, driver->nperiods); + if (outfd >= 0 && infd < 0) { + fragsize = driver->period_size * + driver->playback_channels * samplesize; + set_fragment (outfd, fragsize, driver->nperiods); } } driver->infd = infd; driver->outfd = outfd; - - if (infd >= 0) - { + + if (infd >= 0) { format = driver->format; - if (ioctl(infd, SNDCTL_DSP_SETFMT, &format) < 0) - jack_error( - "OSS: failed to set format for %s: %s@%i, errno=%d", + if (ioctl (infd, SNDCTL_DSP_SETFMT, &format) < 0) { + jack_error ( + "OSS: failed to set format for %s: %s@%i, errno=%d", indev, __FILE__, __LINE__, errno); + } channels = driver->capture_channels; - if (ioctl(infd, SNDCTL_DSP_CHANNELS, &channels) < 0) - jack_error( - "OSS: failed to set channels for %s: %s@%i, errno=%d", + if (ioctl (infd, SNDCTL_DSP_CHANNELS, &channels) < 0) { + jack_error ( + "OSS: failed to set channels for %s: %s@%i, errno=%d", indev, __FILE__, __LINE__, errno); + } samplerate = driver->sample_rate; - if (ioctl(infd, SNDCTL_DSP_SPEED, &samplerate) < 0) - jack_error( - "OSS: failed to set samplerate for %s: %s@%i, errno=%d", + if (ioctl (infd, SNDCTL_DSP_SPEED, &samplerate) < 0) { + jack_error ( + "OSS: failed to set samplerate for %s: %s@%i, errno=%d", indev, __FILE__, __LINE__, errno); - jack_info("oss_driver: %s : 0x%x/%i/%i (%i)", indev, - format, channels, samplerate, get_fragment(infd)); - - period_size = get_fragment(infd) / samplesize / channels; - if (period_size != driver->period_size && - !driver->ignorehwbuf) - { - jack_info("oss_driver: period size update: %u", - period_size); + } + jack_info ("oss_driver: %s : 0x%x/%i/%i (%i)", indev, + format, channels, samplerate, get_fragment (infd)); + + period_size = get_fragment (infd) / samplesize / channels; + if (period_size != driver->period_size && + !driver->ignorehwbuf) { + jack_info ("oss_driver: period size update: %u", + period_size); driver->period_size = period_size; - driver->period_usecs = - ((double) driver->period_size / - (double) driver->sample_rate) * 1e6; - if (driver->engine->set_buffer_size(driver->engine, - driver->period_size)) { + driver->period_usecs = + ((double)driver->period_size / + (double)driver->sample_rate) * 1e6; + if (driver->engine->set_buffer_size (driver->engine, + driver->period_size)) { jack_error ("OSS: cannot set engine buffer size to %d (check MIDI)", driver->period_size); return -1; } } } - if (outfd >= 0 && infd != outfd) - { + if (outfd >= 0 && infd != outfd) { format = driver->format; - if (ioctl(outfd, SNDCTL_DSP_SETFMT, &format) < 0) - jack_error( - "OSS: failed to set format for %s: %s@%i, errno=%d", + if (ioctl (outfd, SNDCTL_DSP_SETFMT, &format) < 0) { + jack_error ( + "OSS: failed to set format for %s: %s@%i, errno=%d", outdev, __FILE__, __LINE__, errno); + } channels = driver->playback_channels; - if (ioctl(outfd, SNDCTL_DSP_CHANNELS, &channels) < 0) - jack_error( - "OSS: failed to set channels for %s: %s@%i, errno=%d", + if (ioctl (outfd, SNDCTL_DSP_CHANNELS, &channels) < 0) { + jack_error ( + "OSS: failed to set channels for %s: %s@%i, errno=%d", outdev, __FILE__, __LINE__, errno); + } samplerate = driver->sample_rate; - if (ioctl(outfd, SNDCTL_DSP_SPEED, &samplerate) < 0) - jack_error( - "OSS: failed to set samplerate for %s: %s@%i, errno=%d", + if (ioctl (outfd, SNDCTL_DSP_SPEED, &samplerate) < 0) { + jack_error ( + "OSS: failed to set samplerate for %s: %s@%i, errno=%d", outdev, __FILE__, __LINE__, errno); - jack_info("oss_driver: %s : 0x%x/%i/%i (%i)", outdev, - format, channels, samplerate, - get_fragment(outfd)); + } + jack_info ("oss_driver: %s : 0x%x/%i/%i (%i)", outdev, + format, channels, samplerate, + get_fragment (outfd)); - period_size = get_fragment(outfd) / samplesize / channels; + period_size = get_fragment (outfd) / samplesize / channels; if (period_size != driver->period_size && - !driver->ignorehwbuf) - { - jack_info("oss_driver: period size update: %u", - period_size); + !driver->ignorehwbuf) { + jack_info ("oss_driver: period size update: %u", + period_size); driver->period_size = period_size; - driver->period_usecs = - ((double) driver->period_size / - (double) driver->sample_rate) * 1e6; - if (driver->engine->set_buffer_size(driver->engine, - driver->period_size)) { + driver->period_usecs = + ((double)driver->period_size / + (double)driver->sample_rate) * 1e6; + if (driver->engine->set_buffer_size (driver->engine, + driver->period_size)) { jack_error ("OSS: cannot set engine buffer size to %d (check MIDI)", driver->period_size); return -1; } } } - if (driver->capture_channels > 0) - { - driver->indevbufsize = driver->period_size * - driver->capture_channels * samplesize; - driver->indevbuf = malloc(driver->indevbufsize); - if (driver->indevbuf == NULL) - { - jack_error( "OSS: malloc() failed: %s@%i", - __FILE__, __LINE__); + if (driver->capture_channels > 0) { + driver->indevbufsize = driver->period_size * + driver->capture_channels * samplesize; + driver->indevbuf = malloc (driver->indevbufsize); + if (driver->indevbuf == NULL) { + jack_error ( "OSS: malloc() failed: %s@%i", + __FILE__, __LINE__); return -1; } - memset(driver->indevbuf, 0x00, driver->indevbufsize); - } - else - { + memset (driver->indevbuf, 0x00, driver->indevbufsize); + } else { driver->indevbufsize = 0; driver->indevbuf = NULL; } - if (driver->playback_channels > 0) - { - driver->outdevbufsize = driver->period_size * - driver->playback_channels * samplesize; - driver->outdevbuf = malloc(driver->outdevbufsize); - if (driver->outdevbuf == NULL) - { - jack_error("OSS: malloc() failed: %s@%i", - __FILE__, __LINE__); + if (driver->playback_channels > 0) { + driver->outdevbufsize = driver->period_size * + driver->playback_channels * samplesize; + driver->outdevbuf = malloc (driver->outdevbufsize); + if (driver->outdevbuf == NULL) { + jack_error ("OSS: malloc() failed: %s@%i", + __FILE__, __LINE__); return -1; } - memset(driver->outdevbuf, 0x00, driver->outdevbufsize); - } - else - { + memset (driver->outdevbuf, 0x00, driver->outdevbufsize); + } else { driver->outdevbufsize = 0; driver->outdevbuf = NULL; } - jack_info("oss_driver: indevbuf %zd B, outdevbuf %zd B", - driver->indevbufsize, driver->outdevbufsize); - - pthread_mutex_init(&driver->mutex_in, NULL); - pthread_mutex_init(&driver->mutex_out, NULL); -# ifdef USE_BARRIER - puts("oss_driver: using barrier mode, (dual thread)"); - pthread_barrier_init(&driver->barrier, NULL, 2); -# else - puts("oss_driver: not using barrier mode, (single thread)"); -# endif - sem_init(&driver->sem_start, 0, 0); + jack_info ("oss_driver: indevbuf %zd B, outdevbuf %zd B", + driver->indevbufsize, driver->outdevbufsize); + + pthread_mutex_init (&driver->mutex_in, NULL); + pthread_mutex_init (&driver->mutex_out, NULL); +# ifdef USE_BARRIER + puts ("oss_driver: using barrier mode, (dual thread)"); + pthread_barrier_init (&driver->barrier, NULL, 2); +# else + puts ("oss_driver: not using barrier mode, (single thread)"); +# endif + sem_init (&driver->sem_start, 0, 0); driver->run = 1; driver->threads = 0; - if (infd >= 0) - { - if (jack_client_create_thread(NULL, &driver->thread_in, - driver->engine->rtpriority, - driver->engine->control->real_time, - io_thread, driver) < 0) - { - jack_error("OSS: jack_client_create_thread() failed: %s@%i", - __FILE__, __LINE__); + if (infd >= 0) { + if (jack_client_create_thread (NULL, &driver->thread_in, + driver->engine->rtpriority, + driver->engine->control->real_time, + io_thread, driver) < 0) { + jack_error ("OSS: jack_client_create_thread() failed: %s@%i", + __FILE__, __LINE__); return -1; } driver->threads |= 1; } -# ifdef USE_BARRIER - if (outfd >= 0) - { - if (jack_client_create_thread(NULL, &driver->thread_out, - driver->engine->rtpriority, - driver->engine->control->real_time, - io_thread, driver) < 0) - { - jack_error("OSS: jack_client_create_thread() failed: %s@%i", - __FILE__, __LINE__); +# ifdef USE_BARRIER + if (outfd >= 0) { + if (jack_client_create_thread (NULL, &driver->thread_out, + driver->engine->rtpriority, + driver->engine->control->real_time, + io_thread, driver) < 0) { + jack_error ("OSS: jack_client_create_thread() failed: %s@%i", + __FILE__, __LINE__); return -1; } driver->threads |= 2; } -# endif +# endif - if (driver->threads & 1) sem_post(&driver->sem_start); - if (driver->threads & 2) sem_post(&driver->sem_start); + if (driver->threads & 1) { + sem_post (&driver->sem_start); + } + if (driver->threads & 2) { + sem_post (&driver->sem_start); + } - driver->last_periodtime = driver->engine->get_microseconds(); + driver->last_periodtime = driver->engine->get_microseconds (); driver->next_periodtime = 0; driver->iodelay = 0.0F; @@ -775,50 +718,42 @@ static int oss_driver_stop (oss_driver_t *driver) void *retval; driver->run = 0; - if (driver->threads & 1) - { - if (pthread_join(driver->thread_in, &retval) < 0) - { - jack_error("OSS: pthread_join() failed: %s@%i", - __FILE__, __LINE__); + if (driver->threads & 1) { + if (pthread_join (driver->thread_in, &retval) < 0) { + jack_error ("OSS: pthread_join() failed: %s@%i", + __FILE__, __LINE__); return -1; } } - if (driver->threads & 2) - { - if (pthread_join(driver->thread_out, &retval) < 0) - { - jack_error("OSS: pthread_join() failed: %s@%i", - __FILE__, __LINE__); + if (driver->threads & 2) { + if (pthread_join (driver->thread_out, &retval) < 0) { + jack_error ("OSS: pthread_join() failed: %s@%i", + __FILE__, __LINE__); return -1; } } - sem_destroy(&driver->sem_start); -# ifdef USE_BARRIER - pthread_barrier_destroy(&driver->barrier); -# endif - pthread_mutex_destroy(&driver->mutex_in); - pthread_mutex_destroy(&driver->mutex_out); - - if (driver->outfd >= 0 && driver->outfd != driver->infd) - { - close(driver->outfd); + sem_destroy (&driver->sem_start); +# ifdef USE_BARRIER + pthread_barrier_destroy (&driver->barrier); +# endif + pthread_mutex_destroy (&driver->mutex_in); + pthread_mutex_destroy (&driver->mutex_out); + + if (driver->outfd >= 0 && driver->outfd != driver->infd) { + close (driver->outfd); driver->outfd = -1; } - if (driver->infd >= 0) - { - close(driver->infd); + if (driver->infd >= 0) { + close (driver->infd); driver->infd = -1; } - if (driver->indevbuf != NULL) - { - free(driver->indevbuf); + if (driver->indevbuf != NULL) { + free (driver->indevbuf); driver->indevbuf = NULL; } - if (driver->outdevbuf != NULL) - { - free(driver->outdevbuf); + if (driver->outdevbuf != NULL) { + free (driver->outdevbuf); driver->outdevbuf = NULL; } @@ -833,37 +768,36 @@ static int oss_driver_read (oss_driver_t *driver, jack_nframes_t nframes) JSList *node; jack_port_t *port; - if (!driver->run) return 0; - if (nframes != driver->period_size) - { - jack_error( + if (!driver->run) { + return 0; + } + if (nframes != driver->period_size) { + jack_error ( "OSS: read failed nframes != period_size (%u/%u): %s@%i", nframes, driver->period_size, __FILE__, __LINE__); return -1; } - pthread_mutex_lock(&driver->mutex_in); + pthread_mutex_lock (&driver->mutex_in); node = driver->capture_ports; channel = 0; - while (node != NULL) - { - port = (jack_port_t *) node->data; - - if (jack_port_connected(port)) - { - portbuf = jack_port_get_buffer(port, nframes); - copy_and_convert_in(portbuf, driver->indevbuf, - nframes, channel, - driver->capture_channels, - driver->bits); + while (node != NULL) { + port = (jack_port_t*)node->data; + + if (jack_port_connected (port)) { + portbuf = jack_port_get_buffer (port, nframes); + copy_and_convert_in (portbuf, driver->indevbuf, + nframes, channel, + driver->capture_channels, + driver->bits); } - node = jack_slist_next(node); + node = jack_slist_next (node); channel++; } - pthread_mutex_unlock(&driver->mutex_in); + pthread_mutex_unlock (&driver->mutex_in); return 0; } @@ -876,37 +810,36 @@ static int oss_driver_write (oss_driver_t *driver, jack_nframes_t nframes) JSList *node; jack_port_t *port; - if (!driver->run) return 0; - if (nframes != driver->period_size) - { - jack_error( + if (!driver->run) { + return 0; + } + if (nframes != driver->period_size) { + jack_error ( "OSS: write failed nframes != period_size (%u/%u): %s@%i", nframes, driver->period_size, __FILE__, __LINE__); return -1; } - pthread_mutex_lock(&driver->mutex_out); + pthread_mutex_lock (&driver->mutex_out); node = driver->playback_ports; channel = 0; - while (node != NULL) - { - port = (jack_port_t *) node->data; - - if (jack_port_connected(port)) - { - portbuf = jack_port_get_buffer(port, nframes); - copy_and_convert_out(driver->outdevbuf, portbuf, - nframes, channel, - driver->playback_channels, - driver->bits); + while (node != NULL) { + port = (jack_port_t*)node->data; + + if (jack_port_connected (port)) { + portbuf = jack_port_get_buffer (port, nframes); + copy_and_convert_out (driver->outdevbuf, portbuf, + nframes, channel, + driver->playback_channels, + driver->bits); } - node = jack_slist_next(node); + node = jack_slist_next (node); channel++; } - pthread_mutex_unlock(&driver->mutex_out); + pthread_mutex_unlock (&driver->mutex_out); return 0; } @@ -914,13 +847,13 @@ static int oss_driver_write (oss_driver_t *driver, jack_nframes_t nframes) static int oss_driver_null_cycle (oss_driver_t *driver, jack_nframes_t nframes) { - pthread_mutex_lock(&driver->mutex_in); - memset(driver->indevbuf, 0x00, driver->indevbufsize); - pthread_mutex_unlock(&driver->mutex_in); + pthread_mutex_lock (&driver->mutex_in); + memset (driver->indevbuf, 0x00, driver->indevbufsize); + pthread_mutex_unlock (&driver->mutex_in); - pthread_mutex_lock(&driver->mutex_out); - memset(driver->outdevbuf, 0x00, driver->outdevbufsize); - pthread_mutex_unlock(&driver->mutex_out); + pthread_mutex_lock (&driver->mutex_out); + memset (driver->outdevbuf, 0x00, driver->outdevbufsize); + pthread_mutex_unlock (&driver->mutex_out); return 0; } @@ -928,16 +861,16 @@ static int oss_driver_null_cycle (oss_driver_t *driver, jack_nframes_t nframes) static int oss_driver_bufsize (oss_driver_t *driver, jack_nframes_t nframes) { - oss_driver_stop(driver); + oss_driver_stop (driver); - set_period_size(driver, nframes); - if (driver->engine->set_buffer_size(driver->engine, driver->period_size)) { + set_period_size (driver, nframes); + if (driver->engine->set_buffer_size (driver->engine, driver->period_size)) { jack_error ("OSS: cannot set engine buffer size to %d (check MIDI)", driver->period_size); return -1; } - jack_info("oss_driver: period size update: %u", nframes); + jack_info ("oss_driver: period size update: %u", nframes); - oss_driver_start(driver); + oss_driver_start (driver); return 0; } @@ -949,17 +882,13 @@ static int oss_driver_bufsize (oss_driver_t *driver, jack_nframes_t nframes) #ifdef USE_BARRIER static inline void synchronize (oss_driver_t *driver) { - if (driver->threads == 3) - { - if (pthread_barrier_wait(&driver->barrier) == - PTHREAD_BARRIER_SERIAL_THREAD) - { - driver_cycle(driver); + if (driver->threads == 3) { + if (pthread_barrier_wait (&driver->barrier) == + PTHREAD_BARRIER_SERIAL_THREAD) { + driver_cycle (driver); } - } - else - { - driver_cycle(driver); + } else { + driver_cycle (driver); } } #endif @@ -970,113 +899,98 @@ static void *io_thread (void *param) size_t localsize; ssize_t io_res; void *localbuf; - oss_driver_t *driver = (oss_driver_t *) param; + oss_driver_t *driver = (oss_driver_t*)param; - sem_wait(&driver->sem_start); + sem_wait (&driver->sem_start); -# ifdef USE_BARRIER - if (pthread_self() == driver->thread_in) - { +# ifdef USE_BARRIER + if (pthread_self () == driver->thread_in) { localsize = driver->indevbufsize; - localbuf = malloc(localsize); - if (localbuf == NULL) - { - jack_error("OSS: malloc() failed: %s@%i", - __FILE__, __LINE__); + localbuf = malloc (localsize); + if (localbuf == NULL) { + jack_error ("OSS: malloc() failed: %s@%i", + __FILE__, __LINE__); return NULL; } - while (driver->run) - { - io_res = read(driver->infd, localbuf, localsize); - if (io_res < (ssize_t) localsize) - { - jack_error( + while (driver->run) { + io_res = read (driver->infd, localbuf, localsize); + if (io_res < (ssize_t)localsize) { + jack_error ( "OSS: read() failed: %s@%i, count=%d/%d, errno=%d", __FILE__, __LINE__, io_res, localsize, errno); break; } - pthread_mutex_lock(&driver->mutex_in); - memcpy(driver->indevbuf, localbuf, localsize); - pthread_mutex_unlock(&driver->mutex_in); + pthread_mutex_lock (&driver->mutex_in); + memcpy (driver->indevbuf, localbuf, localsize); + pthread_mutex_unlock (&driver->mutex_in); - synchronize(driver); + synchronize (driver); } - free(localbuf); - } - else if (pthread_self() == driver->thread_out) - { + free (localbuf); + } else if (pthread_self () == driver->thread_out) { localsize = driver->outdevbufsize; - localbuf = malloc(localsize); - if (localbuf == NULL) - { - jack_error("OSS: malloc() failed: %s@%i", - __FILE__, __LINE__); + localbuf = malloc (localsize); + if (localbuf == NULL) { + jack_error ("OSS: malloc() failed: %s@%i", + __FILE__, __LINE__); return NULL; } - if (driver->trigger) - { + if (driver->trigger) { /* don't care too much if this fails */ - memset(localbuf, 0x00, localsize); - write(driver->outfd, localbuf, localsize); - ioctl(driver->outfd, SNDCTL_DSP_SETTRIGGER, &driver->trigger); + memset (localbuf, 0x00, localsize); + write (driver->outfd, localbuf, localsize); + ioctl (driver->outfd, SNDCTL_DSP_SETTRIGGER, &driver->trigger); } - while (driver->run) - { - pthread_mutex_lock(&driver->mutex_out); - memcpy(localbuf, driver->outdevbuf, localsize); - pthread_mutex_unlock(&driver->mutex_out); + while (driver->run) { + pthread_mutex_lock (&driver->mutex_out); + memcpy (localbuf, driver->outdevbuf, localsize); + pthread_mutex_unlock (&driver->mutex_out); - io_res = write(driver->outfd, localbuf, localsize); - if (io_res < (ssize_t) localsize) - { - jack_error( + io_res = write (driver->outfd, localbuf, localsize); + if (io_res < (ssize_t)localsize) { + jack_error ( "OSS: write() failed: %s@%i, count=%d/%d, errno=%d", __FILE__, __LINE__, io_res, localsize, errno); break; } - synchronize(driver); + synchronize (driver); } - free(localbuf); + free (localbuf); } -# else +# else localsize = (driver->indevbufsize >= driver->outdevbufsize) ? - driver->indevbufsize : driver->outdevbufsize; - localbuf = malloc(localsize); - if (localbuf == NULL) - { - jack_error("OSS: malloc() failed: %s@%i", __FILE__, __LINE__); + driver->indevbufsize : driver->outdevbufsize; + localbuf = malloc (localsize); + if (localbuf == NULL) { + jack_error ("OSS: malloc() failed: %s@%i", __FILE__, __LINE__); return NULL; } - if (driver->trigger) - { + if (driver->trigger) { /* don't care too much if this fails */ - memset(localbuf, 0x00, localsize); - write(driver->outfd, localbuf, driver->outdevbufsize); - ioctl(driver->outfd, SNDCTL_DSP_SETTRIGGER, &driver->trigger); + memset (localbuf, 0x00, localsize); + write (driver->outfd, localbuf, driver->outdevbufsize); + ioctl (driver->outfd, SNDCTL_DSP_SETTRIGGER, &driver->trigger); } - while (driver->run) - { - if (driver->playback_channels > 0) - { - pthread_mutex_lock(&driver->mutex_out); - memcpy(localbuf, driver->outdevbuf, + while (driver->run) { + if (driver->playback_channels > 0) { + pthread_mutex_lock (&driver->mutex_out); + memcpy (localbuf, driver->outdevbuf, driver->outdevbufsize); - pthread_mutex_unlock(&driver->mutex_out); + pthread_mutex_unlock (&driver->mutex_out); - io_res = write(driver->outfd, localbuf, - driver->outdevbufsize); - if (io_res < (ssize_t) driver->outdevbufsize) - { - jack_error( + io_res = write (driver->outfd, localbuf, + driver->outdevbufsize); + if (io_res < (ssize_t)driver->outdevbufsize) { + jack_error ( "OSS: write() failed: %s@%i, count=%d/%d, errno=%d", __FILE__, __LINE__, io_res, driver->outdevbufsize, errno); @@ -1084,30 +998,28 @@ static void *io_thread (void *param) } } - if (driver->capture_channels > 0) - { - io_res = read(driver->infd, localbuf, - driver->indevbufsize); - if (io_res < (ssize_t) driver->indevbufsize) - { - jack_error( + if (driver->capture_channels > 0) { + io_res = read (driver->infd, localbuf, + driver->indevbufsize); + if (io_res < (ssize_t)driver->indevbufsize) { + jack_error ( "OSS: read() failed: %s@%i, count=%d/%d, errno=%d", __FILE__, __LINE__, io_res, driver->indevbufsize, errno); break; } - pthread_mutex_lock(&driver->mutex_in); - memcpy(driver->indevbuf, localbuf, + pthread_mutex_lock (&driver->mutex_in); + memcpy (driver->indevbuf, localbuf, driver->indevbufsize); - pthread_mutex_unlock(&driver->mutex_in); + pthread_mutex_unlock (&driver->mutex_in); } - driver_cycle(driver); + driver_cycle (driver); } - free(localbuf); -# endif + free (localbuf); +# endif return NULL; } @@ -1119,7 +1031,7 @@ static void *io_thread (void *param) const char driver_client_name[] = "oss"; -void driver_finish (jack_driver_t *); +void driver_finish(jack_driver_t *); jack_driver_desc_t * driver_get_descriptor () @@ -1127,24 +1039,22 @@ jack_driver_desc_t * driver_get_descriptor () jack_driver_desc_t *desc; jack_driver_param_desc_t *params; - desc = (jack_driver_desc_t *) calloc(1, sizeof(jack_driver_desc_t)); - if (desc == NULL) - { - jack_error("oss_driver: calloc() failed: %s@%i, errno=%d", - __FILE__, __LINE__, errno); + desc = (jack_driver_desc_t*)calloc (1, sizeof(jack_driver_desc_t)); + if (desc == NULL) { + jack_error ("oss_driver: calloc() failed: %s@%i, errno=%d", + __FILE__, __LINE__, errno); return NULL; } - strcpy(desc->name, driver_client_name); + strcpy (desc->name, driver_client_name); desc->nparams = OSS_DRIVER_N_PARAMS; - params = calloc(desc->nparams, sizeof(jack_driver_param_desc_t)); - if (params == NULL) - { - jack_error("oss_driver: calloc() failed: %s@%i, errno=%d", - __FILE__, __LINE__, errno); + params = calloc (desc->nparams, sizeof(jack_driver_param_desc_t)); + if (params == NULL) { + jack_error ("oss_driver: calloc() failed: %s@%i, errno=%d", + __FILE__, __LINE__, errno); return NULL; } - memcpy(params, oss_params, + memcpy (params, oss_params, desc->nparams * sizeof(jack_driver_param_desc_t)); desc->params = params; @@ -1152,8 +1062,8 @@ jack_driver_desc_t * driver_get_descriptor () } -jack_driver_t * driver_initialize (jack_client_t *client, - JSList * params) +jack_driver_t * driver_initialize (jack_client_t *client, + JSList * params) { int bits = OSS_DRIVER_DEF_BITS; jack_nframes_t sample_rate = OSS_DRIVER_DEF_FS; @@ -1167,25 +1077,24 @@ jack_driver_t * driver_initialize (jack_client_t *client, const jack_driver_param_t *param; oss_driver_t *driver; - driver = (oss_driver_t *) malloc(sizeof(oss_driver_t)); - if (driver == NULL) - { - jack_error("OSS: malloc() failed: %s@%i, errno=%d", - __FILE__, __LINE__, errno); + driver = (oss_driver_t*)malloc (sizeof(oss_driver_t)); + if (driver == NULL) { + jack_error ("OSS: malloc() failed: %s@%i, errno=%d", + __FILE__, __LINE__, errno); return NULL; } - memset(driver, 0x00, sizeof(oss_driver_t)); - jack_driver_init((jack_driver_t *) driver); - - driver->attach = (JackDriverAttachFunction) oss_driver_attach; - driver->detach = (JackDriverDetachFunction) oss_driver_detach; - driver->start = (JackDriverStartFunction) oss_driver_start; - driver->stop = (JackDriverStopFunction) oss_driver_stop; - driver->read = (JackDriverReadFunction) oss_driver_read; - driver->write = (JackDriverWriteFunction) oss_driver_write; - driver->null_cycle = (JackDriverNullCycleFunction) - oss_driver_null_cycle; - driver->bufsize = (JackDriverBufSizeFunction) oss_driver_bufsize; + memset (driver, 0x00, sizeof(oss_driver_t)); + jack_driver_init ((jack_driver_t*)driver); + + driver->attach = (JackDriverAttachFunction)oss_driver_attach; + driver->detach = (JackDriverDetachFunction)oss_driver_detach; + driver->start = (JackDriverStartFunction)oss_driver_start; + driver->stop = (JackDriverStopFunction)oss_driver_stop; + driver->read = (JackDriverReadFunction)oss_driver_read; + driver->write = (JackDriverWriteFunction)oss_driver_write; + driver->null_cycle = (JackDriverNullCycleFunction) + oss_driver_null_cycle; + driver->bufsize = (JackDriverBufSizeFunction)oss_driver_bufsize; driver->indev = NULL; driver->outdev = NULL; @@ -1193,49 +1102,47 @@ jack_driver_t * driver_initialize (jack_client_t *client, driver->trigger = 0; pnode = params; - while (pnode != NULL) - { - param = (const jack_driver_param_t *) pnode->data; - - switch (param->character) - { - case 'r': - sample_rate = param->value.ui; - break; - case 'p': - period_size = param->value.ui; - break; - case 'n': - nperiods = param->value.ui; - break; - case 'w': - bits = param->value.i; - break; - case 'i': - capture_channels = param->value.ui; - break; - case 'o': - playback_channels = param->value.ui; - break; - case 'C': - driver->indev = strdup(param->value.str); - break; - case 'P': - driver->outdev = strdup(param->value.str); - break; - case 'b': - driver->ignorehwbuf = 1; - break; - case 'I': - in_latency = param->value.ui; - break; - case 'O': - out_latency = param->value.ui; - break; + while (pnode != NULL) { + param = (const jack_driver_param_t*)pnode->data; + + switch (param->character) { + case 'r': + sample_rate = param->value.ui; + break; + case 'p': + period_size = param->value.ui; + break; + case 'n': + nperiods = param->value.ui; + break; + case 'w': + bits = param->value.i; + break; + case 'i': + capture_channels = param->value.ui; + break; + case 'o': + playback_channels = param->value.ui; + break; + case 'C': + driver->indev = strdup (param->value.str); + break; + case 'P': + driver->outdev = strdup (param->value.str); + break; + case 'b': + driver->ignorehwbuf = 1; + break; + case 'I': + in_latency = param->value.ui; + break; + case 'O': + out_latency = param->value.ui; + break; } - pnode = jack_slist_next(pnode); + pnode = jack_slist_next (pnode); } - + driver->sample_rate = sample_rate; driver->period_size = period_size; driver->nperiods = nperiods; @@ -1248,63 +1155,64 @@ jack_driver_t * driver_initialize (jack_client_t *client, driver->finish = driver_finish; - if (driver->indev == NULL) - driver->indev = strdup(OSS_DRIVER_DEF_DEV); - if (driver->outdev == NULL) - driver->outdev = strdup(OSS_DRIVER_DEF_DEV); + if (driver->indev == NULL) { + driver->indev = strdup (OSS_DRIVER_DEF_DEV); + } + if (driver->outdev == NULL) { + driver->outdev = strdup (OSS_DRIVER_DEF_DEV); + } driver->infd = -1; driver->outfd = -1; - switch (driver->bits) - { -# ifndef OSS_ENDIAN -# ifdef __GNUC__ -# if (defined(__i386__) || defined(__alpha__) || defined(__arm__) || defined(__x86_64__) || (defined(__sh__) && !defined(__LITTLE_ENDIAN__))) -# define OSS_LITTLE_ENDIAN 1234 -# define OSS_ENDIAN OSS_LITTLE_ENDIAN -# else -# define OSS_BIG_ENDIAN 4321 -# define OSS_ENDIAN OSS_BIG_ENDIAN -# endif -# else /* __GNUC__ */ -# if (defined(_AIX) || defined(AIX) || defined(sparc) || defined(__hppa) || defined(PPC) || defined(__powerpc__) && !defined(i386) && !defined(__i386) && !defined(__i386__)) -# define OSS_BIG_ENDIAN 4321 -# define OSS_ENDIAN OSS_BIG_ENDIAN -# else -# define OSS_LITTLE_ENDIAN 1234 -# define OSS_ENDIAN OSS_LITTLE_ENDIAN -# endif -# endif /* __GNUC__ */ -# endif /* OSS_ENDIAN */ -# if (OSS_ENDIAN == 1234) - /* little-endian architectures */ - case 24: /* little-endian LSB aligned 24-bits in 32-bits integer */ - driver->format = 0x00008000; - break; - case 32: /* little-endian 32-bit integer */ - driver->format = 0x00001000; - break; - case 64: /* native-endian 64-bit float */ - driver->format = 0x00004000; - break; - case 16: /* little-endian 16-bit integer */ - default: - driver->format = 0x00000010; - break; + switch (driver->bits) { +# ifndef OSS_ENDIAN +# ifdef __GNUC__ +# if (defined(__i386__) || defined(__alpha__) || defined(__arm__) || defined(__x86_64__) || (defined(__sh__) && !defined(__LITTLE_ENDIAN__))) +# define OSS_LITTLE_ENDIAN 1234 +# define OSS_ENDIAN OSS_LITTLE_ENDIAN +# else +# define OSS_BIG_ENDIAN 4321 +# define OSS_ENDIAN OSS_BIG_ENDIAN +# endif +# else /* __GNUC__ */ +# if (defined(_AIX) || defined(AIX) || defined(sparc) || defined(__hppa) || defined(PPC) || defined(__powerpc__) && !defined(i386) && !defined(__i386) && !defined(__i386__)) +# define OSS_BIG_ENDIAN 4321 +# define OSS_ENDIAN OSS_BIG_ENDIAN +# else +# define OSS_LITTLE_ENDIAN 1234 +# define OSS_ENDIAN OSS_LITTLE_ENDIAN +# endif +# endif /* __GNUC__ */ +# endif /* OSS_ENDIAN */ +# if (OSS_ENDIAN == 1234) + /* little-endian architectures */ + case 24: /* little-endian LSB aligned 24-bits in 32-bits integer */ + driver->format = 0x00008000; + break; + case 32: /* little-endian 32-bit integer */ + driver->format = 0x00001000; + break; + case 64: /* native-endian 64-bit float */ + driver->format = 0x00004000; + break; + case 16: /* little-endian 16-bit integer */ + default: + driver->format = 0x00000010; + break; /* big-endian architectures */ -# else - case 24: /* big-endian LSB aligned 24-bits in 32-bits integer */ - break; - driver->format = 0x00010000; - case 32: /* big-endian 32-bit integer */ - driver->format = 0x00002000; - break; - case 64: /* native-endian 64-bit float */ - driver->format = 0x00004000; - break; - case 16: /* big-endian 16-bit integer */ - default: - driver->format = 0x00000020; -# endif +# else + case 24: /* big-endian LSB aligned 24-bits in 32-bits integer */ + break; + driver->format = 0x00010000; + case 32: /* big-endian 32-bit integer */ + driver->format = 0x00002000; + break; + case 64: /* native-endian 64-bit float */ + driver->format = 0x00004000; + break; + case 16: /* big-endian 16-bit integer */ + default: + driver->format = 0x00000020; +# endif } driver->indevbuf = driver->outdevbuf = NULL; @@ -1315,19 +1223,21 @@ jack_driver_t * driver_initialize (jack_client_t *client, driver->engine = NULL; driver->client = client; - return ((jack_driver_t *) driver); + return (jack_driver_t*)driver; } void driver_finish (jack_driver_t *driver) { - oss_driver_t *oss_driver = (oss_driver_t *) driver; - - oss_driver = (oss_driver_t *) driver; - if (oss_driver->indev != NULL) - free(oss_driver->indev); - if (oss_driver->outdev != NULL) - free(oss_driver->outdev); - free(driver); + oss_driver_t *oss_driver = (oss_driver_t*)driver; + + oss_driver = (oss_driver_t*)driver; + if (oss_driver->indev != NULL) { + free (oss_driver->indev); + } + if (oss_driver->outdev != NULL) { + free (oss_driver->outdev); + } + free (driver); } |