fixed-point: saturation for lsp_to_lpc, probably not the best solution
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:44:02 +0000 (04:44 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Wed, 8 Oct 2003 04:44:02 +0000 (04:44 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@5424 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/lsp.c
libspeex/sb_celp.c
libspeex/smallft.c

index 1c45f5b..6b16cff 100644 (file)
@@ -375,7 +375,13 @@ void lsp_to_lpc(float *freq,spx_coef_t *ak,int lpcrdr, char *stack)
        }
        xout1 = xin1 + *(n4+1);
        xout2 = xin2 - *(n4+2);
-       ak[j] = ((128+xout1 + xout2)>>8);
+        /* FIXME: perhaps apply bandwidth expansion in case of overflow? */
+        if (xout1 + xout2>256*32766)
+           ak[j] = 32767;
+        else if (xout1 + xout2 < -256*32767)
+           ak[j] = -32768;
+        else
+           ak[j] = ((128+xout1 + xout2)>>8);
        *(n4+1) = xin1;
        *(n4+2) = xin2;
 
index 1130940..d92188d 100644 (file)
@@ -130,7 +130,7 @@ void *sb_encoder_init(SpeexMode *m)
    SBEncState *st;
    SpeexSBMode *mode;
 
-   st = (SBEncState*)speex_alloc(sizeof(SBEncState)+8000*sizeof(float));
+   st = (SBEncState*)speex_alloc(sizeof(SBEncState)+8000*sizeof(spx_sig_t));
    st->mode = m;
    mode = (SpeexSBMode*)m->mode;
 
@@ -686,7 +686,7 @@ void *sb_decoder_init(SpeexMode *m)
 {
    SBDecState *st;
    SpeexSBMode *mode;
-   st = (SBDecState*)speex_alloc(sizeof(SBDecState)+6000*sizeof(float));
+   st = (SBDecState*)speex_alloc(sizeof(SBDecState)+6000*sizeof(spx_sig_t));
    st->mode = m;
    mode=(SpeexSBMode*)m->mode;
 
index 16009be..7dd7e20 100644 (file)
@@ -11,7 +11,7 @@
  ********************************************************************
 
  function: *unnormalized* fft transform
- last mod: $Id: smallft.c,v 1.4 2003/10/08 04:42:59 jm Exp $
+ last mod: $Id: smallft.c,v 1.5 2003/10/08 04:44:02 jm Exp $
 
  ********************************************************************/