gst_plugins_base/gst-libs/gst/fft/gstffts16.c
changeset 8 4a7fac7dd34a
parent 0 0e761a78d257
child 30 7e817e7e631c
--- a/gst_plugins_base/gst-libs/gst/fft/gstffts16.c	Fri Mar 19 09:35:09 2010 +0200
+++ b/gst_plugins_base/gst-libs/gst/fft/gstffts16.c	Fri Apr 16 15:15:52 2010 +0300
@@ -20,6 +20,7 @@
 #include <glib.h>
 #include <math.h>
 
+#include "_kiss_fft_guts_s16.h"
 #include "kiss_fftr_s16.h"
 #include "gstfft.h"
 #include "gstffts16.h"
@@ -78,13 +79,18 @@
 gst_fft_s16_new (gint len, gboolean inverse)
 {
   GstFFTS16 *self;
+  gsize subsize = 0, memneeded;
 
   g_return_val_if_fail (len > 0, NULL);
   g_return_val_if_fail (len % 2 == 0, NULL);
 
-  self = g_new (GstFFTS16, 1);
+  kiss_fftr_s16_alloc (len, (inverse) ? 1 : 0, NULL, &subsize);
+  memneeded = ALIGN_STRUCT (sizeof (GstFFTS16)) + subsize;
 
-  self->cfg = kiss_fftr_s16_alloc (len, (inverse) ? 1 : 0, NULL, NULL);
+  self = (GstFFTS16 *) g_malloc0 (memneeded);
+
+  self->cfg = (((guint8 *) self) + ALIGN_STRUCT (sizeof (GstFFTS16)));
+  self->cfg = kiss_fftr_s16_alloc (len, (inverse) ? 1 : 0, self->cfg, &subsize);
   g_assert (self->cfg);
 
   self->inverse = inverse;
@@ -168,7 +174,6 @@
 void
 gst_fft_s16_free (GstFFTS16 * self)
 {
-  kiss_fftr_s16_free (self->cfg);
   g_free (self);
 }