diff -ru jamin-0.9.0.orig/configure.in jamin-0.9.0/configure.in --- jamin-0.9.0.orig/configure.in 2004-08-05 12:39:43.000000000 -0500 +++ jamin-0.9.0/configure.in 2004-09-15 11:50:02.000000000 -0500 @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(configure.in) -AM_INIT_AUTOMAKE(jamin, 0.9.0) +AM_INIT_AUTOMAKE(jamin, 0.9.03) AM_CONFIG_HEADER(config.h) AM_MAINTAINER_MODE @@ -32,11 +32,13 @@ [AC_DEFINE(HAVE_POSIX_SCHED,,[POSIX scheduler support])]) PKG_CHECK_MODULES(JACK, jack >= 0.80.0) +AC_CHECK_LIB(jack,jack_create_thread, + [AC_DEFINE(HAVE_JACK_CREATE_THREAD,,[JACK supports thread creation])]) AC_CHECK_LIB(jack,jack_ringbuffer_create, - [AC_DEFINE(HAVE_JACK_RINGBUFFER,,[JACK has ringbuffer support])],) + [AC_DEFINE(HAVE_JACK_RINGBUFFER,,[JACK has ringbuffer support])]) AC_CHECK_LIB(jack,jack_client_name_size, [AC_DEFINE(HAVE_JACK_CLIENT_NAME_SIZE,, - [JACK returns client name size])],) + [JACK returns client name size])]) [if test "${enable_double_fft+set}" = set; then] PKG_CHECK_MODULES(FFTW, fftw3 >= 3.0, AC_DEFINE(FFTW_TYPE, [double], [Datatype used by installed FFTW libraries]), [AC_MSG_ERROR([Didn't find any double precision FFTW3 libraries])]) diff -ru jamin-0.9.0.orig/src/compressor-ui.c jamin-0.9.0/src/compressor-ui.c --- jamin-0.9.0.orig/src/compressor-ui.c 2004-07-17 09:34:58.000000000 -0500 +++ jamin-0.9.0/src/compressor-ui.c 2004-09-08 08:44:03.000000000 -0500 @@ -11,7 +11,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * $Id: compressor-ui.c,v 1.27 2004/06/28 22:59:48 jdepner Exp $ + * $Id: compressor-ui.c,v 1.28 2004/09/08 13:44:03 jdepner Exp $ */ #include @@ -139,13 +139,6 @@ ma[i] = scale; auto_gain[i] = 0; - - prev_value_at[i] = -1.0; - prev_value_re[i] = -1.0; - prev_value_th[i] = 1.0; - prev_value_ra[i] = -1.0; - prev_value_kn[i] = -1.0; - prev_value_ma[i] = -1.0; } } @@ -166,14 +159,7 @@ if (!suspend_gang && gang_at[i]) { - if (prev_value_at[i] > 0.0) - { - diff = value - prev_value_at[i]; - } - else - { - diff = 0.0; - } + diff = value - prev_value_at[i]; for (j = 0 ; j < XO_BANDS ; j++) { @@ -213,14 +199,7 @@ if (!suspend_gang && gang_re[i]) { - if (prev_value_re[i] > 0.0) - { - diff = value - prev_value_re[i]; - } - else - { - diff = 0.0; - } + diff = value - prev_value_re[i]; for (j = 0 ; j < XO_BANDS ; j++) { @@ -260,14 +239,7 @@ if (!suspend_gang && gang_th[i]) { - if (prev_value_th[i] < 0.0) - { - diff = value - prev_value_th[i]; - } - else - { - diff = 0.0; - } + diff = value - prev_value_th[i]; for (j = 0 ; j < XO_BANDS ; j++) { @@ -317,14 +289,7 @@ if (!suspend_gang && gang_ra[i]) { - if (prev_value_ra[i] > 0.0) - { - diff = value - prev_value_ra[i]; - } - else - { - diff = 0.0; - } + diff = value - prev_value_ra[i]; for (j = 0 ; j < XO_BANDS ; j++) { @@ -374,14 +339,7 @@ if (!suspend_gang && gang_kn[i]) { - if (prev_value_kn[i] > 0.0) - { - diff = value - prev_value_kn[i]; - } - else - { - diff = 0.0; - } + diff = value - prev_value_kn[i]; for (j = 0 ; j < XO_BANDS ; j++) { @@ -423,14 +381,7 @@ if (!suspend_gang && gang_ma[i]) { - if (prev_value_ma[i] > 0.0) - { - diff = value - prev_value_ma[i]; - } - else - { - diff = 0.0; - } + diff = value - prev_value_ma[i]; for (j = 0 ; j < XO_BANDS ; j++) { @@ -581,7 +532,7 @@ gang_at[band] = FALSE; gtk_widget_modify_fg ((GtkWidget *) lab_at[band], GTK_STATE_NORMAL, get_color (TEXT_COLOR)); - prev_value_at[band] = -1.0; + prev_value_at[band] = gtk_adjustment_get_value (adj_at[band]); } else { @@ -598,7 +549,7 @@ gang_re[band] = FALSE; gtk_widget_modify_fg ((GtkWidget *) lab_re[band], GTK_STATE_NORMAL, get_color (TEXT_COLOR)); - prev_value_re[band] = -1.0; + prev_value_re[band] = gtk_adjustment_get_value (adj_re[band]); } else { @@ -615,7 +566,7 @@ gang_th[band] = FALSE; gtk_widget_modify_fg ((GtkWidget *) lab_th[band], GTK_STATE_NORMAL, get_color (TEXT_COLOR)); - prev_value_th[band] = 1.0; + prev_value_th[band] = gtk_adjustment_get_value (adj_th[band]); } else { @@ -632,7 +583,7 @@ gang_ra[band] = FALSE; gtk_widget_modify_fg ((GtkWidget *) lab_ra[band], GTK_STATE_NORMAL, get_color (TEXT_COLOR)); - prev_value_ra[band] = -1.0; + prev_value_ra[band] = gtk_adjustment_get_value (adj_ra[band]); } else { @@ -648,7 +599,7 @@ gang_kn[band] = FALSE; gtk_widget_modify_fg ((GtkWidget *) lab_kn[band], GTK_STATE_NORMAL, get_color (TEXT_COLOR)); - prev_value_kn[band] = -1.0; + prev_value_kn[band] = gtk_adjustment_get_value (adj_kn[band]); } else { @@ -665,7 +616,7 @@ gang_ma[band] = FALSE; gtk_widget_modify_fg ((GtkWidget *) lab_ma[band], GTK_STATE_NORMAL, get_color (TEXT_COLOR)); - prev_value_ma[band] = -1.0; + prev_value_ma[band] = gtk_adjustment_get_value (adj_ma[band]); } else { diff -ru jamin-0.9.0.orig/src/geq.c jamin-0.9.0/src/geq.c --- jamin-0.9.0.orig/src/geq.c 2004-05-09 11:38:38.000000000 -0500 +++ jamin-0.9.0/src/geq.c 2004-08-20 17:56:08.000000000 -0500 @@ -11,7 +11,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * $Id: geq.c,v 1.31 2004/05/08 21:29:39 jdepner Exp $ + * $Id: geq.c,v 1.32 2004/08/20 22:56:08 jdepner Exp $ */ /* code to control the graphic eq's, swh */ @@ -122,7 +122,7 @@ int i, bin; - if (length != BINS / 2 - 1) + if (length < BINS / 2 - 1) { errstr = g_strdup_printf (_("Splined length %d does not match BINS / 2 - 1 (%d)"), @@ -155,7 +155,7 @@ float value; - if (length != BINS / 2 - 1) + if (length < BINS / 2 - 1) { errstr = g_strdup_printf (_("Splined length %d does not match BINS / 2 - 1 (%d)"), length, BINS / 2 - 1); diff -ru jamin-0.9.0.orig/src/io.c jamin-0.9.0/src/io.c --- jamin-0.9.0.orig/src/io.c 2004-04-02 20:47:19.000000000 -0600 +++ jamin-0.9.0/src/io.c 2004-09-15 11:50:06.000000000 -0500 @@ -1,7 +1,7 @@ /* * io.c -- JAMin I/O driver. * - * Copyright (C) 2003 Jack O'Quin. + * Copyright (C) 2003, 2004 Jack O'Quin. * * 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 @@ -58,6 +58,8 @@ * + JACK not running realtime */ +#include "config.h" + #include #include #include @@ -71,8 +73,10 @@ #include #include #include +#ifdef HAVE_JACK_CREATE_THREAD +#include +#endif -#include "config.h" #include "ringbuffer.h" /* uses , if available */ #include "process.h" #include "resource.h" @@ -857,9 +861,12 @@ { int rc; int policy; - struct sched_param rt_param, my_param; + struct sched_param rt_param; pthread_attr_t attributes; pthread_attr_init(&attributes); +#ifndef HAVE_JACK_CREATE_THREAD + struct sched_param my_param; +#endif /* Set priority and scheduling parameters based on the attributes * of the JACK client thread. */ @@ -884,6 +891,23 @@ } else IF_DEBUG(DBG_TERSE, io_trace("JACK subsystem not realtime")); +#ifdef HAVE_JACK_CREATE_THREAD + + rc = jack_create_thread(&dsp_thread, rt_param.sched_priority, + jst.realtime, io_dsp_thread, NULL); + switch (rc) { + case 0: + IF_DEBUG(DBG_TERSE, io_trace("DSP thread created")); + break; + case EPERM: + io_errlog(EPERM, "no realtime privileges for DSP thread"); + break; + default: + io_errlog(rc, "error creating DSP thread"); + } + +#else /* !HAVE_JACK_CREATE_THREAD */ + rc = pthread_attr_setschedpolicy(&attributes, policy); if (rc) { io_errlog(EPERM, "cannot set scheduling policy, rc = %d.", rc); @@ -984,10 +1008,11 @@ /* return this thread to the scheduler it used before */ sched_setscheduler(0, policy, &my_param); IF_DEBUG(DBG_TERSE, io_trace("DSP thread finally created")); - return 0; -#else /* !HAVE_POSIX_SCHED */ - return rc; + rc = 0; #endif /* HAVE_POSIX_SCHED */ +#endif /* HAVE_JACK_CREATE_THREAD */ + + return rc; } diff -ru jamin-0.9.0.orig/src/scenes.c jamin-0.9.0/src/scenes.c --- jamin-0.9.0.orig/src/scenes.c 2004-05-09 11:38:40.000000000 -0500 +++ jamin-0.9.0/src/scenes.c 2004-08-09 18:10:20.000000000 -0500 @@ -60,9 +60,6 @@ *LED_yellow = NULL, *LED_red = NULL; -void set_EQ_curve_values (); - - /* Initialize all scene related structures and get the widget addresses. */ void bind_scenes () @@ -210,7 +207,7 @@ s_crossfade_to_state (&scene_state[i], -1.0f); - set_EQ_curve_values (); + set_EQ_curve_values (0, 0.0); s_history_add_state (scene_state[i]);