From 0a741312eea3cf6c06ba3663650ffa3691b642e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 17 Oct 2005 16:17:05 +0000 Subject: made code more readable for me made object less crashy svn path=/trunk/externals/iem/iemmatrix/; revision=3720 --- src/mtx_rowrfft.c | 142 ++++++++++++++++++++++++------------------------------ 1 file changed, 63 insertions(+), 79 deletions(-) (limited to 'src/mtx_rowrfft.c') diff --git a/src/mtx_rowrfft.c b/src/mtx_rowrfft.c index e7f0551..763003c 100644 --- a/src/mtx_rowrfft.c +++ b/src/mtx_rowrfft.c @@ -20,12 +20,8 @@ typedef struct _MTXRowrfft_ MTXRowrfft; struct _MTXRowrfft_ { t_object x_obj; - int rows; - int columns; - int columns_re; int size; int size2; - t_float renorm_fac; t_float *f_re; t_float *f_im; @@ -37,31 +33,32 @@ struct _MTXRowrfft_ t_atom *list_im; }; -static void deleteMTXRowrfft (MTXRowrfft *mtx_rowrfft_obj) +static void deleteMTXRowrfft (MTXRowrfft *x) { - if (mtx_rowrfft_obj->f_re) - freebytes (mtx_rowrfft_obj->f_re, sizeof(t_float)*mtx_rowrfft_obj->size); - if (mtx_rowrfft_obj->f_im) - freebytes (mtx_rowrfft_obj->f_im, sizeof(t_float)*mtx_rowrfft_obj->size); - if (mtx_rowrfft_obj->list_re) - freebytes (mtx_rowrfft_obj->list_re, sizeof(t_atom)*(mtx_rowrfft_obj->size2+2)); - if (mtx_rowrfft_obj->list_im) - freebytes (mtx_rowrfft_obj->list_im, sizeof(t_atom)*(mtx_rowrfft_obj->size2+2)); + free (x->f_re); + free (x->f_im); + free (x->list_re); + free (x->list_im); } static void *newMTXRowrfft (t_symbol *s, int argc, t_atom *argv) { - MTXRowrfft *mtx_rowrfft_obj = (MTXRowrfft *) pd_new (mtx_rowrfft_class); - mtx_rowrfft_obj->list_re_out = outlet_new (&mtx_rowrfft_obj->x_obj, gensym("matrix")); - mtx_rowrfft_obj->list_im_out = outlet_new (&mtx_rowrfft_obj->x_obj, gensym("matrix")); - return ((void *) mtx_rowrfft_obj); + MTXRowrfft *x = (MTXRowrfft *) pd_new (mtx_rowrfft_class); + x->list_re_out = outlet_new (&x->x_obj, gensym("matrix")); + x->list_im_out = outlet_new (&x->x_obj, gensym("matrix")); + + x->size=x->size2=0; + x->f_re=x->f_im=0; + x->list_re=x->list_im=0; + + return ((void *) x); } -static void mTXrowrfftBang (MTXRowrfft *mtx_rowrfft_obj) +static void mTXrowrfftBang (MTXRowrfft *x) { - if (mtx_rowrfft_obj->list_im) { - outlet_anything(mtx_rowrfft_obj->list_im_out, gensym("matrix"), mtx_rowrfft_obj->size2+2, mtx_rowrfft_obj->list_im); - outlet_anything(mtx_rowrfft_obj->list_re_out, gensym("matrix"), mtx_rowrfft_obj->size2+2, mtx_rowrfft_obj->list_re); + if (x->list_im) { + outlet_anything(x->list_im_out, gensym("matrix"), x->size2, x->list_im); + outlet_anything(x->list_re_out, gensym("matrix"), x->size2, x->list_re); } } @@ -98,93 +95,80 @@ static void readFloatFromList (int n, t_atom *l, t_float *f) *f++ = atom_getfloat (l++); } -static void mTXrowrfftMatrix (MTXRowrfft *mtx_rowrfft_obj, t_symbol *s, +static void mTXrowrfftMatrix (MTXRowrfft *x, t_symbol *s, int argc, t_atom *argv) { - //mTXrowrfftList (mtx_rowrfft_obj, s, argc-2, argv+2); + //mTXrowrfftList (x, s, argc-2, argv+2); int rows = atom_getint (argv++); int columns = atom_getint (argv++); - int columns_re = (columns>>1)+1; + int columns_re = (columns>>1); int size = rows * columns; int in_size = argc-2; - int size2 = columns_re * rows; + int size2 = columns_re * rows + 2; /* +2 since the list also contains matrix row+col */ int fft_count; - t_atom *ptr_re = mtx_rowrfft_obj->list_re; - t_atom *ptr_im = mtx_rowrfft_obj->list_im; - t_float *f_re = mtx_rowrfft_obj->f_re; - t_float *f_im = mtx_rowrfft_obj->f_im; + t_atom *list_re = x->list_re; + t_atom *list_im = x->list_im; + t_float *f_re = x->f_re; + t_float *f_im = x->f_im; // fftsize check if (!size) post("mtx_rowrfft: invalid dimensions"); else if (in_sizesize) { - f_re = (t_float *) resizebytes (f_re, - sizeof (t_float) * mtx_rowrfft_obj->size, - sizeof (t_float) * size); - f_im = (t_float *) resizebytes (f_im, - sizeof (t_float) * mtx_rowrfft_obj->size, - sizeof (t_float) * size); - ptr_re = (t_atom *) resizebytes (ptr_re, - sizeof (t_atom) * (mtx_rowrfft_obj->size2+2), - sizeof (t_atom) * (size2 + 2)); - ptr_im = (t_atom *) resizebytes (ptr_im, - sizeof (t_atom) * (mtx_rowrfft_obj->size2+2), - sizeof (t_atom) * (size2 + 2)); - } - } - else { - f_re = (t_float *) getbytes (sizeof (t_float) * size); - f_im = (t_float *) getbytes (sizeof (t_float) * size); - ptr_re = (t_atom *) getbytes (sizeof (t_atom) * (size2+2)); - ptr_im = (t_atom *) getbytes (sizeof (t_atom) * (size2+2)); - } - mtx_rowrfft_obj->size = size; - mtx_rowrfft_obj->size2 = size2; - mtx_rowrfft_obj->rows = rows; - mtx_rowrfft_obj->columns = columns; - mtx_rowrfft_obj->columns_re = columns_re; - mtx_rowrfft_obj->list_im = ptr_im; - mtx_rowrfft_obj->list_re = ptr_re; - mtx_rowrfft_obj->f_re = f_re; - mtx_rowrfft_obj->f_im = f_im; - + f_re=(t_float*)realloc(f_re, sizeof(t_float)*size); + f_im=(t_float*)realloc(f_im, sizeof(t_float)*size); + list_re=(t_atom*)realloc(list_re, sizeof(t_atom)*size2); + list_im=(t_atom*)realloc(list_im, sizeof(t_atom)*size2); + + x->size = size; + x->size2 = size2; + x->list_im = list_im; + x->list_re = list_re; + x->f_re = f_re; + x->f_im = f_im; + // main part readFloatFromList (size, argv, f_re); fft_count = rows; - ptr_re += 2; - ptr_im += 2; + list_re += 2; + list_im += 2; while (fft_count--){ mayer_realfft (columns, f_re); fftRestoreImag (columns, f_re, f_im); - writeFloatIntoList (columns_re, ptr_re, f_re); - writeFloatIntoList (columns_re, ptr_im, f_im); + writeFloatIntoList (columns_re, list_re, f_re); + writeFloatIntoList (columns_re, list_im, f_im); f_im += columns; f_re += columns; - ptr_re += columns_re; - ptr_im += columns_re; + list_re += columns_re; + list_im += columns_re; } - ptr_re = mtx_rowrfft_obj->list_re; - ptr_im = mtx_rowrfft_obj->list_im; + + list_re = x->list_re; + list_im = x->list_im; - SETSYMBOL(ptr_re, gensym("matrix")); - SETSYMBOL(ptr_im, gensym("matrix")); - SETFLOAT(ptr_re, rows); - SETFLOAT(ptr_im, rows); - SETFLOAT(&ptr_re[1], columns_re); - SETFLOAT(&ptr_im[1], columns_re); - outlet_anything(mtx_rowrfft_obj->list_im_out, gensym("matrix"), - mtx_rowrfft_obj->size2+2, ptr_im); - outlet_anything(mtx_rowrfft_obj->list_re_out, gensym("matrix"), - mtx_rowrfft_obj->size2+2, ptr_re); + SETSYMBOL(list_re, gensym("matrix")); + SETSYMBOL(list_im, gensym("matrix")); + SETFLOAT(list_re, rows); + SETFLOAT(list_im, rows); + SETFLOAT(list_re+1, columns_re); + SETFLOAT(list_im+1, columns_re); + outlet_anything(x->list_im_out, gensym("matrix"), + x->size2, list_im); + outlet_anything(x->list_re_out, gensym("matrix"), + x->size2, list_re); } else post("mtx_rowfft: rowvector size no power of 2!"); + } void mtx_rowrfft_setup (void) -- cgit v1.2.1