fixed-point version of the high-pass seems to work now.
[speexdsp.git] / libspeex / smallft.c
index 4abbe13..269549d 100644 (file)
@@ -11,7 +11,7 @@
  ********************************************************************
 
  function: *unnormalized* fft transform
- last mod: $Id: smallft.c,v 1.2 2003/09/16 18:35:45 jm Exp $
+ last mod: $Id: smallft.c,v 1.19 2003/10/08 05:12:37 jm Exp $
 
  ********************************************************************/
 
  * FORTRAN version
  */
 
-#include <stdlib.h>
-#include <string.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <math.h>
 #include "smallft.h"
-/*#include "misc.h"*/
+#include "misc.h"
 
 static void drfti1(int n, float *wa, int *ifac){
   static int ntryh[4] = { 4,2,3,5 };
@@ -1228,27 +1230,31 @@ static void drftb1(int n, float *c, float *ch, float *wa, int *ifac){
   for(i=0;i<n;i++)c[i]=ch[i];
 }
 
-void drft_forward(struct drft_lookup *l,float *data){
+void spx_drft_forward(struct drft_lookup *l,float *data){
   if(l->n==1)return;
   drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
 }
 
-void drft_backward(struct drft_lookup *l,float *data){
+void spx_drft_backward(struct drft_lookup *l,float *data){
   if (l->n==1)return;
   drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
 }
 
-void drft_init(struct drft_lookup *l,int n){
+void spx_drft_init(struct drft_lookup *l,int n)
+{
   l->n=n;
-  l->trigcache=calloc(3*n,sizeof(*l->trigcache));
-  l->splitcache=calloc(32,sizeof(*l->splitcache));
+  l->trigcache=(float*)speex_alloc(3*n*sizeof(*l->trigcache));
+  l->splitcache=(int*)speex_alloc(32*sizeof(*l->splitcache));
   fdrffti(n, l->trigcache, l->splitcache);
 }
 
-void drft_clear(struct drft_lookup *l){
-  if(l){
-    if(l->trigcache)free(l->trigcache);
-    if(l->splitcache)free(l->splitcache);
-    memset(l,0,sizeof(*l));
+void spx_drft_clear(struct drft_lookup *l)
+{
+  if(l)
+  {
+    if(l->trigcache)
+      speex_free(l->trigcache);
+    if(l->splitcache)
+      speex_free(l->splitcache);
   }
 }