[PD-cvs] externals/postlude/dssi/src dssi~.c,1.9,1.10
Jamie Bullock
postlude at users.sourceforge.net
Mon Mar 20 15:54:22 CET 2006
Update of /cvsroot/pure-data/externals/postlude/dssi/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28827/src
Modified Files:
dssi~.c
Log Message:
Modified DSP vector handling.
Index: dssi~.c
===================================================================
RCS file: /cvsroot/pure-data/externals/postlude/dssi/src/dssi~.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** dssi~.c 17 Mar 2006 17:08:49 -0000 1.9
--- dssi~.c 20 Mar 2006 14:54:19 -0000 1.10
***************
*** 527,532 ****
--- 527,536 ----
#if DEBUG
post("Global ctrl input number = %d", ctrl_input_index);
+ post("Global ctrl input value = %.2f", value);
#endif
+
+
+
/* set the appropriate control port value */
x->plugin_ControlDataInput[portno] = value;
***************
*** 1733,1749 ****
static void dssi_bang(t_dssi_tilde *x)
{
! post("Running instances of %s", x->descriptor->LADSPA_Plugin->Label);
}
static t_int *dssi_tilde_perform(t_int *w)
{
! int N = (int)(w[1]);
! t_dssi_tilde *x = (t_dssi_tilde *)(w[2]);
int i, n, timediff, framediff, instance = 0;
!
if(x->dsp){
for(i = 0; i < x->plugin_ins; i++)
! memcpy(x->plugin_InputBuffers[i], x->inlets[i], N *
sizeof(LADSPA_Data));
--- 1737,1757 ----
static void dssi_bang(t_dssi_tilde *x)
{
! post("dssi~: running %d instances of %s", x->n_instances,
! x->descriptor->LADSPA_Plugin->Label);
}
static t_int *dssi_tilde_perform(t_int *w)
{
! int N = (t_int)(w[2]);
! t_dssi_tilde *x = (t_dssi_tilde *)(w[1]);
! t_float **inputs = (t_float **)(&w[3]);
! t_float **outputs = (t_float **)(&w[3] + x->plugin_ins);
int i, n, timediff, framediff, instance = 0;
! /*See comment for dssi_tilde_plug_plugin
if(x->dsp){
+ x->dsp_loop = 1;*/
for(i = 0; i < x->plugin_ins; i++)
! memcpy(x->plugin_InputBuffers[i], inputs[i], N *
sizeof(LADSPA_Data));
***************
*** 1825,1833 ****
}
for(i = 0; i < x->plugin_outs; i++)
! memcpy(x->outlets[i], x->plugin_OutputBuffers[i], N *
sizeof(LADSPA_Data));
! }
! return (w+3);
}
--- 1833,1848 ----
}
+
for(i = 0; i < x->plugin_outs; i++)
! memcpy(outputs[i], (t_float *)x->plugin_OutputBuffers[i], N *
sizeof(LADSPA_Data));
!
! /*
! for(i = 0; i < x->plugin_outs; i++)
! memcpy(x->outlets[i], (t_outlet *)x->plugin_OutputBuffers[i], N *
! sizeof(LADSPA_Data));*/
! /* x->dsp_loop = 0;
! }*/
! return w + (x->plugin_ins + x->plugin_outs + 3);
}
***************
*** 1835,1839 ****
{
if(x->n_instances){
! int n, m;
t_float **outlets = (t_float **)x->outlets;
t_float **inlets = (t_float **)x->inlets;
--- 1850,1882 ----
{
if(x->n_instances){
!
!
! t_int *dsp_vector, i, N, M;
!
! M = x->plugin_ins + x->plugin_outs + 2;
!
! dsp_vector = (t_int *) getbytes(M * sizeof(t_int));
!
! dsp_vector[0] = (t_int)x;
! dsp_vector[1] = (t_int)sp[0]->s_n;
!
! for(i = 2; i < M; i++)
! dsp_vector[i] = (t_int)sp[i - 1]->s_vec;
!
! dsp_addv(dssi_tilde_perform, M, dsp_vector);
!
!
! /* int n, m;
!
! t_float **outlets;
! t_float **inlets;
!
! for(n = 0, m = 1; n < x->plugin_ins; n++, m++)
! inlets[n] = sp[m]->s_vec;
! for(n = 0; n < x->plugin_outs; n++, ++m)
! outlets[n] = sp[m]->s_vec;
!
! */ /*
!
t_float **outlets = (t_float **)x->outlets;
t_float **inlets = (t_float **)x->inlets;
***************
*** 1845,1850 ****
for(n = 0; n < x->plugin_outs; n++)
*outlets++ = sp[m++]->s_vec;
! }
! dsp_add(dssi_tilde_perform, 2, sp[0]->s_n, x);
}
--- 1888,1893 ----
for(n = 0; n < x->plugin_outs; n++)
*outlets++ = sp[m++]->s_vec;
! */ }
! /* dsp_add(dssi_tilde_perform, 2, sp[0]->s_n, x); */
}
***************
*** 1932,1941 ****
free((t_float *)x->plugin_OutputBuffers);
- /* Have a little nap so PD can catch up */
/*sleep(1);*/
! for(i = 0; i < x->plugin_outs; i++)
! outlet_free(x->outlets[i]);
! for(i = 0; i < x->plugin_ins; i++)
! inlet_free(x->inlets[i]);
outlet_free(x->control_outlet);
free(x->dll_name);
--- 1975,1990 ----
free((t_float *)x->plugin_OutputBuffers);
/*sleep(1);*/
! if(x->plugin_ins){
! for(i = 0; i < x->plugin_ins; i++)
! inlet_free((t_inlet *)x->inlets[i]);
! freebytes(x->inlets, x->plugin_ins * sizeof(t_inlet *));
! }
!
! if(x->plugin_outs){
! for(i = 0; i < x->plugin_outs; i++)
! outlet_free((t_outlet *)x->outlets[i]);
! freebytes(x->outlets, x->plugin_outs * sizeof(t_outlet *));
! }
outlet_free(x->control_outlet);
free(x->dll_name);
***************
*** 1968,1971 ****
--- 2017,2021 ----
x->n_instances = 0;
x->dsp = 0;
+ x->dsp_loop = 0;
x->plugin_ins = x->plugin_outs =
x->plugin_controlIns = x->plugin_controlOuts = 0;
***************
*** 2139,2152 ****
post("dssi~: ready for input");
- x->dsp = 1;
}
return (void *)x;
}
static void dssi_tilde_plug_plugin(t_dssi_tilde *x, t_symbol *s, int argc, t_atom *argv){
x->dsp = 0;
dssi_tilde_quit_plugin(x);
! dssi_tilde_free_plugin(x);
dssi_tilde_init_plugin(x);
dssi_tilde_load_plugin(x, argc, argv);
--- 2189,2208 ----
post("dssi~: ready for input");
}
return (void *)x;
}
+
+ /* This method is currently disabled. PD's inlet/outlet handling seems buggy if you try to create ins/outs on the fly. Needs further investigation ...*/
static void dssi_tilde_plug_plugin(t_dssi_tilde *x, t_symbol *s, int argc, t_atom *argv){
x->dsp = 0;
dssi_tilde_quit_plugin(x);
! while(1){
! if(!x->dsp_loop){
! dssi_tilde_free_plugin(x);
! break;
! }
! }
dssi_tilde_init_plugin(x);
dssi_tilde_load_plugin(x, argc, argv);
***************
*** 2154,2157 ****
--- 2210,2219 ----
}
+ static void dssi_tilde_activate_plugin(t_dssi_tilde *x){
+
+ x->dsp = 1;
+
+ }
+
static void *dssi_tilde_new(t_symbol *s, t_int argc, t_atom *argv){
***************
*** 2200,2206 ****
class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_reset,
gensym ("reset"), A_DEFFLOAT, 0);
! class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_plug_plugin,
! gensym ("plug"),A_GIMME,0);/*
! class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_active,
gensym ("active"),A_DEFFLOAT,0);*/
class_sethelpsymbol(dssi_tilde_class, gensym("help-dssi"));
--- 2262,2268 ----
class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_reset,
gensym ("reset"), A_DEFFLOAT, 0);
! /* class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_plug_plugin,
! gensym ("plug"),A_GIMME,0);
! class_addmethod (dssi_tilde_class,(t_method)dssi_tilde_activate_plugin,
gensym ("active"),A_DEFFLOAT,0);*/
class_sethelpsymbol(dssi_tilde_class, gensym("help-dssi"));
More information about the Pd-cvs
mailing list