cleanup in EC and hitter buffer. removed some automake options
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Thu, 15 Jul 2004 07:52:16 +0000 (07:52 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Thu, 15 Jul 2004 07:52:16 +0000 (07:52 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@7136 0101bb08-14d6-0310-b084-bc0e0c8e3800

Makefile.am
include/speex/speex_echo.h
include/speex/speex_jitter.h
libspeex/jitter.c
libspeex/mdf.c

index 224ca0a..189c2c9 100644 (file)
@@ -2,7 +2,7 @@
 
 # To disable automatic dependency tracking if using other tools than
 # gcc and gmake, add the option 'no-dependencies'
-AUTOMAKE_OPTIONS = foreign 1.6 dist-zip
+AUTOMAKE_OPTIONS = 1.6
 
 m4datadir = $(datadir)/aclocal
 m4data_DATA = speex.m4
index 9a7c7ab..846a4d6 100644 (file)
@@ -58,7 +58,6 @@ typedef struct SpeexEchoState {
    float *power;
    float *power_1;
    float *grad;
-   float *old_grad;
 
    struct drft_lookup *fft_lookup;
 
@@ -75,6 +74,9 @@ void speex_echo_state_destroy(SpeexEchoState *st);
 /** Performs echo cancellation a frame */
 void speex_echo_cancel(SpeexEchoState *st, short *ref, short *echo, short *out, int *Y);
 
+/** Reset the echo canceller state */
+void speex_echo_reset(SpeexEchoState *st);
+
 #ifdef __cplusplus
 }
 #endif
index 243a9bc..6e507b0 100644 (file)
@@ -64,12 +64,8 @@ typedef struct SpeexJitter {
    int reset_state;
    
    int lost_count;
-   float drift_average;
    float shortterm_margin[MAX_MARGIN];
    float longterm_margin[MAX_MARGIN];
-   float late_ratio;
-   float ontime_ratio;
-   float early_ratio;
    float loss_rate;
 } SpeexJitter;
 
@@ -79,9 +75,7 @@ void speex_jitter_destroy(SpeexJitter *jitter);
 
 void speex_jitter_put(SpeexJitter *jitter, char *packet, int len, int time);
 
-void speex_jitter_get(SpeexJitter *jitter, short *out);
-
-int speex_jitter_get_pointer_timestamp(SpeexJitter *jitter);
+void speex_jitter_get(SpeexJitter *jitter, short *out, int *current_timestamp);
 
 #ifdef __cplusplus
 }
index ecc0ffb..0f0cd85 100644 (file)
@@ -85,10 +85,6 @@ void speex_jitter_put(SpeexJitter *jitter, char *packet, int len, int timestamp)
    {
       jitter->reset_state=0;
       jitter->pointer_timestamp = timestamp-jitter->frame_time * jitter->buffer_size;
-      jitter->drift_average = 0;
-      jitter->late_ratio = 0;
-      jitter->early_ratio = 0;
-      jitter->ontime_ratio = 0;
       for (i=0;i<MAX_MARGIN;i++)
       {
          jitter->shortterm_margin[i] = 0;
@@ -178,7 +174,7 @@ void speex_jitter_put(SpeexJitter *jitter, char *packet, int len, int timestamp)
    /*fprintf (stderr, "margin : %d %d %f %f %f %f\n", arrival_margin, jitter->buffer_size, 100*jitter->loss_rate, 100*jitter->late_ratio, 100*jitter->ontime_ratio, 100*jitter->early_ratio);*/
 }
 
-void speex_jitter_get(SpeexJitter *jitter, short *out)
+void speex_jitter_get(SpeexJitter *jitter, short *out, int *current_timestamp)
 {
    int i;
    int ret;
@@ -223,7 +219,8 @@ void speex_jitter_get(SpeexJitter *jitter, short *out)
       jitter->longterm_margin[0] = 0;            
       /*fprintf (stderr, "interpolate frame\n");*/
       speex_decode_int(jitter->dec, NULL, out);
-      jitter->drift_average += jitter->frame_time;
+      if (current_timestamp)
+         *current_timestamp = jitter->pointer_timestamp;
       return;
    }
    
@@ -243,9 +240,10 @@ void speex_jitter_get(SpeexJitter *jitter, short *out)
       jitter->longterm_margin[MAX_MARGIN-1] = 0;      
       /*fprintf (stderr, "drop frame\n");*/
       jitter->pointer_timestamp += jitter->frame_time;
-      jitter->drift_average -= jitter->frame_time;
    }
 
+   if (current_timestamp)
+      *current_timestamp = jitter->pointer_timestamp;
 
    /* Send zeros while we fill in the buffer */
    if (jitter->pointer_timestamp<0)
index eeabfbe..ed201c8 100644 (file)
@@ -75,7 +75,6 @@ SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length)
    st->power = (float*)speex_alloc((frame_size+1)*sizeof(float));
    st->power_1 = (float*)speex_alloc((frame_size+1)*sizeof(float));
    st->grad = (float*)speex_alloc(N*M*sizeof(float));
-   st->old_grad = (float*)speex_alloc(N*M*sizeof(float));
    
    for (i=0;i<N*M;i++)
    {
@@ -84,6 +83,20 @@ SpeexEchoState *speex_echo_state_init(int frame_size, int filter_length)
    return st;
 }
 
+void speex_echo_reset(SpeexEchoState *st)
+{
+   int i, M, N;
+   st->cancel_count=0;
+   st->adapt_rate = .01f;
+   N = st->window_size;
+   M = st->M;
+   for (i=0;i<N*M;i++)
+   {
+      st->W[i] = 0;
+      st->X[i] = 0;
+   }
+}
+
 /** Destroys an echo canceller state */
 void speex_echo_state_destroy(SpeexEchoState *st)
 {
@@ -102,7 +115,6 @@ void speex_echo_state_destroy(SpeexEchoState *st)
    speex_free(st->power);
    speex_free(st->power_1);
    speex_free(st->grad);
-   speex_free(st->old_grad);
 
    speex_free(st);
 }
@@ -291,7 +303,6 @@ void speex_echo_cancel(SpeexEchoState *st, short *ref, short *echo, short *out,
 
       for (i=0;i<N;i++)
       {
-         st->old_grad[j*N+i] = st->PHI[i];
          st->grad[j*N+i] = st->PHI[i];
       }