FastLED 3.9.15
Loading...
Searching...
No Matches

◆ kiss_fftr_alloc()

kiss_fftr_cfg kiss_fftr_alloc ( int nfft,
int inverse_fft,
void * mem,
size_t * lenmem )

Definition at line 35 of file kiss_fftr.cpp.hpp.

36{
37 int i;
39 size_t subsize = 0, memneeded;
40
41 if (nfft & 1) {
42 //fprintf(stderr,"Real FFT optimization must be even.\n");
43 FL_WARN("Real FFT optimization must be even.");
44 return NULL;
45 }
46 nfft >>= 1;
47
48 kiss_fft_alloc (nfft, inverse_fft, NULL, &subsize);
49 memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 3 / 2);
50
51 if (lenmem == NULL) {
52 st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded);
53 } else {
54 if (*lenmem >= memneeded)
55 st = (kiss_fftr_cfg) mem;
56 *lenmem = memneeded;
57 }
58 if (!st)
59 return NULL;
60
61 st->substate = (kiss_fft_cfg) (st + 1); /*just beyond kiss_fftr_state struct */
62
63 #pragma GCC diagnostic push
64 #pragma GCC diagnostic ignored "-Wcast-align"
65 // This cast alginment might be a problem, kiss_fft_cpx has alignment-2.
66 st->tmpbuf = (kiss_fft_cpx *) (((char *) st->substate) + subsize);
67 #pragma GCC diagnostic pop
68
69 st->super_twiddles = st->tmpbuf + nfft;
70 kiss_fft_alloc(nfft, inverse_fft, st->substate, &subsize);
71
72 for (i = 0; i < nfft/2; ++i) {
73 double phase =
74 -3.14159265358979323846264338327 * ((double) (i+1) / nfft + .5);
75 if (inverse_fft)
76 phase *= -1;
77 kf_cexp (st->super_twiddles+i,phase);
78 }
79 return st;
80}
#define kf_cexp(x, phase)
#define NULL
kiss_fft_cfg kiss_fft_alloc(int nfft, int inverse_fft, void *mem, size_t *lenmem) FL_NOEXCEPT
struct kiss_fft_state * kiss_fft_cfg
Definition kiss_fft.h:89
#define KISS_FFT_MALLOC(nbytes)
Definition kiss_fft.h:60
kiss_fft_cfg substate
kiss_fft_cpx * tmpbuf
kiss_fft_cpx * super_twiddles
struct kiss_fftr_state * kiss_fftr_cfg
Definition kiss_fftr.h:26
#define FL_WARN(X)
Definition log.h:276

References FL_NOEXCEPT, FL_WARN, kf_cexp, kiss_fft_alloc(), KISS_FFT_MALLOC, NULL, kiss_fftr_state::substate, kiss_fftr_state::super_twiddles, and kiss_fftr_state::tmpbuf.

Referenced by fl::audio::fft::Context::Context(), generate_kernels(), and fl::audio::fft::Context::initHybrid().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: