From 02e3467b75a6e205c6bd2e82d3a1c8daa3c81f6f Mon Sep 17 00:00:00 2001 From: Anthony Blake Date: Thu, 15 Nov 2012 16:04:56 +1300 Subject: 2D real-valued transforms work --- src/ffts_nd.c | 14 +++--- src/ffts_real_nd.c | 130 +++++++---------------------------------------------- 2 files changed, 23 insertions(+), 121 deletions(-) (limited to 'src') diff --git a/src/ffts_nd.c b/src/ffts_nd.c index b87822e..76d3fc4 100644 --- a/src/ffts_nd.c +++ b/src/ffts_nd.c @@ -133,13 +133,13 @@ void ffts_transpose(uint64_t *in, uint64_t *out, int w, int h, uint64_t *buf) { size_t i,j; for(i=0;iNs); - free(p->Ms); - - int i; - for(i=0;irank;i++) { - - ffts_plan_t *x = p->plans[i]; - int k; - for(k=0;kplans[k]) x = NULL; - } - - ffts_free(x); - } - - free(p->plans); - free(p->buf); - free(p->transpose_buf); - free(p); -} -void ffts_transpose(uint64_t *in, uint64_t *out, int w, int h, uint64_t *buf) { +void ffts_scalar_transpose(uint64_t *in, uint64_t *out, int w, int h, uint64_t *buf) { -#ifdef __ARM_NEON__ - size_t i,j,k; - int linebytes = w*8; - - for(j=0;jbuf; uint64_t *dout = (uint64_t *)out; @@ -156,22 +58,22 @@ void ffts_execute_nd_real(ffts_plan_t *p, const data_t * in, data_t * out) { for(i=0;iNs[0];i++) { p->plans[0]->transform(p->plans[0], din + (i * p->Ms[0]), buf + (i * p->Ms[0])); } - ffts_transpose(buf, dout, p->Ms[0], p->Ns[0], p->transpose_buf); + ffts_scalar_transpose(buf, dout, p->Ms[0], p->Ns[0], p->transpose_buf); for(i=1;irank;i++) { for(j=0;jNs[i];j++) { p->plans[i]->transform(p->plans[i], dout + (j * p->Ms[i]), buf + (j * p->Ms[i])); } - ffts_transpose(buf, dout, p->Ms[i], p->Ns[i], p->transpose_buf); + ffts_scalar_transpose(buf, dout, p->Ms[i], p->Ns[i], p->transpose_buf); } } -*/ + ffts_plan_t *ffts_init_nd_real(int rank, size_t *Ns, int sign) { size_t vol = 1; ffts_plan_t *p = malloc(sizeof(ffts_plan_t)); - p->transform = &ffts_execute_nd; + p->transform = &ffts_execute_nd_real; p->destroy = &ffts_free_nd; p->rank = rank; @@ -190,13 +92,13 @@ ffts_plan_t *ffts_init_nd_real(int rank, size_t *Ns, int sign) { p->plans[i] = NULL; int k; - for(k=1;kMs[k] == p->Ms[i]) - p->plans[i] = p->plans[k]; - } + for(k=1;kMs[k] == p->Ms[i]) + p->plans[i] = p->plans[k]; + } - if(!i) p->plans[i] = ffts_init_1d_real(p->Ms[i], sign); - if(!p->plans[i]) p->plans[i] = ffts_init_1d(p->Ms[i], sign); + if(!i) p->plans[i] = ffts_init_1d_real(p->Ms[i], sign); + else if(!p->plans[i]) p->plans[i] = ffts_init_1d(p->Ms[i], sign); } -- cgit v1.1