smallft.h doesn't need to be included from the .h files anymore
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Tue, 16 Sep 2003 18:35:45 +0000 (18:35 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Tue, 16 Sep 2003 18:35:45 +0000 (18:35 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5341 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/mdf.c
libspeex/preprocess.c
libspeex/smallft.c
libspeex/smallft.h
libspeex/speex_echo.h
libspeex/speex_preprocess.h

index 0ad9656..7addaaf 100644 (file)
@@ -55,7 +55,8 @@ SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length)
    st->cancel_count=0;
    st->adapt_rate = .01;
 
-   drft_init(&st->fft_lookup, N);
+   st->fft_lookup = speex_alloc(sizeof(struct drft_lookup));
+   drft_init(st->fft_lookup, N);
    
    st->x = (float*)speex_alloc(N*sizeof(float));
    st->d = (float*)speex_alloc(N*sizeof(float));
@@ -82,7 +83,8 @@ SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length)
 /** Destroys an echo canceller state */
 void speex_echo_state_destroy(SpeexEchoState *st)
 {
-   drft_clear(&st->fft_lookup);
+   drft_clear(st->fft_lookup);
+   speex_free(st->fft_lookup);
    speex_free(st->x);
    speex_free(st->d);
    speex_free(st->y);
@@ -133,7 +135,7 @@ void speex_echo_cancel(SpeexEchoState *st, float *ref, float *echo, float *out,
       st->X[(M-1)*N+i]=st->x[i];
 
    /* Convert x (echo input) to frequency domain */
-   drft_forward(&st->fft_lookup, &st->X[(M-1)*N]);
+   drft_forward(st->fft_lookup, &st->X[(M-1)*N]);
 
 
    /* Compute filter response Y */
@@ -157,7 +159,7 @@ void speex_echo_cancel(SpeexEchoState *st, float *ref, float *echo, float *out,
    /* Transform d (reference signal) to frequency domain */
    for (i=0;i<N;i++)
       st->D[i]=st->d[i];
-   drft_forward(&st->fft_lookup, st->D);
+   drft_forward(st->fft_lookup, st->D);
 
    /* Evaluate "spectral distance" between Y and D t odetect crosstalk */
    for (i=1;i<N-1;i+=2)
@@ -187,7 +189,7 @@ void speex_echo_cancel(SpeexEchoState *st, float *ref, float *echo, float *out,
       st->y[i] = st->Y[i];
    
    /* Convery Y (filter response) to time domain */
-   drft_backward(&st->fft_lookup, st->y);
+   drft_backward(st->fft_lookup, st->y);
    for (i=0;i<N;i++)
       st->y[i] *= scale;
 
@@ -200,7 +202,7 @@ void speex_echo_cancel(SpeexEchoState *st, float *ref, float *echo, float *out,
    }
 
    /* Convert error to frequency domain */
-   drft_forward(&st->fft_lookup, st->E);
+   drft_forward(st->fft_lookup, st->E);
 
    for (i=0;i<st->frame_size;i++)
    {
@@ -296,12 +298,12 @@ void speex_echo_cancel(SpeexEchoState *st, float *ref, float *echo, float *out,
       
 
 #if 0 /* Set to 1 to enable MDF instead of AUMDF (and comment out weight constraint below) */
-      drft_backward(&st->fft_lookup, st->PHI);
+      drft_backward(st->fft_lookup, st->PHI);
       for (i=0;i<N;i++)
          st->PHI[i]*=scale;
       for (i=st->frame_size;i<N;i++)
         st->PHI[i]=0;
-      drft_forward(&st->fft_lookup, st->PHI);
+      drft_forward(st->fft_lookup, st->PHI);
 #endif
      
 
@@ -339,14 +341,14 @@ void speex_echo_cancel(SpeexEchoState *st, float *ref, float *echo, float *out,
    {
       if (st->cancel_count%M == j)
       {
-         drft_backward(&st->fft_lookup, &st->W[j*N]);
+         drft_backward(st->fft_lookup, &st->W[j*N]);
          for (i=0;i<N;i++)
             st->W[j*N+i]*=scale;
          for (i=st->frame_size;i<N;i++)
          {
             st->W[j*N+i]=0;
          }
-         drft_forward(&st->fft_lookup, &st->W[j*N]);
+         drft_forward(st->fft_lookup, &st->W[j*N]);
       }
 
    }
index 7f2544e..2b2b3b8 100644 (file)
@@ -35,6 +35,7 @@
 #include "speex_preprocess.h"
 #include <stdio.h>
 #include "misc.h"
+#include "smallft.h"
 
 #define STABILITY_TIME 20
 #define NB_LAST_PS 10
@@ -181,7 +182,8 @@ SpeexPreprocessState *speex_preprocess_state_init(int frame_size)
    st->loudness2 = 6000;
    st->nb_loudness_adapt = 0;
 
-   drft_init(&st->fft_lookup,2*N);
+   st->fft_lookup = speex_alloc(sizeof(struct drft_lookup));
+   drft_init(st->fft_lookup,2*N);
 
    st->nb_adapt=0;
    st->consec_noise=0;
@@ -217,8 +219,9 @@ void speex_preprocess_state_destroy(SpeexPreprocessState *st)
    speex_free(st->inbuf);
    speex_free(st->outbuf);
 
-   drft_clear(&st->fft_lookup);
-   
+   drft_clear(st->fft_lookup);
+   speex_free(st->fft_lookup);
+
    speex_free(st);
 }
 
@@ -512,7 +515,7 @@ int speex_preprocess(SpeexPreprocessState *st, float *x, float *echo)
       st->frame[i] *= st->window[i];
 
    /* Perform FFT */
-   drft_forward(&st->fft_lookup, st->frame);
+   drft_forward(st->fft_lookup, st->frame);
 
    /************************************************************** 
     *  Denoise in spectral domain using Ephraim-Malah algorithm  *
@@ -756,7 +759,7 @@ int speex_preprocess(SpeexPreprocessState *st, float *x, float *echo)
    st->frame[2*N-1]=0;
 
    /* Inverse FFT with 1/N scaling */
-   drft_backward(&st->fft_lookup, st->frame);
+   drft_backward(st->fft_lookup, st->frame);
 
    for (i=0;i<2*N;i++)
       st->frame[i] *= scale;
index 8a45d0c..4abbe13 100644 (file)
@@ -11,7 +11,7 @@
  ********************************************************************
 
  function: *unnormalized* fft transform
- last mod: $Id: smallft.c,v 1.1 2003/05/08 04:04:49 jm Exp $
+ last mod: $Id: smallft.c,v 1.2 2003/09/16 18:35:45 jm Exp $
 
  ********************************************************************/
 
@@ -1228,24 +1228,24 @@ 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(drft_lookup *l,float *data){
+void 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(drft_lookup *l,float *data){
+void 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(drft_lookup *l,int n){
+void 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));
   fdrffti(n, l->trigcache, l->splitcache);
 }
 
-void drft_clear(drft_lookup *l){
+void drft_clear(struct drft_lookup *l){
   if(l){
     if(l->trigcache)free(l->trigcache);
     if(l->splitcache)free(l->splitcache);
index 660c704..6f26920 100644 (file)
@@ -11,7 +11,7 @@
  ********************************************************************
 
  function: fft transform
- last mod: $Id: smallft.h,v 1.2 2003/05/12 01:23:51 jm Exp $
+ last mod: $Id: smallft.h,v 1.3 2003/09/16 18:35:45 jm Exp $
 
  ********************************************************************/
 
 extern "C" {
 #endif
 
-typedef struct {
+struct drft_lookup{
   int n;
   float *trigcache;
   int *splitcache;
-} drft_lookup;
+};
 
-extern void drft_forward(drft_lookup *l,float *data);
-extern void drft_backward(drft_lookup *l,float *data);
-extern void drft_init(drft_lookup *l,int n);
-extern void drft_clear(drft_lookup *l);
+extern void drft_forward(struct drft_lookup *l,float *data);
+extern void drft_backward(struct drft_lookup *l,float *data);
+extern void drft_init(struct drft_lookup *l,int n);
+extern void drft_clear(struct drft_lookup *l);
 
 #ifdef __cplusplus
 }
index fde2ecb..c63ab6b 100644 (file)
@@ -30,7 +30,7 @@
    POSSIBILITY OF SUCH DAMAGE.
 */
 
-#include "smallft.h"
+struct drft_lookup;
 
 typedef struct SpeexEchoState {
    int frame_size;           /**< Number of samples processed each time */
@@ -53,7 +53,7 @@ typedef struct SpeexEchoState {
    float *grad;
    float *old_grad;
 
-   drft_lookup fft_lookup;
+   struct drft_lookup *fft_lookup;
 
 
 } SpeexEchoState;
index a076e65..055d121 100644 (file)
 */
 
 
-#include "smallft.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+struct drft_lookup;
+
 typedef struct SpeexPreprocessState {
    int    frame_size;        /**< Number of samples processed each time */
    int    ps_size;           /**< Number of points in the power spectrum */
@@ -87,7 +87,7 @@ typedef struct SpeexPreprocessState {
    int    nb_min_estimate;   /**< */
    int    last_update;       /**< */
    float  min_ener;          /**< */
-   drft_lookup fft_lookup;   /**< Lookup table for the FFT */
+   struct drft_lookup *fft_lookup;   /**< Lookup table for the FFT */
 
 } SpeexPreprocessState;