diff --git a/libcelt/celt.c b/libcelt/celt.c index 26f337a0..0adc610f 100644 --- a/libcelt/celt.c +++ b/libcelt/celt.c @@ -130,7 +130,7 @@ void celt_encoder_destroy(CELTEncoder *st) ec_byte_writeclear(&st->buf); mdct_clear(&st->mdct_lookup); - free(st->fft); + kiss_fft_free(st->fft); celt_free(st->window); celt_free(st->in_mem); diff --git a/libcelt/kiss_fft.c b/libcelt/kiss_fft.c index eb864e60..5e7ca198 100644 --- a/libcelt/kiss_fft.c +++ b/libcelt/kiss_fft.c @@ -609,7 +609,7 @@ kiss_fft_cfg kiss_fft_alloc(int nfft,void * mem,size_t * lenmem ) { kiss_fft_cfg st=NULL; size_t memneeded = sizeof(struct kiss_fft_state) - + sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/ + + sizeof(kiss_fft_cpx)*(nfft-1) + sizeof(int)*nfft; /* twiddle factors*/ if ( lenmem==NULL ) { st = ( kiss_fft_cfg)KISS_FFT_MALLOC( memneeded ); @@ -636,7 +636,7 @@ kiss_fft_cfg kiss_fft_alloc(int nfft,void * mem,size_t * lenmem ) kf_factor(nfft,st->factors); /* bitrev */ - st->bitrev = celt_alloc(sizeof(int)*(nfft)); + st->bitrev = (int*)((char*)st + memneeded - sizeof(int)*nfft); compute_bitrev_table(st->bitrev, 0, 1,1, st->factors,st); } return st;