Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24710
Modified Files: Tag: devel_0_37 d_fft.c Log Message: further speedup
Index: d_fft.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/d_fft.c,v retrieving revision 1.1.1.1.16.6 retrieving revision 1.1.1.1.16.7 diff -C2 -d -r1.1.1.1.16.6 -r1.1.1.1.16.7 *** d_fft.c 9 Oct 2004 16:37:36 -0000 1.1.1.1.16.6 --- d_fft.c 9 Oct 2004 18:13:07 -0000 1.1.1.1.16.7 *************** *** 282,295 **** }
- static void *sigifftw_new(void) - { - t_sigfftw *x = (t_sigfftw *)pd_new(sigifftw_class); - outlet_new(&x->x_obj, gensym("signal")); - outlet_new(&x->x_obj, gensym("signal")); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); - x->x_f = 0; - return (x); - } - static void sigfftw_free(t_sigfftw * x) { --- 282,285 ---- *************** *** 297,319 **** }
- static void sigifftw_free(t_sigfftw * x) - { - fftwf_destroy_plan(x->plan); - } - static t_int *sigfftw_perform(t_int *w) { ! t_sigfftw * x =(t_sigfftw *) w[1]; ! ! fftwf_execute(x->plan); ! ! return (w+2); ! } ! ! static t_int *sigifftw_perform(t_int *w) ! { ! t_sigfftw * x =(t_sigfftw *) w[1]; ! ! fftwf_execute(x->plan);
return (w+2); --- 287,293 ---- }
static t_int *sigfftw_perform(t_int *w) { ! fftwf_execute(*(fftwf_plan *)w[1]);
return (w+2); *************** *** 333,337 **** x->plan = fftwf_plan_guru_split_dft(1, &(x->dim), 0, NULL, in1, in2, out1, out2, FFTW_MEASURE); ! dsp_add(sigfftw_perform, 1, x); }
--- 307,311 ---- x->plan = fftwf_plan_guru_split_dft(1, &(x->dim), 0, NULL, in1, in2, out1, out2, FFTW_MEASURE); ! dsp_add(sigfftw_perform, 1, &x->plan); }
*************** *** 349,353 **** x->plan = fftwf_plan_guru_split_dft(1, &(x->dim), 0, NULL, in2, in1, out2, out1, FFTW_MEASURE); ! dsp_add(sigfftw_perform, 1, x); }
--- 323,327 ---- x->plan = fftwf_plan_guru_split_dft(1, &(x->dim), 0, NULL, in2, in1, out2, out1, FFTW_MEASURE); ! dsp_add(sigfftw_perform, 1, &x->plan); }
*************** *** 361,366 **** gensym("dsp"), 0);
! sigifftw_class = class_new(gensym("ifft~"), sigifftw_new, ! (t_method) sigifftw_free, sizeof(t_sigfftw), 0, 0); CLASS_MAINSIGNALIN(sigifftw_class, t_sigfftw, x_f); --- 335,340 ---- gensym("dsp"), 0);
! sigifftw_class = class_new(gensym("ifft~"), sigfftw_new, ! (t_method) sigfftw_free, sizeof(t_sigfftw), 0, 0); CLASS_MAINSIGNALIN(sigifftw_class, t_sigfftw, x_f); *************** *** 414,420 **** static t_int *sigrfftw_perform(t_int *w) { ! t_sigrfftw * x =(t_sigrfftw *) w[1]; ! ! fftwf_execute(x->plan); sigrfftw_invert((t_sample*)w[2],(t_int)w[3]);
--- 388,392 ---- static t_int *sigrfftw_perform(t_int *w) { ! fftwf_execute(*(fftwf_plan*)w[1]); sigrfftw_invert((t_sample*)w[2],(t_int)w[3]);
*************** *** 442,446 **** in, out1, out2, FFTW_MEASURE); ! dsp_add(sigrfftw_perform,3,x,out2+1,n2-1); }
--- 414,418 ---- in, out1, out2, FFTW_MEASURE); ! dsp_add(sigrfftw_perform,3,&x->plan,out2+1,n2-1); }
*************** *** 490,497 **** static t_int *sigrifftw_perform(t_int *w) { - t_sigrifftw * x =(t_sigrifftw *) w[1]; - sigrfftw_invert((t_sample *)w[2],w[3]); ! fftwf_execute(x->plan);
return (w+4); --- 462,467 ---- static t_int *sigrifftw_perform(t_int *w) { sigrfftw_invert((t_sample *)w[2],w[3]); ! fftwf_execute(*(fftwf_plan*)w[1]);
return (w+4); *************** *** 513,517 **** else { - //prepare the fft x->dim.n=n; x->dim.is=1; --- 483,486 ---- *************** *** 520,524 **** in1, in2, out, FFTW_MEASURE); ! dsp_add(sigrifftw_perform,3,x,in2,n2); } } --- 489,493 ---- in1, in2, out, FFTW_MEASURE); ! dsp_add(sigrifftw_perform,3,&x->plan,in2,n2); } }