Remove codec-only files
authorslicer <slicer@mumble.hive.no>
Thu, 7 Jan 2010 15:59:45 +0000 (16:59 +0100)
committerslicer <slicer@mumble.hive.no>
Thu, 7 Jan 2010 15:59:45 +0000 (16:59 +0100)
62 files changed:
include/speex/speex_stereo.h [deleted file]
libspeexdsp/Makefile.am
libspeexdsp/bits.c [deleted file]
libspeexdsp/cb_search.c [deleted file]
libspeexdsp/cb_search.h [deleted file]
libspeexdsp/cb_search_arm4.h [deleted file]
libspeexdsp/cb_search_bfin.h [deleted file]
libspeexdsp/cb_search_sse.h [deleted file]
libspeexdsp/exc_10_16_table.c [deleted file]
libspeexdsp/exc_10_32_table.c [deleted file]
libspeexdsp/exc_20_32_table.c [deleted file]
libspeexdsp/exc_5_256_table.c [deleted file]
libspeexdsp/exc_5_64_table.c [deleted file]
libspeexdsp/exc_8_128_table.c [deleted file]
libspeexdsp/filters.c [deleted file]
libspeexdsp/filters.h [deleted file]
libspeexdsp/filters_arm4.h [deleted file]
libspeexdsp/filters_bfin.h [deleted file]
libspeexdsp/filters_sse.h [deleted file]
libspeexdsp/gain_table.c [deleted file]
libspeexdsp/gain_table_lbr.c [deleted file]
libspeexdsp/hexc_10_32_table.c [deleted file]
libspeexdsp/hexc_table.c [deleted file]
libspeexdsp/high_lsp_tables.c [deleted file]
libspeexdsp/lpc.c [deleted file]
libspeexdsp/lpc.h [deleted file]
libspeexdsp/lpc_bfin.h [deleted file]
libspeexdsp/lsp.c [deleted file]
libspeexdsp/lsp.h [deleted file]
libspeexdsp/lsp_bfin.h [deleted file]
libspeexdsp/lsp_tables_nb.c [deleted file]
libspeexdsp/ltp.c [deleted file]
libspeexdsp/ltp.h [deleted file]
libspeexdsp/ltp_arm4.h [deleted file]
libspeexdsp/ltp_bfin.h [deleted file]
libspeexdsp/ltp_sse.h [deleted file]
libspeexdsp/modes.c [deleted file]
libspeexdsp/modes.h [deleted file]
libspeexdsp/modes_wb.c [deleted file]
libspeexdsp/nb_celp.c [deleted file]
libspeexdsp/nb_celp.h [deleted file]
libspeexdsp/quant_lsp.c [deleted file]
libspeexdsp/quant_lsp.h [deleted file]
libspeexdsp/quant_lsp_bfin.h [deleted file]
libspeexdsp/sb_celp.c [deleted file]
libspeexdsp/sb_celp.h [deleted file]
libspeexdsp/speex.c [deleted file]
libspeexdsp/speex_callbacks.c [deleted file]
libspeexdsp/speex_header.c [deleted file]
libspeexdsp/stereo.c [deleted file]
libspeexdsp/testenc.c [deleted file]
libspeexdsp/testenc_uwb.c [deleted file]
libspeexdsp/testenc_wb.c [deleted file]
libspeexdsp/vbr.c [deleted file]
libspeexdsp/vbr.h [deleted file]
libspeexdsp/vorbis_psy.c [deleted file]
libspeexdsp/vq.c [deleted file]
libspeexdsp/vq.h [deleted file]
libspeexdsp/vq_arm4.h [deleted file]
libspeexdsp/vq_bfin.h [deleted file]
libspeexdsp/vq_sse.h [deleted file]
libspeexdsp/window.c [deleted file]

diff --git a/include/speex/speex_stereo.h b/include/speex/speex_stereo.h
deleted file mode 100644 (file)
index 03f8b62..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin*/
-/**
-   @file speex_stereo.h
-   @brief Describes the handling for intensity stereo
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef STEREO_H
-#define STEREO_H
-/** @defgroup SpeexStereoState SpeexStereoState: Handling Speex stereo files
- *  This describes the Speex intensity stereo encoding/decoding
- *  @{
- */
-
-#ifdef _BUILD_SPEEX
-# include "speexdsp_types.h"
-# include "speex_bits.h"
-#else
-# include <speex/speexdsp_types.h>
-# include <speex/speex_bits.h>
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** If you access any of these fields directly, I'll personally come and bite you */
-typedef struct SpeexStereoState {
-   float balance;      /**< Left/right balance info */
-   float e_ratio;      /**< Ratio of energies: E(left+right)/[E(left)+E(right)]  */
-   float smooth_left;  /**< Smoothed left channel gain */
-   float smooth_right; /**< Smoothed right channel gain */
-   float reserved1;    /**< Reserved for future use */
-   float reserved2;    /**< Reserved for future use */
-} SpeexStereoState;
-
-/** Deprecated. Use speex_stereo_state_init() instead. */
-#define SPEEX_STEREO_STATE_INIT {1,.5,1,1,0,0}
-
-/** Initialise/create a stereo stereo state */
-SpeexStereoState *speex_stereo_state_init();
-
-/** Reset/re-initialise an already allocated stereo state */
-void speex_stereo_state_reset(SpeexStereoState *stereo);
-
-/** Destroy a stereo stereo state */
-void speex_stereo_state_destroy(SpeexStereoState *stereo);
-
-/** Transforms a stereo frame into a mono frame and stores intensity stereo info in 'bits' */
-void speex_encode_stereo(float *data, int frame_size, SpeexBits *bits);
-
-/** Transforms a stereo frame into a mono frame and stores intensity stereo info in 'bits' */
-void speex_encode_stereo_int(spx_int16_t *data, int frame_size, SpeexBits *bits);
-
-/** Transforms a mono frame into a stereo frame using intensity stereo info */
-void speex_decode_stereo(float *data, int frame_size, SpeexStereoState *stereo);
-
-/** Transforms a mono frame into a stereo frame using intensity stereo info */
-void speex_decode_stereo_int(spx_int16_t *data, int frame_size, SpeexStereoState *stereo);
-
-/** Callback handler for intensity stereo info */
-int speex_std_stereo_request_handler(SpeexBits *bits, void *state, void *data);
-
-#ifdef __cplusplus
-}
-#endif
-
-/** @} */
-#endif
index ded818e..d4fda3e 100644 (file)
@@ -20,13 +20,13 @@ endif
 
 libspeexdsp_la_SOURCES = preprocess.c jitter.c mdf.c fftwrap.c filterbank.c resample.c buffer.c scal.c $(FFTSRC)
 
-noinst_HEADERS =       arch.h  bfin.h cb_search_arm4.h         cb_search_bfin.h        cb_search_sse.h \
-               filters.h       filters_arm4.h  filters_bfin.h  filters_sse.h   fixed_arm4.h \
-               fixed_arm5e.h   fixed_bfin.h    fixed_debug.h   lpc.h   lpc_bfin.h      ltp.h   ltp_arm4.h \
-               ltp_sse.h       math_approx.h           misc_bfin.h     nb_celp.h       quant_lsp.h     sb_celp.h \
-               stack_alloc.h   vbr.h   vq.h    vq_arm4.h       vq_bfin.h       vq_sse.h cb_search.h fftwrap.h \
-       filterbank.h fixed_generic.h lsp.h lsp_bfin.h ltp_bfin.h modes.h os_support.h \
-       pseudofloat.h quant_lsp_bfin.h smallft.h vorbis_psy.h resample_sse.h
+noinst_HEADERS =       arch.h  bfin.h 
+               fixed_arm4.h \
+               fixed_arm5e.h   fixed_bfin.h    fixed_debug.h   \
+               math_approx.h           misc_bfin.h     \
+               stack_alloc.h   fftwrap.h \
+       filterbank.h fixed_generic.h os_support.h \
+       pseudofloat.h smallft.h vorbis_psy.h resample_sse.h
 
 libspeexdsp_la_LDFLAGS = -no-undefined -version-info @SPEEX_LT_CURRENT@:@SPEEX_LT_REVISION@:@SPEEX_LT_AGE@
 
diff --git a/libspeexdsp/bits.c b/libspeexdsp/bits.c
deleted file mode 100644 (file)
index 95adbfd..0000000
+++ /dev/null
@@ -1,372 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: speex_bits.c
-
-   Handles bit packing/unpacking
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "../include/speex/speex_bits.h"
-#include "arch.h"
-#include "os_support.h"
-
-/* Maximum size of the bit-stream (for fixed-size allocation) */
-#ifndef MAX_CHARS_PER_FRAME
-#define MAX_CHARS_PER_FRAME (2000/BYTES_PER_CHAR)
-#endif
-
-EXPORT void speex_bits_init(SpeexBits *bits)
-{
-   bits->chars = (char*)speex_alloc(MAX_CHARS_PER_FRAME);
-   if (!bits->chars)
-      return;
-
-   bits->buf_size = MAX_CHARS_PER_FRAME;
-
-   bits->owner=1;
-
-   speex_bits_reset(bits);
-}
-
-EXPORT void speex_bits_init_buffer(SpeexBits *bits, void *buff, int buf_size)
-{
-   bits->chars = (char*)buff;
-   bits->buf_size = buf_size;
-
-   bits->owner=0;
-
-   speex_bits_reset(bits);
-}
-
-EXPORT void speex_bits_set_bit_buffer(SpeexBits *bits, void *buff, int buf_size)
-{
-   bits->chars = (char*)buff;
-   bits->buf_size = buf_size;
-
-   bits->owner=0;
-
-   bits->nbBits=buf_size<<LOG2_BITS_PER_CHAR;
-   bits->charPtr=0;
-   bits->bitPtr=0;
-   bits->overflow=0;
-   
-}
-
-EXPORT void speex_bits_destroy(SpeexBits *bits)
-{
-   if (bits->owner)
-      speex_free(bits->chars);
-   /* Will do something once the allocation is dynamic */
-}
-
-EXPORT void speex_bits_reset(SpeexBits *bits)
-{
-   /* We only need to clear the first byte now */
-   bits->chars[0]=0;
-   bits->nbBits=0;
-   bits->charPtr=0;
-   bits->bitPtr=0;
-   bits->overflow=0;
-}
-
-EXPORT void speex_bits_rewind(SpeexBits *bits)
-{
-   bits->charPtr=0;
-   bits->bitPtr=0;
-   bits->overflow=0;
-}
-
-EXPORT void speex_bits_read_from(SpeexBits *bits, const char *chars, int len)
-{
-   int i;
-   int nchars = len / BYTES_PER_CHAR;
-   if (nchars > bits->buf_size)
-   {
-      speex_notify("Packet is larger than allocated buffer");
-      if (bits->owner)
-      {
-         char *tmp = (char*)speex_realloc(bits->chars, nchars);
-         if (tmp)
-         {
-            bits->buf_size=nchars;
-            bits->chars=tmp;
-         } else {
-            nchars=bits->buf_size;
-            speex_warning("Could not resize input buffer: truncating input");
-         }
-      } else {
-         speex_warning("Do not own input buffer: truncating oversize input");
-         nchars=bits->buf_size;
-      }
-   }
-#if (BYTES_PER_CHAR==2)
-/* Swap bytes to proper endian order (could be done externally) */
-#define HTOLS(A) ((((A) >> 8)&0xff)|(((A) & 0xff)<<8))
-#else
-#define HTOLS(A) (A)
-#endif
-   for (i=0;i<nchars;i++)
-      bits->chars[i]=HTOLS(chars[i]);
-
-   bits->nbBits=nchars<<LOG2_BITS_PER_CHAR;
-   bits->charPtr=0;
-   bits->bitPtr=0;
-   bits->overflow=0;
-}
-
-static void speex_bits_flush(SpeexBits *bits)
-{
-   int nchars = ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR);
-   if (bits->charPtr>0)
-      SPEEX_MOVE(bits->chars, &bits->chars[bits->charPtr], nchars-bits->charPtr);
-   bits->nbBits -= bits->charPtr<<LOG2_BITS_PER_CHAR;
-   bits->charPtr=0;
-}
-
-EXPORT void speex_bits_read_whole_bytes(SpeexBits *bits, const char *chars, int nbytes)
-{
-   int i,pos;
-   int nchars = nbytes/BYTES_PER_CHAR;
-
-   if (((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR)+nchars > bits->buf_size)
-   {
-      /* Packet is larger than allocated buffer */
-      if (bits->owner)
-      {
-         char *tmp = (char*)speex_realloc(bits->chars, (bits->nbBits>>LOG2_BITS_PER_CHAR)+nchars+1);
-         if (tmp)
-         {
-            bits->buf_size=(bits->nbBits>>LOG2_BITS_PER_CHAR)+nchars+1;
-            bits->chars=tmp;
-         } else {
-            nchars=bits->buf_size-(bits->nbBits>>LOG2_BITS_PER_CHAR)-1;
-            speex_warning("Could not resize input buffer: truncating oversize input");
-         }
-      } else {
-         speex_warning("Do not own input buffer: truncating oversize input");
-         nchars=bits->buf_size;
-      }
-   }
-
-   speex_bits_flush(bits);
-   pos=bits->nbBits>>LOG2_BITS_PER_CHAR;
-   for (i=0;i<nchars;i++)
-      bits->chars[pos+i]=HTOLS(chars[i]);
-   bits->nbBits+=nchars<<LOG2_BITS_PER_CHAR;
-}
-
-EXPORT int speex_bits_write(SpeexBits *bits, char *chars, int max_nbytes)
-{
-   int i;
-   int max_nchars = max_nbytes/BYTES_PER_CHAR;
-   int charPtr, bitPtr, nbBits;
-
-   /* Insert terminator, but save the data so we can put it back after */
-   bitPtr=bits->bitPtr;
-   charPtr=bits->charPtr;
-   nbBits=bits->nbBits;
-   speex_bits_insert_terminator(bits);
-   bits->bitPtr=bitPtr;
-   bits->charPtr=charPtr;
-   bits->nbBits=nbBits;
-
-   if (max_nchars > ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR))
-      max_nchars = ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR);
-
-   for (i=0;i<max_nchars;i++)
-      chars[i]=HTOLS(bits->chars[i]);
-   return max_nchars*BYTES_PER_CHAR;
-}
-
-EXPORT int speex_bits_write_whole_bytes(SpeexBits *bits, char *chars, int max_nbytes)
-{
-   int max_nchars = max_nbytes/BYTES_PER_CHAR;
-   int i;
-   if (max_nchars > ((bits->nbBits)>>LOG2_BITS_PER_CHAR))
-      max_nchars = ((bits->nbBits)>>LOG2_BITS_PER_CHAR);
-   for (i=0;i<max_nchars;i++)
-      chars[i]=HTOLS(bits->chars[i]);
-
-   if (bits->bitPtr>0)
-      bits->chars[0]=bits->chars[max_nchars];
-   else
-      bits->chars[0]=0;
-   bits->charPtr=0;
-   bits->nbBits &= (BITS_PER_CHAR-1);
-   return max_nchars*BYTES_PER_CHAR;
-}
-
-EXPORT void speex_bits_pack(SpeexBits *bits, int data, int nbBits)
-{
-   unsigned int d=data;
-
-   if (bits->charPtr+((nbBits+bits->bitPtr)>>LOG2_BITS_PER_CHAR) >= bits->buf_size)
-   {
-      speex_notify("Buffer too small to pack bits");
-      if (bits->owner)
-      {
-         int new_nchars = ((bits->buf_size+5)*3)>>1;
-         char *tmp = (char*)speex_realloc(bits->chars, new_nchars);
-         if (tmp)
-         {
-            bits->buf_size=new_nchars;
-            bits->chars=tmp;
-         } else {
-            speex_warning("Could not resize input buffer: not packing");
-            return;
-         }
-      } else {
-         speex_warning("Do not own input buffer: not packing");
-         return;
-      }
-   }
-
-   while(nbBits)
-   {
-      int bit;
-      bit = (d>>(nbBits-1))&1;
-      bits->chars[bits->charPtr] |= bit<<(BITS_PER_CHAR-1-bits->bitPtr);
-      bits->bitPtr++;
-
-      if (bits->bitPtr==BITS_PER_CHAR)
-      {
-         bits->bitPtr=0;
-         bits->charPtr++;
-         bits->chars[bits->charPtr] = 0;
-      }
-      bits->nbBits++;
-      nbBits--;
-   }
-}
-
-EXPORT int speex_bits_unpack_signed(SpeexBits *bits, int nbBits)
-{
-   unsigned int d=speex_bits_unpack_unsigned(bits,nbBits);
-   /* If number is negative */
-   if (d>>(nbBits-1))
-   {
-      d |= (-1)<<nbBits;
-   }
-   return d;
-}
-
-EXPORT unsigned int speex_bits_unpack_unsigned(SpeexBits *bits, int nbBits)
-{
-   unsigned int d=0;
-   if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+nbBits>bits->nbBits)
-      bits->overflow=1;
-   if (bits->overflow)
-      return 0;
-   while(nbBits)
-   {
-      d<<=1;
-      d |= (bits->chars[bits->charPtr]>>(BITS_PER_CHAR-1 - bits->bitPtr))&1;
-      bits->bitPtr++;
-      if (bits->bitPtr==BITS_PER_CHAR)
-      {
-         bits->bitPtr=0;
-         bits->charPtr++;
-      }
-      nbBits--;
-   }
-   return d;
-}
-
-EXPORT unsigned int speex_bits_peek_unsigned(SpeexBits *bits, int nbBits)
-{
-   unsigned int d=0;
-   int bitPtr, charPtr;
-   char *chars;
-
-   if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+nbBits>bits->nbBits)
-     bits->overflow=1;
-   if (bits->overflow)
-      return 0;
-
-   bitPtr=bits->bitPtr;
-   charPtr=bits->charPtr;
-   chars = bits->chars;
-   while(nbBits)
-   {
-      d<<=1;
-      d |= (chars[charPtr]>>(BITS_PER_CHAR-1 - bitPtr))&1;
-      bitPtr++;
-      if (bitPtr==BITS_PER_CHAR)
-      {
-         bitPtr=0;
-         charPtr++;
-      }
-      nbBits--;
-   }
-   return d;
-}
-
-EXPORT int speex_bits_peek(SpeexBits *bits)
-{
-   if ((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+1>bits->nbBits)
-      bits->overflow=1;
-   if (bits->overflow)
-      return 0;
-   return (bits->chars[bits->charPtr]>>(BITS_PER_CHAR-1 - bits->bitPtr))&1;
-}
-
-EXPORT void speex_bits_advance(SpeexBits *bits, int n)
-{
-    if (((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr+n>bits->nbBits) || bits->overflow){
-      bits->overflow=1;
-      return;
-    }
-   bits->charPtr += (bits->bitPtr+n) >> LOG2_BITS_PER_CHAR; /* divide by BITS_PER_CHAR */
-   bits->bitPtr = (bits->bitPtr+n) & (BITS_PER_CHAR-1);       /* modulo by BITS_PER_CHAR */
-}
-
-EXPORT int speex_bits_remaining(SpeexBits *bits)
-{
-   if (bits->overflow)
-      return -1;
-   else
-      return bits->nbBits-((bits->charPtr<<LOG2_BITS_PER_CHAR)+bits->bitPtr);
-}
-
-EXPORT int speex_bits_nbytes(SpeexBits *bits)
-{
-   return ((bits->nbBits+BITS_PER_CHAR-1)>>LOG2_BITS_PER_CHAR);
-}
-
-EXPORT void speex_bits_insert_terminator(SpeexBits *bits)
-{
-   if (bits->bitPtr)
-      speex_bits_pack(bits, 0, 1);
-   while (bits->bitPtr)
-      speex_bits_pack(bits, 1, 1);
-}
diff --git a/libspeexdsp/cb_search.c b/libspeexdsp/cb_search.c
deleted file mode 100644 (file)
index 26c2329..0000000
+++ /dev/null
@@ -1,623 +0,0 @@
-/* Copyright (C) 2002-2006 Jean-Marc Valin 
-   File: cb_search.c
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "cb_search.h"
-#include "filters.h"
-#include "stack_alloc.h"
-#include "vq.h"
-#include "arch.h"
-#include "math_approx.h"
-#include "os_support.h"
-
-#ifdef _USE_SSE
-#include "cb_search_sse.h"
-#elif defined(ARM4_ASM) || defined(ARM5E_ASM)
-#include "cb_search_arm4.h"
-#elif defined(BFIN_ASM)
-#include "cb_search_bfin.h"
-#endif
-
-#ifndef DISABLE_ENCODER
-
-#ifndef OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK
-static void compute_weighted_codebook(const signed char *shape_cb, const spx_word16_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack)
-{
-   int i, j, k;
-   VARDECL(spx_word16_t *shape);
-   ALLOC(shape, subvect_size, spx_word16_t);
-   for (i=0;i<shape_cb_size;i++)
-   {
-      spx_word16_t *res;
-      
-      res = resp+i*subvect_size;
-      for (k=0;k<subvect_size;k++)
-         shape[k] = (spx_word16_t)shape_cb[i*subvect_size+k];
-      E[i]=0;
-
-      /* Compute codeword response using convolution with impulse response */
-      for(j=0;j<subvect_size;j++)
-      {
-         spx_word32_t resj=0;
-         spx_word16_t res16;
-         for (k=0;k<=j;k++)
-            resj = MAC16_16(resj,shape[k],r[j-k]);
-#ifdef FIXED_POINT
-         res16 = EXTRACT16(SHR32(resj, 13));
-#else
-         res16 = 0.03125f*resj;
-#endif
-         /* Compute codeword energy */
-         E[i]=MAC16_16(E[i],res16,res16);
-         res[j] = res16;
-         /*printf ("%d\n", (int)res[j]);*/
-      }
-   }
-
-}
-#endif
-
-#ifndef OVERRIDE_TARGET_UPDATE
-static inline void target_update(spx_word16_t *t, spx_word16_t g, spx_word16_t *r, int len)
-{
-   int n;
-   for (n=0;n<len;n++)
-      t[n] = SUB16(t[n],PSHR32(MULT16_16(g,r[n]),13));
-}
-#endif
-
-
-
-static void split_cb_search_shape_sign_N1(
-spx_word16_t target[],                 /* target vector */
-spx_coef_t ak[],                       /* LPCs for this subframe */
-spx_coef_t awk1[],                     /* Weighted LPCs for this subframe */
-spx_coef_t awk2[],                     /* Weighted LPCs for this subframe */
-const void *par,                      /* Codebook/search parameters*/
-int   p,                        /* number of LPC coeffs */
-int   nsf,                      /* number of samples in subframe */
-spx_sig_t *exc,
-spx_word16_t *r,
-SpeexBits *bits,
-char *stack,
-int   update_target
-)
-{
-   int i,j,m,q;
-   VARDECL(spx_word16_t *resp);
-#ifdef _USE_SSE
-   VARDECL(__m128 *resp2);
-   VARDECL(__m128 *E);
-#else
-   spx_word16_t *resp2;
-   VARDECL(spx_word32_t *E);
-#endif
-   VARDECL(spx_word16_t *t);
-   VARDECL(spx_sig_t *e);
-   const signed char *shape_cb;
-   int shape_cb_size, subvect_size, nb_subvect;
-   const split_cb_params *params;
-   int best_index;
-   spx_word32_t best_dist;
-   int have_sign;
-   
-   params = (const split_cb_params *) par;
-   subvect_size = params->subvect_size;
-   nb_subvect = params->nb_subvect;
-   shape_cb_size = 1<<params->shape_bits;
-   shape_cb = params->shape_cb;
-   have_sign = params->have_sign;
-   ALLOC(resp, shape_cb_size*subvect_size, spx_word16_t);
-#ifdef _USE_SSE
-   ALLOC(resp2, (shape_cb_size*subvect_size)>>2, __m128);
-   ALLOC(E, shape_cb_size>>2, __m128);
-#else
-   resp2 = resp;
-   ALLOC(E, shape_cb_size, spx_word32_t);
-#endif
-   ALLOC(t, nsf, spx_word16_t);
-   ALLOC(e, nsf, spx_sig_t);
-   
-   /* FIXME: Do we still need to copy the target? */
-   SPEEX_COPY(t, target, nsf);
-
-   compute_weighted_codebook(shape_cb, r, resp, resp2, E, shape_cb_size, subvect_size, stack);
-
-   for (i=0;i<nb_subvect;i++)
-   {
-      spx_word16_t *x=t+subvect_size*i;
-      /*Find new n-best based on previous n-best j*/
-#ifndef DISABLE_WIDEBAND
-      if (have_sign)
-         vq_nbest_sign(x, resp2, subvect_size, shape_cb_size, E, 1, &best_index, &best_dist, stack);
-      else
-#endif /* DISABLE_WIDEBAND */
-         vq_nbest(x, resp2, subvect_size, shape_cb_size, E, 1, &best_index, &best_dist, stack);
-      
-      speex_bits_pack(bits,best_index,params->shape_bits+have_sign);
-      
-      {
-         int rind;
-         spx_word16_t *res;
-         spx_word16_t sign=1;
-         rind = best_index;
-         if (rind>=shape_cb_size)
-         {
-            sign=-1;
-            rind-=shape_cb_size;
-         }
-         res = resp+rind*subvect_size;
-         if (sign>0)
-            for (m=0;m<subvect_size;m++)
-               t[subvect_size*i+m] = SUB16(t[subvect_size*i+m], res[m]);
-         else
-            for (m=0;m<subvect_size;m++)
-               t[subvect_size*i+m] = ADD16(t[subvect_size*i+m], res[m]);
-
-#ifdef FIXED_POINT
-         if (sign==1)
-         {
-            for (j=0;j<subvect_size;j++)
-               e[subvect_size*i+j]=SHL32(EXTEND32(shape_cb[rind*subvect_size+j]),SIG_SHIFT-5);
-         } else {
-            for (j=0;j<subvect_size;j++)
-               e[subvect_size*i+j]=NEG32(SHL32(EXTEND32(shape_cb[rind*subvect_size+j]),SIG_SHIFT-5));
-         }
-#else
-         for (j=0;j<subvect_size;j++)
-            e[subvect_size*i+j]=sign*0.03125*shape_cb[rind*subvect_size+j];
-#endif
-      
-      }
-            
-      for (m=0;m<subvect_size;m++)
-      {
-         spx_word16_t g;
-         int rind;
-         spx_word16_t sign=1;
-         rind = best_index;
-         if (rind>=shape_cb_size)
-         {
-            sign=-1;
-            rind-=shape_cb_size;
-         }
-         
-         q=subvect_size-m;
-#ifdef FIXED_POINT
-         g=sign*shape_cb[rind*subvect_size+m];
-#else
-         g=sign*0.03125*shape_cb[rind*subvect_size+m];
-#endif
-         target_update(t+subvect_size*(i+1), g, r+q, nsf-subvect_size*(i+1));
-      }
-   }
-
-   /* Update excitation */
-   /* FIXME: We could update the excitation directly above */
-   for (j=0;j<nsf;j++)
-      exc[j]=ADD32(exc[j],e[j]);
-   
-   /* Update target: only update target if necessary */
-   if (update_target)
-   {
-      VARDECL(spx_word16_t *r2);
-      ALLOC(r2, nsf, spx_word16_t);
-      for (j=0;j<nsf;j++)
-         r2[j] = EXTRACT16(PSHR32(e[j] ,6));
-      syn_percep_zero16(r2, ak, awk1, awk2, r2, nsf,p, stack);
-      for (j=0;j<nsf;j++)
-         target[j]=SUB16(target[j],PSHR16(r2[j],2));
-   }
-}
-
-
-
-void split_cb_search_shape_sign(
-spx_word16_t target[],                 /* target vector */
-spx_coef_t ak[],                       /* LPCs for this subframe */
-spx_coef_t awk1[],                     /* Weighted LPCs for this subframe */
-spx_coef_t awk2[],                     /* Weighted LPCs for this subframe */
-const void *par,                      /* Codebook/search parameters*/
-int   p,                        /* number of LPC coeffs */
-int   nsf,                      /* number of samples in subframe */
-spx_sig_t *exc,
-spx_word16_t *r,
-SpeexBits *bits,
-char *stack,
-int   complexity,
-int   update_target
-)
-{
-   int i,j,k,m,n,q;
-   VARDECL(spx_word16_t *resp);
-#ifdef _USE_SSE
-   VARDECL(__m128 *resp2);
-   VARDECL(__m128 *E);
-#else
-   spx_word16_t *resp2;
-   VARDECL(spx_word32_t *E);
-#endif
-   VARDECL(spx_word16_t *t);
-   VARDECL(spx_sig_t *e);
-   VARDECL(spx_word16_t *tmp);
-   VARDECL(spx_word32_t *ndist);
-   VARDECL(spx_word32_t *odist);
-   VARDECL(int *itmp);
-   VARDECL(spx_word16_t **ot2);
-   VARDECL(spx_word16_t **nt2);
-   spx_word16_t **ot, **nt;
-   VARDECL(int **nind);
-   VARDECL(int **oind);
-   VARDECL(int *ind);
-   const signed char *shape_cb;
-   int shape_cb_size, subvect_size, nb_subvect;
-   const split_cb_params *params;
-   int N=2;
-   VARDECL(int *best_index);
-   VARDECL(spx_word32_t *best_dist);
-   VARDECL(int *best_nind);
-   VARDECL(int *best_ntarget);
-   int have_sign;
-   N=complexity;
-   if (N>10)
-      N=10;
-   /* Complexity isn't as important for the codebooks as it is for the pitch */
-   N=(2*N)/3;
-   if (N<1)
-      N=1;
-   if (N==1)
-   {
-      split_cb_search_shape_sign_N1(target,ak,awk1,awk2,par,p,nsf,exc,r,bits,stack,update_target);
-      return;
-   }
-   ALLOC(ot2, N, spx_word16_t*);
-   ALLOC(nt2, N, spx_word16_t*);
-   ALLOC(oind, N, int*);
-   ALLOC(nind, N, int*);
-
-   params = (const split_cb_params *) par;
-   subvect_size = params->subvect_size;
-   nb_subvect = params->nb_subvect;
-   shape_cb_size = 1<<params->shape_bits;
-   shape_cb = params->shape_cb;
-   have_sign = params->have_sign;
-   ALLOC(resp, shape_cb_size*subvect_size, spx_word16_t);
-#ifdef _USE_SSE
-   ALLOC(resp2, (shape_cb_size*subvect_size)>>2, __m128);
-   ALLOC(E, shape_cb_size>>2, __m128);
-#else
-   resp2 = resp;
-   ALLOC(E, shape_cb_size, spx_word32_t);
-#endif
-   ALLOC(t, nsf, spx_word16_t);
-   ALLOC(e, nsf, spx_sig_t);
-   ALLOC(ind, nb_subvect, int);
-
-   ALLOC(tmp, 2*N*nsf, spx_word16_t);
-   for (i=0;i<N;i++)
-   {
-      ot2[i]=tmp+2*i*nsf;
-      nt2[i]=tmp+(2*i+1)*nsf;
-   }
-   ot=ot2;
-   nt=nt2;
-   ALLOC(best_index, N, int);
-   ALLOC(best_dist, N, spx_word32_t);
-   ALLOC(best_nind, N, int);
-   ALLOC(best_ntarget, N, int);
-   ALLOC(ndist, N, spx_word32_t);
-   ALLOC(odist, N, spx_word32_t);
-   
-   ALLOC(itmp, 2*N*nb_subvect, int);
-   for (i=0;i<N;i++)
-   {
-      nind[i]=itmp+2*i*nb_subvect;
-      oind[i]=itmp+(2*i+1)*nb_subvect;
-   }
-   
-   SPEEX_COPY(t, target, nsf);
-
-   for (j=0;j<N;j++)
-      SPEEX_COPY(&ot[j][0], t, nsf);
-
-   /* Pre-compute codewords response and energy */
-   compute_weighted_codebook(shape_cb, r, resp, resp2, E, shape_cb_size, subvect_size, stack);
-
-   for (j=0;j<N;j++)
-      odist[j]=0;
-   
-   /*For all subvectors*/
-   for (i=0;i<nb_subvect;i++)
-   {
-      /*"erase" nbest list*/
-      for (j=0;j<N;j++)
-         ndist[j]=VERY_LARGE32;
-      /* This is not strictly necessary, but it provides an additonal safety 
-         to prevent crashes in case something goes wrong in the previous
-         steps (e.g. NaNs) */
-      for (j=0;j<N;j++)
-         best_nind[j] = best_ntarget[j] = 0;
-      /*For all n-bests of previous subvector*/
-      for (j=0;j<N;j++)
-      {
-         spx_word16_t *x=ot[j]+subvect_size*i;
-         spx_word32_t tener = 0;
-         for (m=0;m<subvect_size;m++)
-            tener = MAC16_16(tener, x[m],x[m]);
-#ifdef FIXED_POINT
-         tener = SHR32(tener,1);
-#else
-         tener *= .5;
-#endif
-         /*Find new n-best based on previous n-best j*/
-#ifndef DISABLE_WIDEBAND
-         if (have_sign)
-            vq_nbest_sign(x, resp2, subvect_size, shape_cb_size, E, N, best_index, best_dist, stack);
-         else
-#endif /* DISABLE_WIDEBAND */
-            vq_nbest(x, resp2, subvect_size, shape_cb_size, E, N, best_index, best_dist, stack);
-
-         /*For all new n-bests*/
-         for (k=0;k<N;k++)
-         {
-            /* Compute total distance (including previous sub-vectors */
-            spx_word32_t err = ADD32(ADD32(odist[j],best_dist[k]),tener);
-            
-            /*update n-best list*/
-            if (err<ndist[N-1])
-            {
-               for (m=0;m<N;m++)
-               {
-                  if (err < ndist[m])
-                  {
-                     for (n=N-1;n>m;n--)
-                     {
-                        ndist[n] = ndist[n-1];
-                        best_nind[n] = best_nind[n-1];
-                        best_ntarget[n] = best_ntarget[n-1];
-                     }
-                     /* n is equal to m here, so they're interchangeable */
-                     ndist[m] = err;
-                     best_nind[n] = best_index[k];
-                     best_ntarget[n] = j;
-                     break;
-                  }
-               }
-            }
-         }
-         if (i==0)
-            break;
-      }
-      for (j=0;j<N;j++)
-      {
-         /*previous target (we don't care what happened before*/
-         for (m=(i+1)*subvect_size;m<nsf;m++)
-            nt[j][m]=ot[best_ntarget[j]][m];
-         
-         /* New code: update the rest of the target only if it's worth it */
-         for (m=0;m<subvect_size;m++)
-         {
-            spx_word16_t g;
-            int rind;
-            spx_word16_t sign=1;
-            rind = best_nind[j];
-            if (rind>=shape_cb_size)
-            {
-               sign=-1;
-               rind-=shape_cb_size;
-            }
-
-            q=subvect_size-m;
-#ifdef FIXED_POINT
-            g=sign*shape_cb[rind*subvect_size+m];
-#else
-            g=sign*0.03125*shape_cb[rind*subvect_size+m];
-#endif
-            target_update(nt[j]+subvect_size*(i+1), g, r+q, nsf-subvect_size*(i+1));
-         }
-
-         for (q=0;q<nb_subvect;q++)
-            nind[j][q]=oind[best_ntarget[j]][q];
-         nind[j][i]=best_nind[j];
-      }
-
-      /*update old-new data*/
-      /* just swap pointers instead of a long copy */
-      {
-         spx_word16_t **tmp2;
-         tmp2=ot;
-         ot=nt;
-         nt=tmp2;
-      }
-      for (j=0;j<N;j++)
-         for (m=0;m<nb_subvect;m++)
-            oind[j][m]=nind[j][m];
-      for (j=0;j<N;j++)
-         odist[j]=ndist[j];
-   }
-
-   /*save indices*/
-   for (i=0;i<nb_subvect;i++)
-   {
-      ind[i]=nind[0][i];
-      speex_bits_pack(bits,ind[i],params->shape_bits+have_sign);
-   }
-   
-   /* Put everything back together */
-   for (i=0;i<nb_subvect;i++)
-   {
-      int rind;
-      spx_word16_t sign=1;
-      rind = ind[i];
-      if (rind>=shape_cb_size)
-      {
-         sign=-1;
-         rind-=shape_cb_size;
-      }
-#ifdef FIXED_POINT
-      if (sign==1)
-      {
-         for (j=0;j<subvect_size;j++)
-            e[subvect_size*i+j]=SHL32(EXTEND32(shape_cb[rind*subvect_size+j]),SIG_SHIFT-5);
-      } else {
-         for (j=0;j<subvect_size;j++)
-            e[subvect_size*i+j]=NEG32(SHL32(EXTEND32(shape_cb[rind*subvect_size+j]),SIG_SHIFT-5));
-      }
-#else
-      for (j=0;j<subvect_size;j++)
-         e[subvect_size*i+j]=sign*0.03125*shape_cb[rind*subvect_size+j];
-#endif
-   }   
-   /* Update excitation */
-   for (j=0;j<nsf;j++)
-      exc[j]=ADD32(exc[j],e[j]);
-   
-   /* Update target: only update target if necessary */
-   if (update_target)
-   {
-      VARDECL(spx_word16_t *r2);
-      ALLOC(r2, nsf, spx_word16_t);
-      for (j=0;j<nsf;j++)
-         r2[j] = EXTRACT16(PSHR32(e[j] ,6));
-      syn_percep_zero16(r2, ak, awk1, awk2, r2, nsf,p, stack);
-      for (j=0;j<nsf;j++)
-         target[j]=SUB16(target[j],PSHR16(r2[j],2));
-   }
-}
-#endif /* DISABLE_ENCODER */
-
-#ifndef DISABLE_DECODER
-void split_cb_shape_sign_unquant(
-spx_sig_t *exc,
-const void *par,                      /* non-overlapping codebook */
-int   nsf,                      /* number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-spx_int32_t *seed
-)
-{
-   int i,j;
-   VARDECL(int *ind);
-   VARDECL(int *signs);
-   const signed char *shape_cb;
-   int shape_cb_size, subvect_size, nb_subvect;
-   const split_cb_params *params;
-   int have_sign;
-
-   params = (const split_cb_params *) par;
-   subvect_size = params->subvect_size;
-   nb_subvect = params->nb_subvect;
-   shape_cb_size = 1<<params->shape_bits;
-   shape_cb = params->shape_cb;
-   have_sign = params->have_sign;
-
-   ALLOC(ind, nb_subvect, int);
-   ALLOC(signs, nb_subvect, int);
-
-   /* Decode codewords and gains */
-   for (i=0;i<nb_subvect;i++)
-   {
-      if (have_sign)
-         signs[i] = speex_bits_unpack_unsigned(bits, 1);
-      else
-         signs[i] = 0;
-      ind[i] = speex_bits_unpack_unsigned(bits, params->shape_bits);
-   }
-   /* Compute decoded excitation */
-   for (i=0;i<nb_subvect;i++)
-   {
-      spx_word16_t s=1;
-      if (signs[i])
-         s=-1;
-#ifdef FIXED_POINT
-      if (s==1)
-      {
-         for (j=0;j<subvect_size;j++)
-            exc[subvect_size*i+j]=SHL32(EXTEND32(shape_cb[ind[i]*subvect_size+j]),SIG_SHIFT-5);
-      } else {
-         for (j=0;j<subvect_size;j++)
-            exc[subvect_size*i+j]=NEG32(SHL32(EXTEND32(shape_cb[ind[i]*subvect_size+j]),SIG_SHIFT-5));
-      }
-#else
-      for (j=0;j<subvect_size;j++)
-         exc[subvect_size*i+j]+=s*0.03125*shape_cb[ind[i]*subvect_size+j];      
-#endif
-   }
-}
-#endif /* DISABLE_DECODER */
-
-#ifndef DISABLE_ENCODER
-void noise_codebook_quant(
-spx_word16_t target[],                 /* target vector */
-spx_coef_t ak[],                       /* LPCs for this subframe */
-spx_coef_t awk1[],                     /* Weighted LPCs for this subframe */
-spx_coef_t awk2[],                     /* Weighted LPCs for this subframe */
-const void *par,                      /* Codebook/search parameters*/
-int   p,                        /* number of LPC coeffs */
-int   nsf,                      /* number of samples in subframe */
-spx_sig_t *exc,
-spx_word16_t *r,
-SpeexBits *bits,
-char *stack,
-int   complexity,
-int   update_target
-)
-{
-   int i;
-   VARDECL(spx_word16_t *tmp);
-   ALLOC(tmp, nsf, spx_word16_t);
-   residue_percep_zero16(target, ak, awk1, awk2, tmp, nsf, p, stack);
-
-   for (i=0;i<nsf;i++)
-      exc[i]+=SHL32(EXTEND32(tmp[i]),8);
-   SPEEX_MEMSET(target, 0, nsf);
-}
-#endif /* DISABLE_ENCODER */
-
-#ifndef DISABLE_DECODER
-void noise_codebook_unquant(
-spx_sig_t *exc,
-const void *par,                      /* non-overlapping codebook */
-int   nsf,                      /* number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-spx_int32_t *seed
-)
-{
-   int i;
-   /* FIXME: This is bad, but I don't think the function ever gets called anyway */
-   for (i=0;i<nsf;i++)
-      exc[i]=SHL32(EXTEND32(speex_rand(1, seed)),SIG_SHIFT);
-}
-#endif /* DISABLE_DECODER */
diff --git a/libspeexdsp/cb_search.h b/libspeexdsp/cb_search.h
deleted file mode 100644 (file)
index e4fa60b..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin & David Rowe */
-/**
-   @file cb_search.h
-   @brief Overlapped codebook search
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef CB_SEARCH_H
-#define CB_SEARCH_H
-
-#include "../include/speex/speex_bits.h"
-#include "arch.h"
-
-/** Split codebook parameters. */
-typedef struct split_cb_params {
-   int     subvect_size;
-   int     nb_subvect;
-   const signed char  *shape_cb;
-   int     shape_bits;
-   int     have_sign;
-} split_cb_params;
-
-
-void split_cb_search_shape_sign(
-spx_word16_t target[],             /* target vector */
-spx_coef_t ak[],                /* LPCs for this subframe */
-spx_coef_t awk1[],              /* Weighted LPCs for this subframe */
-spx_coef_t awk2[],              /* Weighted LPCs for this subframe */
-const void *par,                /* Codebook/search parameters */
-int   p,                        /* number of LPC coeffs */
-int   nsf,                      /* number of samples in subframe */
-spx_sig_t *exc,
-spx_word16_t *r,
-SpeexBits *bits,
-char *stack,
-int   complexity,
-int   update_target
-);
-
-void split_cb_shape_sign_unquant(
-spx_sig_t *exc,
-const void *par,                /* non-overlapping codebook */
-int   nsf,                      /* number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-spx_int32_t *seed
-);
-
-
-void noise_codebook_quant(
-spx_word16_t target[],             /* target vector */
-spx_coef_t ak[],                /* LPCs for this subframe */
-spx_coef_t awk1[],              /* Weighted LPCs for this subframe */
-spx_coef_t awk2[],              /* Weighted LPCs for this subframe */
-const void *par,                /* Codebook/search parameters */
-int   p,                        /* number of LPC coeffs */
-int   nsf,                      /* number of samples in subframe */
-spx_sig_t *exc,
-spx_word16_t *r,
-SpeexBits *bits,
-char *stack,
-int   complexity,
-int   update_target
-);
-
-
-void noise_codebook_unquant(
-spx_sig_t *exc,
-const void *par,                /* non-overlapping codebook */
-int   nsf,                      /* number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-spx_int32_t *seed
-);
-
-#endif
diff --git a/libspeexdsp/cb_search_arm4.h b/libspeexdsp/cb_search_arm4.h
deleted file mode 100644 (file)
index 19b752a..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Copyright (C) 2004 Jean-Marc Valin */
-/**
-   @file cb_search_arm4.h
-   @brief Fixed codebook functions (ARM4 version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/* This optimization is temporaly disabled until it is fixed to account for the fact 
-   that "r" is now a 16-bit array */
-#if 0
-#define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK
-static void compute_weighted_codebook(const signed char *shape_cb, const spx_word16_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack)
-{
-   int i, j, k;
-  //const signed char *shape;
-   for (i=0;i<shape_cb_size;i+=4)
-   {
-
-      //shape = shape_cb;
-      E[0]=0;
-      E[1]=0;
-      E[2]=0;
-      E[3]=0;
-
-      /* Compute codeword response using convolution with impulse response */
-      for(j=0;j<subvect_size;j++)
-      {
-#if 1
-          spx_word16_t *res;
-          res = resp+j;
-          spx_word32_t resj0,resj1,resj2,resj3;
-          spx_word32_t dead1, dead2, dead3, dead4, dead5, dead6, dead7, dead8;
-          __asm__ __volatile__ (
-                "mov %0, #0 \n\t"
-                "mov %1, #0 \n\t"
-                "mov %2, #0 \n\t"
-                "mov %3, #0 \n\t"
-                ".weighted%=: \n\t"
-                "ldrsb %8, [%6] \n\t"
-                "ldr %10, [%5], #-4 \n\t"
-                "mov %9, %6 \n\t"
-                "ldrsb %11, [%9, %7]! \n\t"
-                "mla %0, %10, %8, %0 \n\t"
-                "ldrsb %8, [%9, %7]! \n\t"
-                "mla %1, %10, %11, %1 \n\t"
-                "ldrsb %11, [%9, %7]! \n\t"
-                "mla %2, %10, %8, %2 \n\t"
-                "subs %4, %4, #1 \n\t"
-                "mla %3, %10, %11, %3 \n\t"
-                "add %6, %6, #1 \n\t"
-                "bne .weighted%= \n\t"
-            : "=r" (resj0), "=r" (resj1), "=r" (resj2), "=r" (resj3),
-          "=r" (dead1), "=r" (dead2), "=r" (dead3), "=r" (dead4),
-          "=r" (dead5), "=r" (dead6), "=r" (dead7), "=r" (dead8)
-            : "4" (j+1), "5" (r+j), "6" (shape_cb), "7" (subvect_size)
-            : "cc", "memory");
-#else
-          spx_word16_t *res;
-          res = resp+j;
-          spx_word32_t resj0=0;
-          spx_word32_t resj1=0;
-          spx_word32_t resj2=0;
-          spx_word32_t resj3=0;
-          for (k=0;k<=j;k++)
-          {
-             const signed char *shape=shape_cb+k;
-             resj0 = MAC16_16(resj0,*shape,r[j-k]);
-             shape += subvect_size;
-             resj1 = MAC16_16(resj1,*shape,r[j-k]);
-             shape += subvect_size;
-             resj2 = MAC16_16(resj2,*shape,r[j-k]);
-             shape += subvect_size;
-             resj3 = MAC16_16(resj3,*shape,r[j-k]);
-             shape += subvect_size;
-          }
-#endif
-
-#ifdef FIXED_POINT
-          resj0 = SHR(resj0, 11);
-          resj1 = SHR(resj1, 11);
-          resj2 = SHR(resj2, 11);
-          resj3 = SHR(resj3, 11);
-#else
-          resj0 *= 0.03125;
-          resj1 *= 0.03125;
-          resj2 *= 0.03125;
-          resj3 *= 0.03125;
-#endif
-
-          /* Compute codeword energy */
-          E[0]=ADD32(E[0],MULT16_16(resj0,resj0));
-          E[1]=ADD32(E[1],MULT16_16(resj1,resj1));
-          E[2]=ADD32(E[2],MULT16_16(resj2,resj2));
-          E[3]=ADD32(E[3],MULT16_16(resj3,resj3));
-          *res = resj0;
-          res += subvect_size;
-          *res = resj1;
-          res += subvect_size;
-          *res = resj2;
-          res += subvect_size;
-          *res = resj3;
-          res += subvect_size;
-      }
-      resp += subvect_size<<2;
-      shape_cb += subvect_size<<2;
-      E+=4;
-   }
-
-}
-#endif
diff --git a/libspeexdsp/cb_search_bfin.h b/libspeexdsp/cb_search_bfin.h
deleted file mode 100644 (file)
index edb1eca..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright (C) 2005 Analog Devices */
-/**
-   @author Jean-Marc Valin 
-   @file cb_search_bfin.h
-   @brief Fixed codebook functions (Blackfin version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "bfin.h"
-
-#define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK 
-void compute_weighted_codebook(const signed char *shape_cb, const spx_word16_t *r, spx_word16_t *resp, spx_word16_t *resp2, spx_word32_t *E, int shape_cb_size, int subvect_size, char *stack)
-{
-   int i;
-   for (i=0;i<shape_cb_size;i++)
-   {
-      __asm__ __volatile__ (
-         "P0 = %0;\n\t"
-         "LC0 = P0;\n\t"
-         "P1 = %1;\n\t"
-         "P2 = %2;\n\t"
-         "P3 = %3;\n\t"
-         "P0 = 1;\n\t"
-         "L0 = 0;\n\t"
-         "L1 = 0;\n\t"
-         "R2 = 0;\n\t"
-         "A1 = 0;\n\t"
-         "LOOP outter%= LC0;\n\t"
-         "LOOP_BEGIN outter%=;\n\t"
-            "A0 = 0;\n\t"
-            "P4 = P1;\n\t"
-            "I1 = P2;\n\t"
-            "R0 = B[P4++] (X) || R1.L = W[I1--];\n\t"
-            "LOOP inner%= LC1 = P0;\n\t"
-            "LOOP_BEGIN inner%=;\n\t"
-               "A0 += R0.L*R1.L (IS) || R0 = B[P4++] (X) || R1.L = W[I1--];\n\t"
-            "LOOP_END inner%=;\n\t"
-            "R0 = A0;\n\t"
-            "R0 >>>= 13;\n\t"
-            "A1 += R0.L*R0.L (IS);\n\t"
-            "W[P3++] = R0;\n\t"
-            "P0 += 1;\n\t"
-            "P2 += 2;\n\t"
-         "LOOP_END outter%=;\n\t"
-         "P4 = %4;\n\t"
-         "R1 = A1;\n\t"
-         "[P4] = R1;\n\t"
-         :
-      : "m" (subvect_size), "m" (shape_cb), "m" (r), "m" (resp), "m" (E)
-      : "A0", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "I0", "I1", "L0", 
-        "L1", "A0", "A1", "memory", "ASTAT" BFIN_HWLOOP0_REGS BFIN_HWLOOP1_REGS
-      );
-      shape_cb += subvect_size;
-      resp += subvect_size;
-      E++;
-   }
-}
-
-#define OVERRIDE_TARGET_UPDATE
-static inline void target_update(spx_word16_t *t, spx_word16_t g, spx_word16_t *r, int len)
-{
-   if (!len)
-      return;
-   __asm__ __volatile__
-         (
-         "I0 = %0;\n\t"
-         "I1 = %1;\n\t"
-         "L0 = 0;\n\t"
-         "L1 = 0;\n\t"
-         "R2 = 4096;\n\t"
-         "LOOP tupdate%= LC0 = %3;\n\t"
-         "LOOP_BEGIN tupdate%=;\n\t"
-            "R0.L = W[I0] || R1.L = W[I1++];\n\t"
-            "R1 = (A1 = R1.L*%2.L) (IS);\n\t"
-            "R1 = R1 + R2;\n\t"
-            "R1 >>>= 13;\n\t"
-            "R0.L = R0.L - R1.L;\n\t"
-            "W[I0++] = R0.L;\n\t"
-         "LOOP_END tupdate%=;\n\t"
-   :
-   : "a" (t), "a" (r), "d" (g), "a" (len)
-   : "R0", "R1", "R2", "A1", "I0", "I1", "L0", "L1", "ASTAT" BFIN_HWLOOP0_REGS
-         );
-}
diff --git a/libspeexdsp/cb_search_sse.h b/libspeexdsp/cb_search_sse.h
deleted file mode 100644 (file)
index 8b03968..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright (C) 2004 Jean-Marc Valin */
-/**
-   @file cb_search_sse.h
-   @brief Fixed codebook functions (SSE version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <xmmintrin.h>
-
-static inline void _spx_mm_getr_ps (__m128 U, float *__Z, float *__Y, float *__X, float *__W)
-{
-  union {
-    float __a[4];
-    __m128 __v;
-  } __u;
-  
-  __u.__v = U;
-
-  *__Z = __u.__a[0];
-  *__Y = __u.__a[1];
-  *__X = __u.__a[2];
-  *__W = __u.__a[3];
-
-}
-
-#define OVERRIDE_COMPUTE_WEIGHTED_CODEBOOK
-static void compute_weighted_codebook(const signed char *shape_cb, const spx_sig_t *_r, float *resp, __m128 *resp2, __m128 *E, int shape_cb_size, int subvect_size, char *stack)
-{
-   int i, j, k;
-   __m128 resj, EE;
-   VARDECL(__m128 *r);
-   VARDECL(__m128 *shape);
-   ALLOC(r, subvect_size, __m128);
-   ALLOC(shape, subvect_size, __m128);
-   for(j=0;j<subvect_size;j++)
-      r[j] = _mm_load_ps1(_r+j);
-   for (i=0;i<shape_cb_size;i+=4)
-   {
-      float *_res = resp+i*subvect_size;
-      const signed char *_shape = shape_cb+i*subvect_size;
-      EE = _mm_setzero_ps();
-      for(j=0;j<subvect_size;j++)
-      {
-         shape[j] = _mm_setr_ps(0.03125*_shape[j], 0.03125*_shape[subvect_size+j], 0.03125*_shape[2*subvect_size+j], 0.03125*_shape[3*subvect_size+j]);
-      }
-      for(j=0;j<subvect_size;j++)
-      {
-         resj = _mm_setzero_ps();
-         for (k=0;k<=j;k++)
-            resj = _mm_add_ps(resj, _mm_mul_ps(shape[k],r[j-k]));
-         _spx_mm_getr_ps(resj, _res+j, _res+subvect_size+j, _res+2*subvect_size+j, _res+3*subvect_size+j);
-         *resp2++ = resj;
-         EE = _mm_add_ps(EE, _mm_mul_ps(resj, resj));
-      }
-      E[i>>2] = EE;
-   }
-}
diff --git a/libspeexdsp/exc_10_16_table.c b/libspeexdsp/exc_10_16_table.c
deleted file mode 100644 (file)
index 98ae357..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: exc_10_16_table.c
-   Codebook for excitation in narrowband CELP mode (3200 bps)
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-const signed char exc_10_16_table[160] = {
-22,39,14,44,11,35,-2,23,-4,6,
-46,-28,13,-27,-23,12,4,20,-5,9,
-37,-18,-23,23,0,9,-6,-20,4,-1,
--17,-5,-4,17,0,1,9,-2,1,2,
-2,-12,8,-25,39,15,9,16,-55,-11,
-9,11,5,10,-2,-60,8,13,-6,11,
--16,27,-47,-12,11,1,16,-7,9,-3,
--29,9,-14,25,-19,34,36,12,40,-10,
--3,-24,-14,-37,-21,-35,-2,-36,3,-6,
-67,28,6,-17,-3,-12,-16,-15,-17,-7,
--59,-36,-13,1,7,1,2,10,2,11,
-13,10,8,-2,7,3,5,4,2,2,
--3,-8,4,-5,6,7,-42,15,35,-2,
--46,38,28,-20,-9,1,7,-3,0,-2,
-0,0,0,0,0,0,0,0,0,0,
--15,-28,52,32,5,-5,-17,-20,-10,-1};
diff --git a/libspeexdsp/exc_10_32_table.c b/libspeexdsp/exc_10_32_table.c
deleted file mode 100644 (file)
index 1ee56a2..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: exc_10_32_table.c
-   Codebook for excitation in narrowband CELP mode (4000 bps)
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-const signed char exc_10_32_table[320] = {
-7,17,17,27,25,22,12,4,-3,0,
-28,-36,39,-24,-15,3,-9,15,-5,10,
-31,-28,11,31,-21,9,-11,-11,-2,-7,
--25,14,-22,31,4,-14,19,-12,14,-5,
-4,-7,4,-5,9,0,-2,42,-47,-16,
-1,8,0,9,23,-57,0,28,-11,6,
--31,55,-45,3,-5,4,2,-2,4,-7,
--3,6,-2,7,-3,12,5,8,54,-10,
-8,-7,-8,-24,-25,-27,-14,-5,8,5,
-44,23,5,-9,-11,-11,-13,-9,-12,-8,
--29,-8,-22,6,-15,3,-12,-1,-5,-3,
-34,-1,29,-16,17,-4,12,2,1,4,
--2,-4,2,-1,11,-3,-52,28,30,-9,
--32,25,44,-20,-24,4,6,-1,0,0,
-0,0,0,0,0,0,0,0,0,0,
--25,-10,22,29,13,-13,-22,-13,-4,0,
--4,-16,10,15,-36,-24,28,25,-1,-3,
-66,-33,-11,-15,6,0,3,4,-2,5,
-24,-20,-47,29,19,-2,-4,-1,0,-1,
--2,3,1,8,-11,5,5,-57,28,28,
-0,-16,4,-4,12,-6,-1,2,-20,61,
--9,24,-22,-42,29,6,17,8,4,2,
--65,15,8,10,5,6,5,3,2,-2,
--3,5,-9,4,-5,23,13,23,-3,-63,
-3,-5,-4,-6,0,-3,23,-36,-46,9,
-5,5,8,4,9,-5,1,-3,10,1,
--6,10,-11,24,-47,31,22,-12,14,-10,
-6,11,-7,-7,7,-31,51,-12,-6,7,
-6,-17,9,-11,-20,52,-19,3,-6,-6,
--8,-5,23,-41,37,1,-21,10,-14,8,
-7,5,-15,-15,23,39,-26,-33,7,2,
--32,-30,-21,-8,4,12,17,15,14,11};
diff --git a/libspeexdsp/exc_20_32_table.c b/libspeexdsp/exc_20_32_table.c
deleted file mode 100644 (file)
index e4098b8..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: exc_20_32_table.c
-   Codebook for excitation in narrowband CELP mode (2000 bps)
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-const signed char exc_20_32_table[640] = {
-12,32,25,46,36,33,9,14,-3,6,1,-8,0,-10,-5,-7,-7,-7,-5,-5,
-31,-27,24,-32,-4,10,-11,21,-3,19,23,-9,22,24,-10,-1,-10,-13,-7,-11,
-42,-33,31,19,-8,0,-10,-16,1,-21,-17,10,-8,14,8,4,11,-2,5,-2,
--33,11,-16,33,11,-4,9,-4,11,2,6,-5,8,-5,11,-4,-6,26,-36,-16,
-0,4,-2,-8,12,6,-1,34,-46,-22,9,9,21,9,5,-66,-5,26,2,10,
-13,2,19,9,12,-81,3,13,13,0,-14,22,-35,6,-7,-4,6,-6,10,-6,
--31,38,-33,0,-10,-11,5,-12,12,-17,5,0,-6,13,-9,10,8,25,33,2,
--12,8,-6,10,-2,21,7,17,43,5,11,-7,-9,-20,-36,-20,-23,-4,-4,-3,
-27,-9,-9,-49,-39,-38,-11,-9,6,5,23,25,5,3,3,4,1,2,-3,-1,
-87,39,17,-21,-9,-19,-9,-15,-13,-14,-17,-11,-10,-11,-8,-6,-1,-3,-3,-1,
--54,-34,-27,-8,-11,-4,-5,0,0,4,8,6,9,7,9,7,6,5,5,5,
-48,10,19,-10,12,-1,9,-3,2,5,-3,2,-2,-2,0,-2,-26,6,9,-7,
--16,-9,2,7,7,-5,-43,11,22,-11,-9,34,37,-15,-13,-6,1,-1,1,1,
--64,56,52,-11,-27,5,4,3,1,2,1,3,-1,-4,-4,-10,-7,-4,-4,2,
--1,-7,-7,-12,-10,-15,-9,-5,-5,-11,-16,-13,6,16,4,-13,-16,-10,-4,2,
--47,-13,25,47,19,-14,-20,-8,-17,0,-3,-13,1,6,-17,-14,15,1,10,6,
--24,0,-10,19,-69,-8,14,49,17,-5,33,-29,3,-4,0,2,-8,5,-6,2,
-120,-56,-12,-47,23,-9,6,-5,1,2,-5,1,-10,4,-1,-1,4,-1,0,-3,
-30,-52,-67,30,22,11,-1,-4,3,0,7,2,0,1,-10,-4,-8,-13,5,1,
-1,-1,5,13,-9,-3,-10,-62,22,48,-4,-6,2,3,5,1,1,4,1,13,
-3,-20,10,-9,13,-2,-4,9,-20,44,-1,20,-32,-67,19,0,28,11,8,2,
--11,15,-19,-53,31,2,34,10,6,-4,-58,8,10,13,14,1,12,2,0,0,
--128,37,-8,44,-9,26,-3,18,2,6,11,-1,9,1,5,3,0,1,1,2,
-12,3,-2,-3,7,25,9,18,-6,-37,3,-8,-16,3,-10,-7,17,-34,-44,11,
-17,-15,-3,-16,-1,-13,11,-46,-65,-2,8,13,2,4,4,5,15,5,9,6,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
--9,19,-12,12,-28,38,29,-1,12,2,5,23,-10,3,4,-15,21,-4,3,3,
-6,17,-9,-4,-8,-20,26,5,-10,6,1,-19,18,-15,-12,47,-6,-2,-7,-9,
--1,-17,-2,-2,-14,30,-14,2,-7,-4,-1,-12,11,-25,16,-3,-12,11,-7,7,
--17,1,19,-28,31,-7,-10,7,-10,3,12,5,-16,6,24,41,-29,-54,0,1,
-7,-1,5,-6,13,10,-4,-8,8,-9,-27,-53,-38,-1,10,19,17,16,12,12,
-0,3,-7,-4,13,12,-31,-14,6,-5,3,5,17,43,50,25,10,1,-6,-2};
diff --git a/libspeexdsp/exc_5_256_table.c b/libspeexdsp/exc_5_256_table.c
deleted file mode 100644 (file)
index 4137996..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: exc_5_256_table.c
-   Codebook for excitation in narrowband CELP mode (12800 bps)
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-const signed char exc_5_256_table[1280] = {
--8,-37,5,-43,5,
-73,61,39,12,-3,
--61,-32,2,42,30,
--3,17,-27,9,34,
-20,-1,-5,2,23,
--7,-46,26,53,-47,
-20,-2,-33,-89,-51,
--64,27,11,15,-34,
--5,-56,25,-9,-1,
--29,1,40,67,-23,
--16,16,33,19,7,
-14,85,22,-10,-10,
--12,-7,-1,52,89,
-29,11,-20,-37,-46,
--15,17,-24,-28,24,
-2,1,0,23,-101,
-23,14,-1,-23,-18,
-9,5,-13,38,1,
--28,-28,4,27,51,
--26,34,-40,35,47,
-54,38,-54,-26,-6,
-42,-25,13,-30,-36,
-18,41,-4,-33,23,
--32,-7,-4,51,-3,
-17,-52,56,-47,36,
--2,-21,36,10,8,
--33,31,19,9,-5,
--40,10,-9,-21,19,
-18,-78,-18,-5,0,
--26,-36,-47,-51,-44,
-18,40,27,-2,29,
-49,-26,2,32,-54,
-30,-73,54,3,-5,
-36,22,53,10,-1,
--84,-53,-29,-5,3,
--44,53,-51,4,22,
-71,-35,-1,33,-5,
--27,-7,36,17,-23,
--39,16,-9,-55,-15,
--20,39,-35,6,-39,
--14,18,48,-64,-17,
--15,9,39,81,37,
--68,37,47,-21,-6,
--104,13,6,9,-2,
-35,8,-23,18,42,
-45,21,33,-5,-49,
-9,-6,-43,-56,39,
-2,-16,-25,87,1,
--3,-9,17,-25,-11,
--9,-1,10,2,-14,
--14,4,-1,-10,28,
--23,40,-32,26,-9,
-26,4,-27,-23,3,
-42,-60,1,49,-3,
-27,10,-52,-40,-2,
-18,45,-23,17,-44,
-3,-3,17,-46,52,
--40,-47,25,75,31,
--49,53,30,-30,-32,
--36,38,-6,-15,-16,
-54,-27,-48,3,38,
--29,-32,-22,-14,-4,
--23,-13,32,-39,9,
-8,-45,-13,34,-16,
-49,40,32,31,28,
-23,23,32,47,59,
--68,8,62,44,25,
--14,-24,-65,-16,36,
-67,-25,-38,-21,4,
--33,-2,42,5,-63,
-40,11,26,-42,-23,
--61,79,-31,23,-20,
-10,-32,53,-25,-36,
-10,-26,-5,3,0,
--71,5,-10,-37,1,
--24,21,-54,-17,1,
--29,-25,-15,-27,32,
-68,45,-16,-37,-18,
--5,1,0,-77,71,
--6,3,-20,71,-67,
-29,-35,10,-30,19,
-4,16,17,5,0,
--14,19,2,28,26,
-59,3,2,24,39,
-55,-50,-45,-18,-17,
-33,-35,14,-1,1,
-8,87,-35,-29,0,
--27,13,-7,23,-13,
-37,-40,50,-35,14,
-19,-7,-14,49,54,
--5,22,-2,-29,-8,
--27,38,13,27,48,
-12,-41,-21,-15,28,
-7,-16,-24,-19,-20,
-11,-20,9,2,13,
-23,-20,11,27,-27,
-71,-69,8,2,-6,
-22,12,16,16,9,
--16,-8,-17,1,25,
-1,40,-37,-33,66,
-94,53,4,-22,-25,
--41,-42,25,35,-16,
--15,57,31,-29,-32,
-21,16,-60,45,15,
--1,7,57,-26,-47,
--29,11,8,15,19,
--105,-8,54,27,10,
--17,6,-12,-1,-10,
-4,0,23,-10,31,
-13,11,10,12,-64,
-23,-3,-8,-19,16,
-52,24,-40,16,10,
-40,5,9,0,-13,
--7,-21,-8,-6,-7,
--21,59,16,-53,18,
--60,11,-47,14,-18,
-25,-13,-24,4,-39,
-16,-28,54,26,-67,
-30,27,-20,-52,20,
--12,55,12,18,-16,
-39,-14,-6,-26,56,
--88,-55,12,25,26,
--37,6,75,0,-34,
--81,54,-30,1,-7,
-49,-23,-14,21,10,
--62,-58,-57,-47,-34,
-15,-4,34,-78,31,
-25,-11,7,50,-10,
-42,-63,14,-36,-4,
-57,55,57,53,42,
--42,-1,15,40,37,
-15,25,-11,6,1,
-31,-2,-6,-1,-7,
--64,34,28,30,-1,
-3,21,0,-88,-12,
--56,25,-28,40,8,
--28,-14,9,12,2,
--6,-17,22,49,-6,
--26,14,28,-20,4,
--12,50,35,40,13,
--38,-58,-29,17,30,
-22,60,26,-54,-39,
--12,58,-28,-63,10,
--21,-8,-12,26,-62,
-6,-10,-11,-22,-6,
--7,4,1,18,2,
--70,11,14,4,13,
-19,-24,-34,24,67,
-17,51,-21,13,23,
-54,-30,48,1,-13,
-80,26,-16,-2,13,
--4,6,-30,29,-24,
-73,-58,30,-27,20,
--2,-21,41,45,30,
--27,-3,-5,-18,-20,
--49,-3,-35,10,42,
--19,-67,-53,-11,9,
-13,-15,-33,-51,-30,
-15,7,25,-30,4,
-28,-22,-34,54,-29,
-39,-46,20,16,34,
--4,47,75,1,-44,
--55,-24,7,-1,9,
--42,50,-8,-36,41,
-68,0,-4,-10,-23,
--15,-50,64,36,-9,
--27,12,25,-38,-47,
--37,32,-49,51,-36,
-2,-4,69,-26,19,
-7,45,67,46,13,
--63,46,15,-47,4,
--41,13,-6,5,-21,
-37,26,-55,-7,33,
--1,-28,10,-17,-64,
--14,0,-36,-17,93,
--3,-9,-66,44,-21,
-3,-12,38,-6,-13,
--12,19,13,43,-43,
--10,-12,6,-5,9,
--49,32,-5,2,4,
-5,15,-16,10,-21,
-8,-62,-8,64,8,
-79,-1,-66,-49,-18,
-5,40,-5,-30,-45,
-1,-6,21,-32,93,
--18,-30,-21,32,21,
--18,22,8,5,-41,
--54,80,22,-10,-7,
--8,-23,-64,66,56,
--14,-30,-41,-46,-14,
--29,-37,27,-14,42,
--2,-9,-29,34,14,
-33,-14,22,4,10,
-26,26,28,32,23,
--72,-32,3,0,-14,
-35,-42,-78,-32,6,
-29,-18,-45,-5,7,
--33,-45,-3,-22,-34,
-8,-8,4,-51,-25,
--9,59,-78,21,-5,
--25,-48,66,-15,-17,
--24,-49,-13,25,-23,
--64,-6,40,-24,-19,
--11,57,-33,-8,1,
-10,-52,-54,28,39,
-49,34,-11,-61,-41,
--43,10,15,-15,51,
-30,15,-51,32,-34,
--2,-34,14,18,16,
-1,1,-3,-3,1,
-1,-18,6,16,48,
-12,-5,-42,7,36,
-48,7,-20,-10,7,
-12,2,54,39,-38,
-37,54,4,-11,-8,
--46,-10,5,-10,-34,
-46,-12,29,-37,39,
-36,-11,24,56,17,
-14,20,25,0,-25,
--28,55,-7,-5,27,
-3,9,-26,-8,6,
--24,-10,-30,-31,-34,
-18,4,22,21,40,
--1,-29,-37,-8,-21,
-92,-29,11,-3,11,
-73,23,22,7,4,
--44,-9,-11,21,-13,
-11,9,-78,-1,47,
-114,-12,-37,-19,-5,
--11,-22,19,12,-30,
-7,38,45,-21,-8,
--9,55,-45,56,-21,
-7,17,46,-57,-87,
--6,27,31,31,7,
--56,-12,46,21,-5,
--12,36,3,3,-21,
-43,19,12,-7,9,
--14,0,-9,-33,-91,
-7,26,3,-11,64,
-83,-31,-46,25,2,
-9,5,2,2,-1,
-20,-17,10,-5,-27,
--8,20,8,-19,16,
--21,-13,-31,5,5,
-42,24,9,34,-20,
-28,-61,22,11,-39,
-64,-20,-1,-30,-9,
--20,24,-25,-24,-29,
-22,-60,6,-5,41,
--9,-87,14,34,15,
--57,52,69,15,-3,
--102,58,16,3,6,
-60,-75,-32,26,7,
--57,-27,-32,-24,-21,
--29,-16,62,-46,31,
-30,-27,-15,7,15};
diff --git a/libspeexdsp/exc_5_64_table.c b/libspeexdsp/exc_5_64_table.c
deleted file mode 100644 (file)
index 2c66d51..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: exc_5_64_table.c
-   Codebook for excitation in narrowband CELP mode (9600 bps)
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-const signed char exc_5_64_table[320]={
-1,5,-15,49,-66,
--48,-4,50,-44,7,
-37,16,-18,25,-26,
--26,-15,19,19,-27,
--47,28,57,5,-17,
--32,-41,68,21,-2,
-64,56,8,-16,-13,
--26,-9,-16,11,6,
--39,25,-19,22,-31,
-20,-45,55,-43,10,
--16,47,-40,40,-20,
--51,3,-17,-14,-15,
--24,53,-20,-46,46,
-27,-68,32,3,-18,
--5,9,-31,16,-9,
--10,-1,-23,48,95,
-47,25,-41,-32,-3,
-15,-25,-55,36,41,
--27,20,5,13,14,
--22,5,2,-23,18,
-46,-15,17,-18,-34,
--5,-8,27,-55,73,
-16,2,-1,-17,40,
--78,33,0,2,19,
-4,53,-16,-15,-16,
--28,-3,-13,49,8,
--7,-29,27,-13,32,
-20,32,-61,16,14,
-41,44,40,24,20,
-7,4,48,-60,-77,
-17,-6,-48,65,-15,
-32,-30,-71,-10,-3,
--6,10,-2,-7,-29,
--56,67,-30,7,-5,
-86,-6,-10,0,5,
--31,60,34,-38,-3,
-24,10,-2,30,23,
-24,-41,12,70,-43,
-15,-17,6,13,16,
--13,8,30,-15,-8,
-5,23,-34,-98,-4,
--13,13,-48,-31,70,
-12,31,25,24,-24,
-26,-7,33,-16,8,
-5,-11,-14,-8,-65,
-13,10,-2,-9,0,
--3,-68,5,35,7,
-0,-31,-1,-17,-9,
--9,16,-37,-18,-1,
-69,-48,-28,22,-21,
--11,5,49,55,23,
--86,-36,16,2,13,
-63,-51,30,-11,13,
-24,-18,-6,14,-19,
-1,41,9,-5,27,
--36,-44,-34,-37,-21,
--26,31,-39,15,43,
-5,-8,29,20,-8,
--20,-52,-28,-1,13,
-26,-34,-10,-9,27,
--8,8,27,-66,4,
-12,-22,49,10,-77,
-32,-18,3,-38,12,
--3,-1,2,2,0};
diff --git a/libspeexdsp/exc_8_128_table.c b/libspeexdsp/exc_8_128_table.c
deleted file mode 100644 (file)
index 17ee64b..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: exc_8_128_table.c
-   Codebook for excitation in narrowband CELP mode (7000 bps)
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-const signed char exc_8_128_table[1024] = {
--14,9,13,-32,2,-10,31,-10,
--8,-8,6,-4,-1,10,-64,23,
-6,20,13,6,8,-22,16,34,
-7,42,-49,-28,5,26,4,-15,
-41,34,41,32,33,24,23,14,
-8,40,34,4,-24,-41,-19,-15,
-13,-13,33,-54,24,27,-44,33,
-27,-15,-15,24,-19,14,-36,14,
--9,24,-12,-4,37,-5,16,-34,
-5,10,33,-15,-54,-16,12,25,
-12,1,2,0,3,-1,-4,-4,
-11,2,-56,54,27,-20,13,-6,
--46,-41,-33,-11,-5,7,12,14,
--14,-5,8,20,6,3,4,-8,
--5,-42,11,8,-14,25,-2,2,
-13,11,-22,39,-9,9,5,-45,
--9,7,-9,12,-7,34,-17,-102,
-7,2,-42,18,35,-9,-34,11,
--5,-2,3,22,46,-52,-25,-9,
--94,8,11,-5,-5,-5,4,-7,
--35,-7,54,5,-32,3,24,-9,
--22,8,65,37,-1,-12,-23,-6,
--9,-28,55,-33,14,-3,2,18,
--60,41,-17,8,-16,17,-11,0,
--11,29,-28,37,9,-53,33,-14,
--9,7,-25,-7,-11,26,-32,-8,
-24,-21,22,-19,19,-10,29,-14,
-0,0,0,0,0,0,0,0,
--5,-52,10,41,6,-30,-4,16,
-32,22,-27,-22,32,-3,-28,-3,
-3,-35,6,17,23,21,8,2,
-4,-45,-17,14,23,-4,-31,-11,
--3,14,1,19,-11,2,61,-8,
-9,-12,7,-10,12,-3,-24,99,
--48,23,50,-37,-5,-23,0,8,
--14,35,-64,-5,46,-25,13,-1,
--49,-19,-15,9,34,50,25,11,
--6,-9,-16,-20,-32,-33,-32,-27,
-10,-8,12,-15,56,-14,-32,33,
-3,-9,1,65,-9,-9,-10,-2,
--6,-23,9,17,3,-28,13,-32,
-4,-2,-10,4,-16,76,12,-52,
-6,13,33,-6,4,-14,-9,-3,
-1,-15,-16,28,1,-15,11,16,
-9,4,-21,-37,-40,-6,22,12,
--15,-23,-14,-17,-16,-9,-10,-9,
-13,-39,41,5,-9,16,-38,25,
-46,-47,4,49,-14,17,-2,6,
-18,5,-6,-33,-22,44,50,-2,
-1,3,-6,7,7,-3,-21,38,
--18,34,-14,-41,60,-13,6,16,
--24,35,19,-13,-36,24,3,-17,
--14,-10,36,44,-44,-29,-3,3,
--54,-8,12,55,26,4,-2,-5,
-2,-11,22,-23,2,22,1,-25,
--39,66,-49,21,-8,-2,10,-14,
--60,25,6,10,27,-25,16,5,
--2,-9,26,-13,-20,58,-2,7,
-52,-9,2,5,-4,-15,23,-1,
--38,23,8,27,-6,0,-27,-7,
-39,-10,-14,26,11,-45,-12,9,
--5,34,4,-35,10,43,-22,-11,
-56,-7,20,1,10,1,-26,9,
-94,11,-27,-14,-13,1,-11,0,
-14,-5,-6,-10,-4,-15,-8,-41,
-21,-5,1,-28,-8,22,-9,33,
--23,-4,-4,-12,39,4,-7,3,
--60,80,8,-17,2,-6,12,-5,
-1,9,15,27,31,30,27,23,
-61,47,26,10,-5,-8,-12,-13,
-5,-18,25,-15,-4,-15,-11,12,
--2,-2,-16,-2,-6,24,12,11,
--4,9,1,-9,14,-45,57,12,
-20,-35,26,11,-64,32,-10,-10,
-42,-4,-9,-16,32,24,7,10,
-52,-11,-57,29,0,8,0,-6,
-17,-17,-56,-40,7,20,18,12,
--6,16,5,7,-1,9,1,10,
-29,12,16,13,-2,23,7,9,
--3,-4,-5,18,-64,13,55,-25,
-9,-9,24,14,-25,15,-11,-40,
--30,37,1,-19,22,-5,-31,13,
--2,0,7,-4,16,-67,12,66,
--36,24,-8,18,-15,-23,19,0,
--45,-7,4,3,-13,13,35,5,
-13,33,10,27,23,0,-7,-11,
-43,-74,36,-12,2,5,-8,6,
--33,11,-16,-14,-5,-7,-3,17,
--34,27,-16,11,-9,15,33,-31,
-8,-16,7,-6,-7,63,-55,-17,
-11,-1,20,-46,34,-30,6,9,
-19,28,-9,5,-24,-8,-23,-2,
-31,-19,-16,-5,-15,-18,0,26,
-18,37,-5,-15,-2,17,5,-27,
-21,-33,44,12,-27,-9,17,11,
-25,-21,-31,-7,13,33,-8,-25,
--7,7,-10,4,-6,-9,48,-82,
--23,-8,6,11,-23,3,-3,49,
--29,25,31,4,14,16,9,-4,
--18,10,-26,3,5,-44,-9,9,
--47,-55,15,9,28,1,4,-3,
-46,6,-6,-38,-29,-31,-15,-6,
-3,0,14,-6,8,-54,-50,33,
--5,1,-14,33,-48,26,-4,-5,
--3,-5,-3,-5,-28,-22,77,55,
--1,2,10,10,-9,-14,-66,-49,
-11,-36,-6,-20,10,-10,16,12,
-4,-1,-16,45,-44,-50,31,-2,
-25,42,23,-32,-22,0,11,20,
--40,-35,-40,-36,-32,-26,-21,-13,
-52,-22,6,-24,-20,17,-5,-8,
-36,-25,-11,21,-26,6,34,-8,
-7,20,-3,5,-25,-8,18,-5,
--9,-4,1,-9,20,20,39,48,
--24,9,5,-65,22,29,4,3,
--43,-11,32,-6,9,19,-27,-10,
--47,-14,24,10,-7,-36,-7,-1,
--4,-5,-5,16,53,25,-26,-29,
--4,-12,45,-58,-34,33,-5,2,
--1,27,-48,31,-15,22,-5,4,
-7,7,-25,-3,11,-22,16,-12,
-8,-3,7,-11,45,14,-73,-19,
-56,-46,24,-20,28,-12,-2,-1,
--36,-3,-33,19,-6,7,2,-15,
-5,-31,-45,8,35,13,20,0,
--9,48,-13,-43,-3,-13,2,-5,
-72,-68,-27,2,1,-2,-7,5,
-36,33,-40,-12,-4,-5,23,19};
diff --git a/libspeexdsp/filters.c b/libspeexdsp/filters.c
deleted file mode 100644 (file)
index 79f6546..0000000
+++ /dev/null
@@ -1,836 +0,0 @@
-/* Copyright (C) 2002-2006 Jean-Marc Valin 
-   File: filters.c
-   Various analysis/synthesis filters
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "filters.h"
-#include "stack_alloc.h"
-#include "arch.h"
-#include "math_approx.h"
-#include "ltp.h"
-#include <math.h>
-
-#ifdef _USE_SSE
-#include "filters_sse.h"
-#elif defined (ARM4_ASM) || defined(ARM5E_ASM)
-#include "filters_arm4.h"
-#elif defined (BFIN_ASM)
-#include "filters_bfin.h"
-#endif
-
-
-
-void bw_lpc(spx_word16_t gamma, const spx_coef_t *lpc_in, spx_coef_t *lpc_out, int order)
-{
-   int i;
-   spx_word16_t tmp=gamma;
-   for (i=0;i<order;i++)
-   {
-      lpc_out[i] = MULT16_16_P15(tmp,lpc_in[i]);
-      tmp = MULT16_16_P15(tmp, gamma);
-   }
-}
-
-void sanitize_values32(spx_word32_t *vec, spx_word32_t min_val, spx_word32_t max_val, int len)
-{
-   int i;
-   for (i=0;i<len;i++)
-   {
-      /* It's important we do the test that way so we can catch NaNs, which are neither greater nor smaller */
-      if (!(vec[i]>=min_val && vec[i] <= max_val))
-      {
-         if (vec[i] < min_val)
-            vec[i] = min_val;
-         else if (vec[i] > max_val)
-            vec[i] = max_val;
-         else /* Has to be NaN */
-            vec[i] = 0;
-      }
-   }
-}
-
-void highpass(const spx_word16_t *x, spx_word16_t *y, int len, int filtID, spx_mem_t *mem)
-{
-   int i;
-#ifdef FIXED_POINT
-   const spx_word16_t Pcoef[5][3] = {{16384, -31313, 14991}, {16384, -31569, 15249}, {16384, -31677, 15328}, {16384, -32313, 15947}, {16384, -22446, 6537}};
-   const spx_word16_t Zcoef[5][3] = {{15672, -31344, 15672}, {15802, -31601, 15802}, {15847, -31694, 15847}, {16162, -32322, 16162}, {14418, -28836, 14418}};
-#else
-   const spx_word16_t Pcoef[5][3] = {{1.00000f, -1.91120f, 0.91498f}, {1.00000f, -1.92683f, 0.93071f}, {1.00000f, -1.93338f, 0.93553f}, {1.00000f, -1.97226f, 0.97332f}, {1.00000f, -1.37000f, 0.39900f}};
-   const spx_word16_t Zcoef[5][3] = {{0.95654f, -1.91309f, 0.95654f}, {0.96446f, -1.92879f, 0.96446f}, {0.96723f, -1.93445f, 0.96723f}, {0.98645f, -1.97277f, 0.98645f}, {0.88000f, -1.76000f, 0.88000f}};
-#endif
-   const spx_word16_t *den, *num;
-   if (filtID>4)
-      filtID=4;
-   
-   den = Pcoef[filtID]; num = Zcoef[filtID];
-   /*return;*/
-   for (i=0;i<len;i++)
-   {
-      spx_word16_t yi;
-      spx_word32_t vout = ADD32(MULT16_16(num[0], x[i]),mem[0]);
-      yi = EXTRACT16(SATURATE(PSHR32(vout,14),32767));
-      mem[0] = ADD32(MAC16_16(mem[1], num[1],x[i]), SHL32(MULT16_32_Q15(-den[1],vout),1));
-      mem[1] = ADD32(MULT16_16(num[2],x[i]), SHL32(MULT16_32_Q15(-den[2],vout),1));
-      y[i] = yi;
-   }
-}
-
-#ifdef FIXED_POINT
-
-/* FIXME: These functions are ugly and probably introduce too much error */
-void signal_mul(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len)
-{
-   int i;
-   for (i=0;i<len;i++)
-   {
-      y[i] = SHL32(MULT16_32_Q14(EXTRACT16(SHR32(x[i],7)),scale),7);
-   }
-}
-
-#ifndef DISABLE_ENCODER
-void signal_div(const spx_word16_t *x, spx_word16_t *y, spx_word32_t scale, int len)
-{
-   int i;
-   if (scale > SHL32(EXTEND32(SIG_SCALING), 8))
-   {
-      spx_word16_t scale_1;
-      scale = PSHR32(scale, SIG_SHIFT);
-      scale_1 = EXTRACT16(PDIV32_16(SHL32(EXTEND32(SIG_SCALING),7),scale));
-      for (i=0;i<len;i++)
-      {
-         y[i] = MULT16_16_P15(scale_1, x[i]);
-      }
-   } else if (scale > SHR32(EXTEND32(SIG_SCALING), 2)) {
-      spx_word16_t scale_1;
-      scale = PSHR32(scale, SIG_SHIFT-5);
-      scale_1 = DIV32_16(SHL32(EXTEND32(SIG_SCALING),3),scale);
-      for (i=0;i<len;i++)
-      {
-         y[i] = PSHR32(MULT16_16(scale_1, SHL16(x[i],2)),8);
-      }
-   } else {
-      spx_word16_t scale_1;
-      scale = PSHR32(scale, SIG_SHIFT-7);
-      if (scale < 5)
-         scale = 5;
-      scale_1 = DIV32_16(SHL32(EXTEND32(SIG_SCALING),3),scale);
-      for (i=0;i<len;i++)
-      {
-         y[i] = PSHR32(MULT16_16(scale_1, SHL16(x[i],2)),6);
-      }
-   }
-}
-#endif /* DISABLE_ENCODER */
-
-#else /* FIXED_POINT */
-
-void signal_mul(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len)
-{
-   int i;
-   for (i=0;i<len;i++)
-      y[i] = scale*x[i];
-}
-
-#ifndef DISABLE_ENCODER
-void signal_div(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len)
-{
-   int i;
-   float scale_1 = 1/scale;
-   for (i=0;i<len;i++)
-      y[i] = scale_1*x[i];
-}
-#endif /* DISABLE_ENCODER */
-
-#endif /* !FIXED_POINT */
-
-
-
-#ifdef FIXED_POINT
-
-
-
-#if !defined (DISABLE_WIDEBAND) && !defined (DISABLE_ENCODER)
-spx_word16_t compute_rms(const spx_sig_t *x, int len)
-{
-   int i;
-   spx_word32_t sum=0;
-   spx_sig_t max_val=1;
-   int sig_shift;
-
-   for (i=0;i<len;i++)
-   {
-      spx_sig_t tmp = x[i];
-      if (tmp<0)
-         tmp = -tmp;
-      if (tmp > max_val)
-         max_val = tmp;
-   }
-
-   sig_shift=0;
-   while (max_val>16383)
-   {
-      sig_shift++;
-      max_val >>= 1;
-   }
-
-   for (i=0;i<len;i+=4)
-   {
-      spx_word32_t sum2=0;
-      spx_word16_t tmp;
-      tmp = EXTRACT16(SHR32(x[i],sig_shift));
-      sum2 = MAC16_16(sum2,tmp,tmp);
-      tmp = EXTRACT16(SHR32(x[i+1],sig_shift));
-      sum2 = MAC16_16(sum2,tmp,tmp);
-      tmp = EXTRACT16(SHR32(x[i+2],sig_shift));
-      sum2 = MAC16_16(sum2,tmp,tmp);
-      tmp = EXTRACT16(SHR32(x[i+3],sig_shift));
-      sum2 = MAC16_16(sum2,tmp,tmp);
-      sum = ADD32(sum,SHR32(sum2,6));
-   }
-   
-   return EXTRACT16(PSHR32(SHL32(EXTEND32(spx_sqrt(DIV32(sum,len))),(sig_shift+3)),SIG_SHIFT));
-}
-#endif /* !defined (DISABLE_WIDEBAND) && !defined (DISABLE_ENCODER) */
-
-spx_word16_t compute_rms16(const spx_word16_t *x, int len)
-{
-   int i;
-   spx_word16_t max_val=10; 
-
-   for (i=0;i<len;i++)
-   {
-      spx_sig_t tmp = x[i];
-      if (tmp<0)
-         tmp = -tmp;
-      if (tmp > max_val)
-         max_val = tmp;
-   }
-   if (max_val>16383)
-   {
-      spx_word32_t sum=0;
-      for (i=0;i<len;i+=4)
-      {
-         spx_word32_t sum2=0;
-         sum2 = MAC16_16(sum2,SHR16(x[i],1),SHR16(x[i],1));
-         sum2 = MAC16_16(sum2,SHR16(x[i+1],1),SHR16(x[i+1],1));
-         sum2 = MAC16_16(sum2,SHR16(x[i+2],1),SHR16(x[i+2],1));
-         sum2 = MAC16_16(sum2,SHR16(x[i+3],1),SHR16(x[i+3],1));
-         sum = ADD32(sum,SHR32(sum2,6));
-      }
-      return SHL16(spx_sqrt(DIV32(sum,len)),4);
-   } else {
-      spx_word32_t sum=0;
-      int sig_shift=0;
-      if (max_val < 8192)
-         sig_shift=1;
-      if (max_val < 4096)
-         sig_shift=2;
-      if (max_val < 2048)
-         sig_shift=3;
-      for (i=0;i<len;i+=4)
-      {
-         spx_word32_t sum2=0;
-         sum2 = MAC16_16(sum2,SHL16(x[i],sig_shift),SHL16(x[i],sig_shift));
-         sum2 = MAC16_16(sum2,SHL16(x[i+1],sig_shift),SHL16(x[i+1],sig_shift));
-         sum2 = MAC16_16(sum2,SHL16(x[i+2],sig_shift),SHL16(x[i+2],sig_shift));
-         sum2 = MAC16_16(sum2,SHL16(x[i+3],sig_shift),SHL16(x[i+3],sig_shift));
-         sum = ADD32(sum,SHR32(sum2,6));
-      }
-      return SHL16(spx_sqrt(DIV32(sum,len)),3-sig_shift);   
-   }
-}
-
-#ifndef OVERRIDE_NORMALIZE16
-int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len)
-{
-   int i;
-   spx_sig_t max_val=1;
-   int sig_shift;
-   
-   for (i=0;i<len;i++)
-   {
-      spx_sig_t tmp = x[i];
-      if (tmp<0)
-         tmp = NEG32(tmp);
-      if (tmp >= max_val)
-         max_val = tmp;
-   }
-
-   sig_shift=0;
-   while (max_val>max_scale)
-   {
-      sig_shift++;
-      max_val >>= 1;
-   }
-
-   for (i=0;i<len;i++)
-      y[i] = EXTRACT16(SHR32(x[i], sig_shift));
-   
-   return sig_shift;
-}
-#endif
-
-#else
-
-spx_word16_t compute_rms(const spx_sig_t *x, int len)
-{
-   int i;
-   float sum=0;
-   for (i=0;i<len;i++)
-   {
-      sum += x[i]*x[i];
-   }
-   return sqrt(.1+sum/len);
-}
-spx_word16_t compute_rms16(const spx_word16_t *x, int len)
-{
-   return compute_rms(x, len);
-}
-#endif
-
-#ifdef MERGE_FILTERS
-const spx_word16_t zeros[10] = {0,0,0,0,0,0,0,0,0,0};
-#endif  /* MERGE_FILTERS */
-
-#if !defined(OVERRIDE_FILTER_MEM16) && !defined(DISABLE_ENCODER)
-void filter_mem16(const spx_word16_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack)
-{
-   int i,j;
-   spx_word16_t xi,yi,nyi;
-   for (i=0;i<N;i++)
-   {
-      xi= x[i];
-      yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767));
-      nyi = NEG16(yi);
-      for (j=0;j<ord-1;j++)
-      {
-         mem[j] = MAC16_16(MAC16_16(mem[j+1], num[j],xi), den[j],nyi);
-      }
-      mem[ord-1] = ADD32(MULT16_16(num[ord-1],xi), MULT16_16(den[ord-1],nyi));
-      y[i] = yi;
-   }
-}
-#endif /* !defined(OVERRIDE_FILTER_MEM16) && !defined(DISABLE_ENCODER) */
-
-#ifndef OVERRIDE_IIR_MEM16
-void iir_mem16(const spx_word16_t *x, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack)
-{
-   int i,j;
-   spx_word16_t yi,nyi;
-
-   for (i=0;i<N;i++)
-   {
-      yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767));
-      nyi = NEG16(yi);
-      for (j=0;j<ord-1;j++)
-      {
-         mem[j] = MAC16_16(mem[j+1],den[j],nyi);
-      }
-      mem[ord-1] = MULT16_16(den[ord-1],nyi);
-      y[i] = yi;
-   }
-}
-#endif
-
-#if !defined(OVERRIDE_FIR_MEM16) && !defined(DISABLE_ENCODER)
-void fir_mem16(const spx_word16_t *x, const spx_coef_t *num, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack)
-{
-   int i,j;
-   spx_word16_t xi,yi;
-
-   for (i=0;i<N;i++)
-   {
-      xi=x[i];
-      yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767));
-      for (j=0;j<ord-1;j++)
-      {
-         mem[j] = MAC16_16(mem[j+1], num[j],xi);
-      }
-      mem[ord-1] = MULT16_16(num[ord-1],xi);
-      y[i] = yi;
-   }
-}
-#endif /* !defined(OVERRIDE_FIR_MEM16) && !defined(DISABLE_ENCODER) */
-
-#ifndef DISABLE_ENCODER
-void syn_percep_zero16(const spx_word16_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack)
-{
-   int i;
-   VARDECL(spx_mem_t *mem);
-   ALLOC(mem, ord, spx_mem_t);
-   for (i=0;i<ord;i++)
-      mem[i]=0;
-   iir_mem16(xx, ak, y, N, ord, mem, stack);
-   for (i=0;i<ord;i++)
-      mem[i]=0;
-   filter_mem16(y, awk1, awk2, y, N, ord, mem, stack);
-}
-void residue_percep_zero16(const spx_word16_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack)
-{
-   int i;
-   VARDECL(spx_mem_t *mem);
-   ALLOC(mem, ord, spx_mem_t);
-   for (i=0;i<ord;i++)
-      mem[i]=0;
-   filter_mem16(xx, ak, awk1, y, N, ord, mem, stack);
-   for (i=0;i<ord;i++)
-      mem[i]=0;
-   fir_mem16(y, awk2, y, N, ord, mem, stack);
-}
-#endif /* DISABLE_ENCODER */
-
-#if !defined(OVERRIDE_COMPUTE_IMPULSE_RESPONSE) && !defined(DISABLE_ENCODER)
-void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack)
-{
-   int i,j;
-   spx_word16_t y1, ny1i, ny2i;
-   VARDECL(spx_mem_t *mem1);
-   VARDECL(spx_mem_t *mem2);
-   ALLOC(mem1, ord, spx_mem_t);
-   ALLOC(mem2, ord, spx_mem_t);
-   
-   y[0] = LPC_SCALING;
-   for (i=0;i<ord;i++)
-      y[i+1] = awk1[i];
-   i++;
-   for (;i<N;i++)
-      y[i] = VERY_SMALL;
-   for (i=0;i<ord;i++)
-      mem1[i] = mem2[i] = 0;
-   for (i=0;i<N;i++)
-   {
-      y1 = ADD16(y[i], EXTRACT16(PSHR32(mem1[0],LPC_SHIFT)));
-      ny1i = NEG16(y1);
-      y[i] = PSHR32(ADD32(SHL32(EXTEND32(y1),LPC_SHIFT+1),mem2[0]),LPC_SHIFT);
-      ny2i = NEG16(y[i]);
-      for (j=0;j<ord-1;j++)
-      {
-         mem1[j] = MAC16_16(mem1[j+1], awk2[j],ny1i);
-         mem2[j] = MAC16_16(mem2[j+1], ak[j],ny2i);
-      }
-      mem1[ord-1] = MULT16_16(awk2[ord-1],ny1i);
-      mem2[ord-1] = MULT16_16(ak[ord-1],ny2i);
-   }
-}
-#endif /* !defined(OVERRIDE_COMPUTE_IMPULSE_RESPONSE) && !defined(DISABLE_ENCODER) */
-
-#ifndef DISABLE_WIDEBAND
-/* Decomposes a signal into low-band and high-band using a QMF */
-void qmf_decomp(const spx_word16_t *xx, const spx_word16_t *aa, spx_word16_t *y1, spx_word16_t *y2, int N, int M, spx_word16_t *mem, char *stack)
-{
-   int i,j,k,M2;
-   VARDECL(spx_word16_t *a);
-   VARDECL(spx_word16_t *x);
-   spx_word16_t *x2;
-   
-   ALLOC(a, M, spx_word16_t);
-   ALLOC(x, N+M-1, spx_word16_t);
-   x2=x+M-1;
-   M2=M>>1;
-   for (i=0;i<M;i++)
-      a[M-i-1]= aa[i];
-   for (i=0;i<M-1;i++)
-      x[i]=mem[M-i-2];
-   for (i=0;i<N;i++)
-      x[i+M-1]=SHR16(xx[i],1);
-   for (i=0;i<M-1;i++)
-      mem[i]=SHR16(xx[N-i-1],1);
-   for (i=0,k=0;i<N;i+=2,k++)
-   {
-      spx_word32_t y1k=0, y2k=0;
-      for (j=0;j<M2;j++)
-      {
-         y1k=ADD32(y1k,MULT16_16(a[j],ADD16(x[i+j],x2[i-j])));
-         y2k=SUB32(y2k,MULT16_16(a[j],SUB16(x[i+j],x2[i-j])));
-         j++;
-         y1k=ADD32(y1k,MULT16_16(a[j],ADD16(x[i+j],x2[i-j])));
-         y2k=ADD32(y2k,MULT16_16(a[j],SUB16(x[i+j],x2[i-j])));
-      }
-      y1[k] = EXTRACT16(SATURATE(PSHR32(y1k,15),32767));
-      y2[k] = EXTRACT16(SATURATE(PSHR32(y2k,15),32767));
-   }
-}
-
-/* Re-synthesised a signal from the QMF low-band and high-band signals */
-void qmf_synth(const spx_word16_t *x1, const spx_word16_t *x2, const spx_word16_t *a, spx_word16_t *y, int N, int M, spx_word16_t *mem1, spx_word16_t *mem2, char *stack)
-   /* assumptions:
-      all odd x[i] are zero -- well, actually they are left out of the array now
-      N and M are multiples of 4 */
-{
-   int i, j;
-   int M2, N2;
-   VARDECL(spx_word16_t *xx1);
-   VARDECL(spx_word16_t *xx2);
-   
-   M2 = M>>1;
-   N2 = N>>1;
-   ALLOC(xx1, M2+N2, spx_word16_t);
-   ALLOC(xx2, M2+N2, spx_word16_t);
-
-   for (i = 0; i < N2; i++)
-      xx1[i] = x1[N2-1-i];
-   for (i = 0; i < M2; i++)
-      xx1[N2+i] = mem1[2*i+1];
-   for (i = 0; i < N2; i++)
-      xx2[i] = x2[N2-1-i];
-   for (i = 0; i < M2; i++)
-      xx2[N2+i] = mem2[2*i+1];
-
-   for (i = 0; i < N2; i += 2) {
-      spx_sig_t y0, y1, y2, y3;
-      spx_word16_t x10, x20;
-
-      y0 = y1 = y2 = y3 = 0;
-      x10 = xx1[N2-2-i];
-      x20 = xx2[N2-2-i];
-
-      for (j = 0; j < M2; j += 2) {
-         spx_word16_t x11, x21;
-         spx_word16_t a0, a1;
-
-         a0 = a[2*j];
-         a1 = a[2*j+1];
-         x11 = xx1[N2-1+j-i];
-         x21 = xx2[N2-1+j-i];
-
-#ifdef FIXED_POINT
-         /* We multiply twice by the same coef to avoid overflows */
-         y0 = MAC16_16(MAC16_16(y0, a0, x11), NEG16(a0), x21);
-         y1 = MAC16_16(MAC16_16(y1, a1, x11), a1, x21);
-         y2 = MAC16_16(MAC16_16(y2, a0, x10), NEG16(a0), x20);
-         y3 = MAC16_16(MAC16_16(y3, a1, x10), a1, x20);
-#else
-         y0 = ADD32(y0,MULT16_16(a0, x11-x21));
-         y1 = ADD32(y1,MULT16_16(a1, x11+x21));
-         y2 = ADD32(y2,MULT16_16(a0, x10-x20));
-         y3 = ADD32(y3,MULT16_16(a1, x10+x20));
-#endif
-         a0 = a[2*j+2];
-         a1 = a[2*j+3];
-         x10 = xx1[N2+j-i];
-         x20 = xx2[N2+j-i];
-
-#ifdef FIXED_POINT
-         /* We multiply twice by the same coef to avoid overflows */
-         y0 = MAC16_16(MAC16_16(y0, a0, x10), NEG16(a0), x20);
-         y1 = MAC16_16(MAC16_16(y1, a1, x10), a1, x20);
-         y2 = MAC16_16(MAC16_16(y2, a0, x11), NEG16(a0), x21);
-         y3 = MAC16_16(MAC16_16(y3, a1, x11), a1, x21);
-#else
-         y0 = ADD32(y0,MULT16_16(a0, x10-x20));
-         y1 = ADD32(y1,MULT16_16(a1, x10+x20));
-         y2 = ADD32(y2,MULT16_16(a0, x11-x21));
-         y3 = ADD32(y3,MULT16_16(a1, x11+x21));
-#endif
-      }
-#ifdef FIXED_POINT
-      y[2*i] = EXTRACT16(SATURATE32(PSHR32(y0,15),32767));
-      y[2*i+1] = EXTRACT16(SATURATE32(PSHR32(y1,15),32767));
-      y[2*i+2] = EXTRACT16(SATURATE32(PSHR32(y2,15),32767));
-      y[2*i+3] = EXTRACT16(SATURATE32(PSHR32(y3,15),32767));
-#else
-      /* Normalize up explicitly if we're in float */
-      y[2*i] = 2.f*y0;
-      y[2*i+1] = 2.f*y1;
-      y[2*i+2] = 2.f*y2;
-      y[2*i+3] = 2.f*y3;
-#endif
-   }
-
-   for (i = 0; i < M2; i++)
-      mem1[2*i+1] = xx1[i];
-   for (i = 0; i < M2; i++)
-      mem2[2*i+1] = xx2[i];
-}
-#endif /* DISABLE_WIDEBAND */
-
-
-#ifndef DISABLE_DECODER
-
-#ifdef FIXED_POINT
-#if 0
-const spx_word16_t shift_filt[3][7] = {{-33,    1043,   -4551,   19959,   19959,   -4551,    1043},
-                                 {-98,    1133,   -4425,   29179,    8895,   -2328,     444},
-                                 {444,   -2328,    8895,   29179,   -4425,    1133,     -98}};
-#else
-const spx_word16_t shift_filt[3][7] = {{-390,    1540,   -4993,   20123,   20123,   -4993,    1540},
-                                {-1064,    2817,   -6694,   31589,    6837,    -990,    -209},
-                                 {-209,    -990,    6837,   31589,   -6694,    2817,   -1064}};
-#endif
-#else
-#if 0
-const float shift_filt[3][7] = {{-9.9369e-04, 3.1831e-02, -1.3889e-01, 6.0910e-01, 6.0910e-01, -1.3889e-01, 3.1831e-02},
-                          {-0.0029937, 0.0345613, -0.1350474, 0.8904793, 0.2714479, -0.0710304, 0.0135403},
-                          {0.0135403, -0.0710304, 0.2714479, 0.8904793, -0.1350474, 0.0345613,  -0.0029937}};
-#else
-const float shift_filt[3][7] = {{-0.011915f, 0.046995f, -0.152373f, 0.614108f, 0.614108f, -0.152373f, 0.046995f},
-                          {-0.0324855f, 0.0859768f, -0.2042986f, 0.9640297f, 0.2086420f, -0.0302054f, -0.0063646f},
-                          {-0.0063646f, -0.0302054f, 0.2086420f, 0.9640297f, -0.2042986f, 0.0859768f, -0.0324855f}};
-#endif
-#endif
-
-static int interp_pitch(
-spx_word16_t *exc,          /*decoded excitation*/
-spx_word16_t *interp,          /*decoded excitation*/
-int pitch,               /*pitch period*/
-int len
-)
-{
-   int i,j,k;
-   spx_word32_t corr[4][7];
-   spx_word32_t maxcorr;
-   int maxi, maxj;
-   for (i=0;i<7;i++)
-   {
-      corr[0][i] = inner_prod(exc, exc-pitch-3+i, len);
-   }
-   for (i=0;i<3;i++)
-   {
-      for (j=0;j<7;j++)
-      {
-         int i1, i2;
-         spx_word32_t tmp=0;
-         i1 = 3-j;
-         if (i1<0)
-            i1 = 0;
-         i2 = 10-j;
-         if (i2>7)
-            i2 = 7;
-         for (k=i1;k<i2;k++)
-            tmp += MULT16_32_Q15(shift_filt[i][k],corr[0][j+k-3]);
-         corr[i+1][j] = tmp;
-      }
-   }
-   maxi=maxj=0;
-   maxcorr = corr[0][0];
-   for (i=0;i<4;i++)
-   {
-      for (j=0;j<7;j++)
-      {
-         if (corr[i][j] > maxcorr)
-         {
-            maxcorr = corr[i][j];
-            maxi=i;
-            maxj=j;
-         }
-      }
-   }
-   for (i=0;i<len;i++)
-   {
-      spx_word32_t tmp = 0;
-      if (maxi>0)
-      {
-         for (k=0;k<7;k++)
-         {
-            tmp += MULT16_16(exc[i-(pitch-maxj+3)+k-3],shift_filt[maxi-1][k]);
-         }
-      } else {
-         tmp = SHL32(exc[i-(pitch-maxj+3)],15);
-      }
-      interp[i] = PSHR32(tmp,15);
-   }
-   return pitch-maxj+3;
-}
-
-void multicomb(
-spx_word16_t *exc,          /*decoded excitation*/
-spx_word16_t *new_exc,      /*enhanced excitation*/
-spx_coef_t *ak,           /*LPC filter coefs*/
-int p,               /*LPC order*/
-int nsf,             /*sub-frame size*/
-int pitch,           /*pitch period*/
-int max_pitch,
-spx_word16_t  comb_gain,    /*gain of comb filter*/
-char *stack
-)
-{
-   int i; 
-   VARDECL(spx_word16_t *iexc);
-   spx_word16_t old_ener, new_ener;
-   int corr_pitch;
-   
-   spx_word16_t iexc0_mag, iexc1_mag, exc_mag;
-   spx_word32_t corr0, corr1;
-   spx_word16_t gain0, gain1;
-   spx_word16_t pgain1, pgain2;
-   spx_word16_t c1, c2;
-   spx_word16_t g1, g2;
-   spx_word16_t ngain;
-   spx_word16_t gg1, gg2;
-#ifdef FIXED_POINT
-   int scaledown=0;
-#endif
-#if 0 /* Set to 1 to enable full pitch search */
-   int nol_pitch[6];
-   spx_word16_t nol_pitch_coef[6];
-   spx_word16_t ol_pitch_coef;
-   open_loop_nbest_pitch(exc, 20, 120, nsf, 
-                         nol_pitch, nol_pitch_coef, 6, stack);
-   corr_pitch=nol_pitch[0];
-   ol_pitch_coef = nol_pitch_coef[0];
-   /*Try to remove pitch multiples*/
-   for (i=1;i<6;i++)
-   {
-#ifdef FIXED_POINT
-      if ((nol_pitch_coef[i]>MULT16_16_Q15(nol_pitch_coef[0],19661)) && 
-#else
-      if ((nol_pitch_coef[i]>.6*nol_pitch_coef[0]) && 
-#endif
-         (ABS(2*nol_pitch[i]-corr_pitch)<=2 || ABS(3*nol_pitch[i]-corr_pitch)<=3 || 
-         ABS(4*nol_pitch[i]-corr_pitch)<=4 || ABS(5*nol_pitch[i]-corr_pitch)<=5))
-      {
-         corr_pitch = nol_pitch[i];
-      }
-   }
-#else
-   corr_pitch = pitch;
-#endif
-   
-   ALLOC(iexc, 2*nsf, spx_word16_t);
-   
-   interp_pitch(exc, iexc, corr_pitch, 80);
-   if (corr_pitch>max_pitch)
-      interp_pitch(exc, iexc+nsf, 2*corr_pitch, 80);
-   else
-      interp_pitch(exc, iexc+nsf, -corr_pitch, 80);
-
-#ifdef FIXED_POINT
-   for (i=0;i<nsf;i++)
-   {
-      if (ABS16(exc[i])>16383)
-      {
-         scaledown = 1;
-         break;
-      }
-   }
-   if (scaledown)
-   {
-      for (i=0;i<nsf;i++)
-         exc[i] = SHR16(exc[i],1);
-      for (i=0;i<2*nsf;i++)
-         iexc[i] = SHR16(iexc[i],1);
-   }
-#endif
-   /*interp_pitch(exc, iexc+2*nsf, 2*corr_pitch, 80);*/
-   
-   /*printf ("%d %d %f\n", pitch, corr_pitch, max_corr*ener_1);*/
-   iexc0_mag = spx_sqrt(1000+inner_prod(iexc,iexc,nsf));
-   iexc1_mag = spx_sqrt(1000+inner_prod(iexc+nsf,iexc+nsf,nsf));
-   exc_mag = spx_sqrt(1+inner_prod(exc,exc,nsf));
-   corr0  = inner_prod(iexc,exc,nsf);
-   if (corr0<0)
-      corr0=0;
-   corr1 = inner_prod(iexc+nsf,exc,nsf);
-   if (corr1<0)
-      corr1=0;
-#ifdef FIXED_POINT
-   /* Doesn't cost much to limit the ratio and it makes the rest easier */
-   if (SHL32(EXTEND32(iexc0_mag),6) < EXTEND32(exc_mag))
-      iexc0_mag = ADD16(1,PSHR16(exc_mag,6));
-   if (SHL32(EXTEND32(iexc1_mag),6) < EXTEND32(exc_mag))
-      iexc1_mag = ADD16(1,PSHR16(exc_mag,6));
-#endif
-   if (corr0 > MULT16_16(iexc0_mag,exc_mag))
-      pgain1 = QCONST16(1., 14);
-   else
-      pgain1 = PDIV32_16(SHL32(PDIV32(corr0, exc_mag),14),iexc0_mag);
-   if (corr1 > MULT16_16(iexc1_mag,exc_mag))
-      pgain2 = QCONST16(1., 14);
-   else
-      pgain2 = PDIV32_16(SHL32(PDIV32(corr1, exc_mag),14),iexc1_mag);
-   gg1 = PDIV32_16(SHL32(EXTEND32(exc_mag),8), iexc0_mag);
-   gg2 = PDIV32_16(SHL32(EXTEND32(exc_mag),8), iexc1_mag);
-   if (comb_gain>0)
-   {
-#ifdef FIXED_POINT
-      c1 = (MULT16_16_Q15(QCONST16(.4,15),comb_gain)+QCONST16(.07,15));
-      c2 = QCONST16(.5,15)+MULT16_16_Q14(QCONST16(1.72,14),(c1-QCONST16(.07,15)));
-#else
-      c1 = .4*comb_gain+.07;
-      c2 = .5+1.72*(c1-.07);
-#endif
-   } else 
-   {
-      c1=c2=0;
-   }
-#ifdef FIXED_POINT
-   g1 = 32767 - MULT16_16_Q13(MULT16_16_Q15(c2, pgain1),pgain1);
-   g2 = 32767 - MULT16_16_Q13(MULT16_16_Q15(c2, pgain2),pgain2);
-#else
-   g1 = 1-c2*pgain1*pgain1;
-   g2 = 1-c2*pgain2*pgain2;
-#endif
-   if (g1<c1)
-      g1 = c1;
-   if (g2<c1)
-      g2 = c1;
-   g1 = (spx_word16_t)PDIV32_16(SHL32(EXTEND32(c1),14),(spx_word16_t)g1);
-   g2 = (spx_word16_t)PDIV32_16(SHL32(EXTEND32(c1),14),(spx_word16_t)g2);
-   if (corr_pitch>max_pitch)
-   {
-      gain0 = MULT16_16_Q15(QCONST16(.7,15),MULT16_16_Q14(g1,gg1));
-      gain1 = MULT16_16_Q15(QCONST16(.3,15),MULT16_16_Q14(g2,gg2));
-   } else {
-      gain0 = MULT16_16_Q15(QCONST16(.6,15),MULT16_16_Q14(g1,gg1));
-      gain1 = MULT16_16_Q15(QCONST16(.6,15),MULT16_16_Q14(g2,gg2));
-   }
-   for (i=0;i<nsf;i++)
-      new_exc[i] = ADD16(exc[i], EXTRACT16(PSHR32(ADD32(MULT16_16(gain0,iexc[i]), MULT16_16(gain1,iexc[i+nsf])),8)));
-   /* FIXME: compute_rms16 is currently not quite accurate enough (but close) */
-   new_ener = compute_rms16(new_exc, nsf);
-   old_ener = compute_rms16(exc, nsf);
-   
-   if (old_ener < 1)
-      old_ener = 1;
-   if (new_ener < 1)
-      new_ener = 1;
-   if (old_ener > new_ener)
-      old_ener = new_ener;
-   ngain = PDIV32_16(SHL32(EXTEND32(old_ener),14),new_ener);
-   
-   for (i=0;i<nsf;i++)
-      new_exc[i] = MULT16_16_Q14(ngain, new_exc[i]);
-#ifdef FIXED_POINT
-   if (scaledown)
-   {
-      for (i=0;i<nsf;i++)
-         exc[i] = SHL16(exc[i],1);
-      for (i=0;i<nsf;i++)
-         new_exc[i] = SHL16(SATURATE16(new_exc[i],16383),1);
-   }
-#endif
-}
-
-#endif /* DISABLE_DECODER */
diff --git a/libspeexdsp/filters.h b/libspeexdsp/filters.h
deleted file mode 100644 (file)
index df14851..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin */
-/**
-   @file filters.h
-   @brief Various analysis/synthesis filters
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef FILTERS_H
-#define FILTERS_H
-
-#include "arch.h"
-
-spx_word16_t compute_rms(const spx_sig_t *x, int len);
-spx_word16_t compute_rms16(const spx_word16_t *x, int len);
-void signal_mul(const spx_sig_t *x, spx_sig_t *y, spx_word32_t scale, int len);
-void signal_div(const spx_word16_t *x, spx_word16_t *y, spx_word32_t scale, int len);
-
-#ifdef FIXED_POINT
-
-int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len);
-
-#endif
-
-
-#define HIGHPASS_NARROWBAND 0
-#define HIGHPASS_WIDEBAND 2
-#define HIGHPASS_INPUT 0
-#define HIGHPASS_OUTPUT 1
-#define HIGHPASS_IRS 4
-
-void highpass(const spx_word16_t *x, spx_word16_t *y, int len, int filtID, spx_mem_t *mem);
-
-
-void qmf_decomp(const spx_word16_t *xx, const spx_word16_t *aa, spx_word16_t *, spx_word16_t *y2, int N, int M, spx_word16_t *mem, char *stack);
-void qmf_synth(const spx_word16_t *x1, const spx_word16_t *x2, const spx_word16_t *a, spx_word16_t *y, int N, int M, spx_word16_t *mem1, spx_word16_t *mem2, char *stack);
-
-void filter_mem16(const spx_word16_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack);
-
-#ifdef MERGE_FILTERS
-
-#define OVERRIDE_IIR_MEM16
-#define OVERRIDE_FIR_MEM16
-extern const spx_word16_t zeros[];
-#define iir_mem16(x, den, y, N, ord, mem, stack) filter_mem16(x, zeros, den, y,  N, ord, mem, stack)
-#define fir_mem16(x, num, y, N, ord, mem, stack) filter_mem16(x, num, zeros, y,  N, ord, mem, stack)
-
-#else /* MERGE_FILTERS */
-void iir_mem16(const spx_word16_t *x, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack);
-void fir_mem16(const spx_word16_t *x, const spx_coef_t *num, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack);
-#endif  /* MERGE_FILTERS */
-
-/* Apply bandwidth expansion on LPC coef */
-void bw_lpc(spx_word16_t , const spx_coef_t *lpc_in, spx_coef_t *lpc_out, int order);
-void sanitize_values32(spx_word32_t *vec, spx_word32_t min_val, spx_word32_t max_val, int len);
-
-
-void syn_percep_zero16(const spx_word16_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack);
-void residue_percep_zero16(const spx_word16_t *xx, const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack);
-
-void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack);
-
-void multicomb(
-spx_word16_t *exc,          /*decoded excitation*/
-spx_word16_t *new_exc,      /*enhanced excitation*/
-spx_coef_t *ak,           /*LPC filter coefs*/
-int p,               /*LPC order*/
-int nsf,             /*sub-frame size*/
-int pitch,           /*pitch period*/
-int max_pitch,   /*pitch gain (3-tap)*/
-spx_word16_t  comb_gain,    /*gain of comb filter*/
-char *stack
-);
-
-
-#define filter10(x, num, den, y, N, mem, stack) filter_mem16(x, num, den, y, N, 10, mem, stack)
-
-
-#endif
diff --git a/libspeexdsp/filters_arm4.h b/libspeexdsp/filters_arm4.h
deleted file mode 100644 (file)
index 7a74042..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/* Copyright (C) 2004 Jean-Marc Valin */
-/**
-   @file filters_arm4.h
-   @brief Various analysis/synthesis filters (ARM4 version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#define OVERRIDE_NORMALIZE16
-int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len)
-{
-   spx_sig_t max_val=1;
-   int sig_shift;
-   int dead1, dead2, dead3, dead4, dead5, dead6;
-
-   __asm__ __volatile__ (
-         "\tmov %1, #1 \n"
-         "\tmov %3, #0 \n"
-
-         ".normalize16loop1%=: \n"
-
-         "\tldr %4, [%0], #4 \n"
-         "\tcmps %4, %1 \n"
-         "\tmovgt %1, %4 \n"
-         "\tcmps %4, %3 \n"
-         "\tmovlt %3, %4 \n"
-
-         "\tsubs %2, %2, #1 \n"
-         "\tbne .normalize16loop1%=\n"
-
-         "\trsb %3, %3, #0 \n"
-         "\tcmp %1, %3 \n"
-         "\tmovlt %1, %3 \n"
-   : "=r" (dead1), "=r" (max_val), "=r" (dead3), "=r" (dead4),
-   "=r" (dead5), "=r" (dead6)
-   : "0" (x), "2" (len)
-   : "cc");
-
-   sig_shift=0;
-   while (max_val>max_scale)
-   {
-      sig_shift++;
-      max_val >>= 1;
-   }
-   
-   __asm__ __volatile__ (
-         ".normalize16loop%=: \n"
-
-         "\tldr %4, [%0], #4 \n"
-         "\tldr %5, [%0], #4 \n"
-         "\tmov %4, %4, asr %3 \n"
-         "\tstrh %4, [%1], #2 \n"
-         "\tldr %4, [%0], #4 \n"
-         "\tmov %5, %5, asr %3 \n"
-         "\tstrh %5, [%1], #2 \n"
-         "\tldr %5, [%0], #4 \n"
-         "\tmov %4, %4, asr %3 \n"
-         "\tstrh %4, [%1], #2 \n"
-         "\tsubs %2, %2, #1 \n"
-         "\tmov %5, %5, asr %3 \n"
-         "\tstrh %5, [%1], #2 \n"
-
-         "\tbgt .normalize16loop%=\n"
-   : "=r" (dead1), "=r" (dead2), "=r" (dead3), "=r" (dead4),
-   "=r" (dead5), "=r" (dead6)
-   : "0" (x), "1" (y), "2" (len>>2), "3" (sig_shift)
-   : "cc", "memory");
-   return sig_shift;
-}
-
diff --git a/libspeexdsp/filters_bfin.h b/libspeexdsp/filters_bfin.h
deleted file mode 100644 (file)
index ccd57b9..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-/* Copyright (C) 2005 Analog Devices */
-/**
-   @file filters_bfin.h
-   @brief Various analysis/synthesis filters (Blackfin version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "bfin.h"
-
-#define OVERRIDE_NORMALIZE16
-int normalize16(const spx_sig_t *x, spx_word16_t *y, spx_sig_t max_scale, int len)
-{
-   spx_sig_t max_val=1;
-   int sig_shift;
-   __asm__ 
-   (
-   "%0 = 0;\n\t"
-   "I0 = %1;\n\t"
-   "L0 = 0;\n\t"
-   "R1 = [I0++];\n\t"
-   "LOOP norm_max%= LC0 = %2;\n\t"
-   "LOOP_BEGIN norm_max%=;\n\t"
-      "R2 = ABS R1 || R1 = [I0++];\n\t"
-      "%0 = MAX(%0, R2);\n\t"
-   "LOOP_END norm_max%=;\n\t"
-   : "=&d" (max_val)
-   : "a" (x), "a" (len)
-   : "R1", "R2", "ASTAT" BFIN_HWLOOP0_REGS
-   );
-
-   sig_shift=0;
-   while (max_val>max_scale)
-   {
-      sig_shift++;
-      max_val >>= 1;
-   }
-
-   __asm__ __volatile__ 
-   (
-   "I0 = %0;\n\t"
-   "L0 = 0;\n\t"
-   "P1 = %1;\n\t"
-   "R0 = [I0++];\n\t"
-   "LOOP norm_shift%= LC0 = %3;\n\t"
-   "LOOP_BEGIN norm_shift%=;\n\t"
-      "R1 = ASHIFT R0 by %2.L || R0 = [I0++];\n\t"
-      "W[P1++] = R1;\n\t"
-   "LOOP_END norm_shift%=;\n\t"
-   "R1 = ASHIFT R0 by %2.L;\n\t"
-   "W[P1++] = R1;\n\t"
-   : : "a" (x), "a" (y), "d" (-sig_shift), "a" (len-1)
-   : "I0", "L0", "P1", "R0", "R1", "memory", "ASTAT" BFIN_HWLOOP0_REGS
-   );
-   return sig_shift;
-}
-
-
-
-#define OVERRIDE_FILTER_MEM16
-void filter_mem16(const spx_word16_t *_x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *_y, int N, int ord, spx_mem_t *mem, char *stack)
-{
-   VARDECL(spx_word32_t *xy2);
-   VARDECL(spx_word32_t *numden_a);
-   spx_word32_t *xy;
-   spx_word16_t *numden;
-   int i;
-
-   ALLOC(xy2, (N+1), spx_word32_t);
-   ALLOC(numden_a, (2*ord+2), spx_word32_t);
-   xy = xy2+1;  
-   numden = (spx_word16_t*) numden_a;
-
-   for (i=0;i<ord;i++)
-   {
-      numden[2*i] = num[i];
-      numden[2*i+1] = den[i];
-   }
-   __asm__ __volatile__
-   (
-   /* Register setup */
-   "R0 = %5;\n\t"      /*ord */
-   
-   "P0 = %3;\n\t"
-   "I0 = P0;\n\t"
-   "B0 = P0;\n\t" /* numden */
-   "L0 = 0;\n\t"
-      
-   "P2 = %0;\n\t" /* Fused xy */
-   "I2 = P2;\n\t"
-   "L2 = 0;\n\t"
-   
-   "P4 = %6;\n\t" /* mem */
-   "P0 = %1;\n\t" /* _x */
-   "P1 = %2;\n\t" /* _y */
-   
-   /* First sample */
-   "R1 = [P4++];\n\t"
-   "R1 <<= 3;\n\t" /* shift mem */
-   "R1.L = R1 (RND);\n\t"
-   "R2 = W[P0++];\n\t" /* load x[0] */
-   "R1.L = R1.L + R2.L;\n\t"
-   "W[P1++] = R1;\n\t" /* store y[0] */
-   "R2 = PACK(R1.L, R2.L);\n\t" /* pack x16 and y16 */
-   "[P2] = R2;\n\t"
-               
-   /* Samples 1 to ord-1 (using memory) */
-   "R0 += -1;\n\t"
-   "R3 = 0;\n\t"
-   "LC0 = R0;\n\t"
-   "LOOP filter_start%= LC0;\n\t"
-   "LOOP_BEGIN filter_start%=;\n\t"
-      "R3 += 1;\n\t"
-      "LC1 = R3;\n\t"
-      
-      "R1 = [P4++];\n\t"
-      "A1 = R1;\n\t"
-      "A0 = 0;\n\t"
-      "I0 = B0;\n\t"
-      "I2 = P2;\n\t"
-      "P2 += 4;\n\t"
-      "R4 = [I0++] || R5 = [I2--];\n\t"
-      "LOOP filter_start_inner%= LC1;\n\t"
-      "LOOP_BEGIN filter_start_inner%=;\n\t"
-         "A1 -= R4.H*R5.H, A0 += R4.L*R5.L (IS) || R4 = [I0++] || R5 = [I2--];\n\t"
-      "LOOP_END filter_start_inner%=;\n\t"
-      "A0 += A1;\n\t"
-      "R4 = A0;\n\t"
-      "R4 <<= 3;\n\t" /* shift mem */
-      "R4.L = R4 (RND);\n\t"
-      "R2 = W[P0++];\n\t" /* load x */
-      "R4.L = R4.L + R2.L;\n\t"
-      "W[P1++] = R4;\n\t" /* store y */
-      //"R4 <<= 2;\n\t"
-      //"R2 <<= 2;\n\t"
-      "R2 = PACK(R4.L, R2.L);\n\t" /* pack x16 and y16 */
-      "[P2] = R2;\n\t"
-
-   "LOOP_END filter_start%=;\n\t"
-
-   /* Samples ord to N*/   
-   "R0 = %5;\n\t"
-   "R0 <<= 1;\n\t"
-   "I0 = B0;\n\t" /* numden */
-   "R0 <<= 1;\n\t"   
-   "L0 = R0;\n\t"
-   
-   "R0 = %5;\n\t" /* org */
-   "R2 = %4;\n\t" /* N */
-   "R2 = R2 - R0;\n\t"
-   "R4 = [I0++];\n\t" /* numden */
-   "LC0 = R2;\n\t"
-   "P3 = R0;\n\t"
-   "R0 <<= 2;\n\t"
-   "R0 += 8;\n\t"
-   "I2 = P2;\n\t"
-   "M0 = R0;\n\t"
-   "A1 = A0 = 0;\n\t"
-   "R5 = [I2--];\n\t" /* load xy */
-   "LOOP filter_mid%= LC0;\n\t"
-   "LOOP_BEGIN filter_mid%=;\n\t"
-      "LOOP filter_mid_inner%= LC1=P3;\n\t"
-      "LOOP_BEGIN filter_mid_inner%=;\n\t"
-         "A1 -= R4.H*R5.H, A0 += R4.L*R5.L (IS) || R4 = [I0++] || R5 = [I2--];\n\t"
-      "LOOP_END filter_mid_inner%=;\n\t"
-      "R0 = (A0 += A1) || I2 += M0;\n\t"
-      "R0 = R0 << 3 || R5 = W[P0++];\n\t" /* load x */
-      "R0.L = R0 (RND);\n\t"
-      "R0.L = R0.L + R5.L;\n\t"
-      "R5 = PACK(R0.L, R5.L) || W[P1++] = R0;\n\t" /* shift y | store y */
-      "A1 = A0 = 0 || [I2--] = R5\n\t"
-      "LOOP_END filter_mid%=;\n\t"
-   "I2 += 4;\n\t"
-   "P2 = I2;\n\t"
-   /* Update memory */
-   "P4 = %6;\n\t"
-   "R0 = %5;\n\t"
-   "LC0 = R0;\n\t"
-   "P0 = B0;\n\t"
-   "A1 = A0 = 0;\n\t"
-   "LOOP mem_update%= LC0;\n\t"
-   "LOOP_BEGIN mem_update%=;\n\t"
-      "I2 = P2;\n\t"
-      "I0 = P0;\n\t"
-      "P0 += 4;\n\t"
-      "R0 = LC0;\n\t"
-      "LC1 = R0;\n\t"
-      "R5 = [I2--] || R4 = [I0++];\n\t"
-      "LOOP mem_accum%= LC1;\n\t"
-      "LOOP_BEGIN mem_accum%=;\n\t"
-         "A1 -= R4.H*R5.H, A0 += R4.L*R5.L (IS) || R4 = [I0++] || R5 = [I2--];\n\t"
-      "LOOP_END mem_accum%=;\n\t"
-      "R0 = (A0 += A1);\n\t"
-      "A1 = A0 = 0 || [P4++] = R0;\n\t"
-   "LOOP_END mem_update%=;\n\t"
-   "L0 = 0;\n\t"
-   : : "m" (xy), "m" (_x), "m" (_y), "m" (numden), "m" (N), "m" (ord), "m" (mem)
-   : "A0", "A1", "R0", "R1", "R2", "R3", "R4", "R5", "P0", "P1", "P2", "P3", "P4", "B0", "I0", "I2", "L0", "L2", "M0", "memory",
-     "ASTAT" BFIN_HWLOOP0_REGS BFIN_HWLOOP1_REGS
-   );
-
-}
-
-
-
-#define OVERRIDE_IIR_MEM16
-void iir_mem16(const spx_word16_t *_x, const spx_coef_t *den, spx_word16_t *_y, int N, int ord, spx_mem_t *mem, char *stack)
-{
-   VARDECL(spx_word16_t *y);
-   spx_word16_t *yy;
-
-   ALLOC(y, (N+2), spx_word16_t);
-   yy = y+2;
-
-   __asm__ __volatile__
-   (
-   /* Register setup */
-   "R0 = %5;\n\t"      /*ord */
-   
-   "P1 = %3;\n\t"
-   "I1 = P1;\n\t"
-   "B1 = P1;\n\t"
-   "L1 = 0;\n\t"
-   
-   "P3 = %0;\n\t"
-   "I3 = P3;\n\t"
-   "L3 = 0;\n\t"
-   
-   "P4 = %6;\n\t"
-   "P0 = %1;\n\t"
-   "P1 = %2;\n\t"
-   
-   /* First sample */
-   "R1 = [P4++];\n\t"
-   "R1 = R1 << 3 (S);\n\t"
-   "R1.L = R1 (RND);\n\t"
-   "R2 = W[P0++];\n\t"
-   "R1 = R1 + R2;\n\t"
-   "W[P1++] = R1;\n\t"
-   "W[P3] = R1;\n\t"
-
-   /* Samples 1 to ord-1 (using memory) */
-   "R0 += -1;\n\t"
-   "R3 = 0;\n\t"
-   "LC0 = R0;\n\t"
-   "LOOP filter_start%= LC0;\n\t"
-   "LOOP_BEGIN filter_start%=;\n\t"
-      "R3 += 1;\n\t"
-      "LC1 = R3;\n\t"
-      
-      "R1 = [P4++];\n\t"
-      "A1 = R1;\n\t"
-      "I1 = B1;\n\t"
-      "I3 = P3;\n\t"
-      "P3 += 2;\n\t"
-      "LOOP filter_start_inner%= LC1;\n\t"
-      "LOOP_BEGIN filter_start_inner%=;\n\t"
-         "R4.L = W[I1++];\n\t"
-         "R5.L = W[I3--];\n\t"
-         "A1 -= R4.L*R5.L (IS);\n\t"
-      "LOOP_END filter_start_inner%=;\n\t"
-   
-      "R1 = A1;\n\t"
-      "R1 <<= 3;\n\t"
-      "R1.L = R1 (RND);\n\t"
-      "R2 = W[P0++];\n\t"
-      "R1 = R1 + R2;\n\t"
-      "W[P1++] = R1;\n\t"
-      "W[P3] = R1;\n\t"
-   "LOOP_END filter_start%=;\n\t"
-
-   /* Samples ord to N*/   
-   "R0 = %5;\n\t"
-   "R0 <<= 1;\n\t"
-   "I1 = B1;\n\t"
-   "L1 = R0;\n\t"
-   
-   "R0 = %5;\n\t"
-   "R2 = %4;\n\t"
-   "R2 = R2 - R0;\n\t"
-   "R4.L = W[I1++];\n\t"
-   "LC0 = R2;\n\t"
-   "LOOP filter_mid%= LC0;\n\t"
-   "LOOP_BEGIN filter_mid%=;\n\t"
-      "LC1 = R0;\n\t"
-      "A1 = 0;\n\t"
-      "I3 = P3;\n\t"
-      "P3 += 2;\n\t"
-      "R5.L = W[I3--];\n\t"
-      "LOOP filter_mid_inner%= LC1;\n\t"
-      "LOOP_BEGIN filter_mid_inner%=;\n\t"
-         "A1 -= R4.L*R5.L (IS) || R4.L = W[I1++] || R5.L = W[I3--];\n\t"
-      "LOOP_END filter_mid_inner%=;\n\t"
-      "R1 = A1;\n\t"
-      "R1 = R1 << 3 || R2 = W[P0++];\n\t"
-      "R1.L = R1 (RND);\n\t"
-      "R1 = R1 + R2;\n\t"
-      "W[P1++] = R1;\n\t"
-      "W[P3] = R1;\n\t"
-   "LOOP_END filter_mid%=;\n\t"
-     
-   /* Update memory */
-   "P4 = %6;\n\t"
-   "R0 = %5;\n\t"
-   "LC0 = R0;\n\t"
-   "P1 = B1;\n\t"
-   "LOOP mem_update%= LC0;\n\t"
-   "LOOP_BEGIN mem_update%=;\n\t"
-      "A0 = 0;\n\t"
-      "I3 = P3;\n\t"
-      "I1 = P1;\n\t"
-      "P1 += 2;\n\t"
-      "R0 = LC0;\n\t"
-      "LC1=R0;\n\t"
-      "R5.L = W[I3--] || R4.L = W[I1++];\n\t"
-      "LOOP mem_accum%= LC1;\n\t"
-      "LOOP_BEGIN mem_accum%=;\n\t"
-         "A0 -= R4.L*R5.L (IS) || R4.L = W[I1++] || R5.L = W[I3--];\n\t"
-      "LOOP_END mem_accum%=;\n\t"
-      "R0 = A0;\n\t"
-      "[P4++] = R0;\n\t"
-   "LOOP_END mem_update%=;\n\t"
-   "L1 = 0;\n\t"
-   : : "m" (yy), "m" (_x), "m" (_y), "m" (den), "m" (N), "m" (ord), "m" (mem)
-   : "A0", "A1", "R0", "R1", "R2", "R3", "R4", "R5", "P0", "P1", "P2", "P3", "P4", "B1", "I1", "I3", "L1", "L3", "memory",
-     "ASTAT" BFIN_HWLOOP0_REGS BFIN_HWLOOP1_REGS
-   );
-
-}
-
-
-#define OVERRIDE_FIR_MEM16
-void fir_mem16(const spx_word16_t *x, const spx_coef_t *num, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack)
-{
-   int i;
-   spx_coef_t den2[12];
-   spx_coef_t *den;
-   den = (spx_coef_t*)((((int)den2)+4)&0xfffffffc);
-   for (i=0;i<10;i++)
-      den[i] = 0;
-   filter_mem16(x, num, den, y, N, ord, mem, stack);
-}
-
-
-#define OVERRIDE_COMPUTE_IMPULSE_RESPONSE
-void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack)
-{
-   int i;
-   VARDECL(spx_word16_t *ytmp);
-   ALLOC(ytmp, N, spx_word16_t);
-   spx_word16_t *ytmp2 = ytmp;
-   y[0] = LPC_SCALING;
-   for (i=0;i<ord;i++)
-      y[i+1] = awk1[i];
-   i++;
-   for (;i<N;i++)
-      y[i] = 0;
-
-   N-=1;
-   __asm__ __volatile__
-   (
-         "I0 = %0;\n\t"
-         "I1 = %1;\n\t"
-         "L0 = 0;\n\t"
-         "L1 = 0;\n\t"
-         "L2 = 0;\n\t"
-         "L3 = 0;\n\t"
-         "R0 = 1;\n\t"
-         "R0 <<= 13;\n\t"
-         "W[I0] = R0.L;\n\t"
-         "R0 <<= 1;\n\t"
-         "W[I1] = R0.L;\n\t"
-         "R0 = %5;\n\t"
-         "LC0 = R0;\n\t"
-         "R2 = 0;\n\t"
-         "LOOP samples%= LC0;\n\t"
-         "LOOP_BEGIN samples%=;\n\t"
-            "R2 += 1;\n\t"
-            "R2 = MIN(R2, %4);\n\t"
-            "I0 = %0;\n\t"
-            "I1 = %1;\n\t"
-            "I2 = %2;\n\t"
-            "I3 = %3;\n\t"
-            "%0 += 2;\n\t"
-            "%1 += 2;\n\t"
-            "A1 = A0 = 0;\n\t"
-            "R0.L = W[I0--] || R1.L = W[I2++];\n\t"
-            "LC1 = R2;\n\t"
-            "LOOP filter%= LC1;\n\t"
-            "LOOP_BEGIN filter%=;\n\t"
-               "A0 -= R0.L*R1.L (IS) || R0.L = W[I1--] || R1.L = W[I3++];\n\t"
-               "A1 -= R0.L*R1.L (IS) || R0.L = W[I0--] || R1.L = W[I2++];\n\t"
-            "LOOP_END filter%=;\n\t"
-            "R0 = A0, R1 = A1;\n\t"
-            "R3 = W[%1] (X);\n\t"
-            "R3 <<= 13;\n\t"
-            "R0 = R0 + R3;\n\t"
-            "R3 = R0 >>> 13;\n\t"
-            "W[%0] = R3.L;\n\t"
-            "R0 <<= 1;\n\t"
-            "R1 = R1 + R0;\n\t"
-            "R1 >>>= 13;\n\t"
-            "W[%1] = R1.L;\n\t"
-         "LOOP_END samples%=;\n\t"
-   : "=a" (ytmp2), "=a" (y)
-   : "a" (awk2), "a" (ak), "d" (ord), "m" (N), "0" (ytmp2), "1" (y)
-   : "A0", "A1", "R0", "R1", "R2", "R3", "I0", "I1", "I2", "I3", "L0", "L1", "L2", "L3",
-     "ASTAT" BFIN_HWLOOP0_REGS BFIN_HWLOOP1_REGS
-   );
-}
-
-
-
-#if 0 /* Equivalent C function for filter_mem2 and compute_impulse_response */
-#define min(a,b) ((a)<(b) ? (a):(b))
-
-void compute_impulse_response(const spx_coef_t *ak, const spx_coef_t *awk1, const spx_coef_t *awk2, spx_word16_t *y, int N, int ord, char *stack)
-{
-   int i,j;
-   VARDECL(spx_word16_t *ytmp);
-   ALLOC(ytmp, N, spx_word16_t);
-   
-   y[0] = LPC_SCALING;
-   for (i=0;i<ord;i++)
-      y[i+1] = awk1[i];
-   i++;
-   for (;i<N;i++)
-      y[i] = 0;
-
-   for (i=0;i<N;i++)
-   {
-      spx_word32_t yi = SHL32(EXTEND32(y[i]),LPC_SHIFT);
-      spx_word32_t yi2 = 0;
-      for (j=0;j<min(i,ord);j++)
-      {
-         yi = MAC16_16(yi, awk2[j], -ytmp[i-j-1]);
-         yi2 = MAC16_16(yi2, ak[j], -y[i-j-1]);
-      }
-      ytmp[i] = EXTRACT16(SHR32(yi,LPC_SHIFT));
-      yi2 = ADD32(yi2,SHL32(yi,1));
-      y[i] = EXTRACT16(SHR32(yi2,LPC_SHIFT));
-   }
-
-}
-
-
-void filter_mem2(const spx_sig_t *_x, const spx_coef_t *num, const spx_coef_t *den, spx_sig_t *_y, int N, int ord, spx_mem_t *mem)
-{
-   int i,j;
-   spx_word16_t xi,yi,nyi;
-   spx_word16_t x[N],y[N];
-   spx_word16_t *xx, *yy;
-   xx = x;
-   yy = y;
-   for (i=0;i<N;i++)
-   {
-      x[i] = EXTRACT16(SHR32(_x[i],SIG_SHIFT));
-   }
-   
-   for (i=0;i<ord;i++)
-   {
-      spx_word32_t yi = mem[i];
-      for (j=0;j<i;j++)
-      {
-         yi = MAC16_16(yi, num[j], x[i-j-1]);
-         yi = MAC16_16(yi, den[j], -y[i-j-1]);
-      }
-      _y[i] = ADD32(_x[i],SHL32(yi,1));
-      y[i] = EXTRACT16(SHR32(_y[i],SIG_SHIFT));
-   }
-   for (i=ord;i<N;i++)
-   {
-      spx_word32_t yi = 0;
-      for (j=0;j<ord;j++)
-      {
-         yi = MAC16_16(yi, num[j], x[i-j-1]);
-         yi = MAC16_16(yi, den[j], -y[i-j-1]);
-      }
-      _y[i] = ADD32(_x[i],SHL32(yi,1));
-      y[i] = EXTRACT16(SHR32(_y[i],SIG_SHIFT));
-   }
-
-   for (i=0;i<ord;i++)
-   {
-      spx_mem_t m = 0;
-      for (j=0;j<ord-i;j++)
-      {
-         m = MAC16_16(m, x[N-1-j], num[j+i]);
-         m = MAC16_16(m, -y[N-1-j], den[j+i]);
-      }
-      mem[i] = m;
-   }
-}
-#endif
diff --git a/libspeexdsp/filters_sse.h b/libspeexdsp/filters_sse.h
deleted file mode 100644 (file)
index 4bb333d..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin */
-/**
-   @file filters_sse.h
-   @brief Various analysis/synthesis filters (SSE version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <xmmintrin.h>
-
-void filter_mem16_10(const float *x, const float *_num, const float *_den, float *y, int N, int ord, float *_mem)
-{
-   __m128 num[3], den[3], mem[3];
-
-   int i;
-
-   /* Copy numerator, denominator and memory to aligned xmm */
-   for (i=0;i<2;i++)
-   {
-      mem[i] = _mm_loadu_ps(_mem+4*i);
-      num[i] = _mm_loadu_ps(_num+4*i);
-      den[i] = _mm_loadu_ps(_den+4*i);
-   }
-   mem[2] = _mm_setr_ps(_mem[8], _mem[9], 0, 0);
-   num[2] = _mm_setr_ps(_num[8], _num[9], 0, 0);
-   den[2] = _mm_setr_ps(_den[8], _den[9], 0, 0);
-   
-   for (i=0;i<N;i++)
-   {
-      __m128 xx;
-      __m128 yy;
-      /* Compute next filter result */
-      xx = _mm_load_ps1(x+i);
-      yy = _mm_add_ss(xx, mem[0]);
-      _mm_store_ss(y+i, yy);
-      yy = _mm_shuffle_ps(yy, yy, 0);
-      
-      /* Update memory */
-      mem[0] = _mm_move_ss(mem[0], mem[1]);
-      mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39);
-
-      mem[0] = _mm_add_ps(mem[0], _mm_mul_ps(xx, num[0]));
-      mem[0] = _mm_sub_ps(mem[0], _mm_mul_ps(yy, den[0]));
-
-      mem[1] = _mm_move_ss(mem[1], mem[2]);
-      mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39);
-
-      mem[1] = _mm_add_ps(mem[1], _mm_mul_ps(xx, num[1]));
-      mem[1] = _mm_sub_ps(mem[1], _mm_mul_ps(yy, den[1]));
-
-      mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0xfd);
-
-      mem[2] = _mm_add_ps(mem[2], _mm_mul_ps(xx, num[2]));
-      mem[2] = _mm_sub_ps(mem[2], _mm_mul_ps(yy, den[2]));
-   }
-   /* Put memory back in its place */
-   _mm_storeu_ps(_mem, mem[0]);
-   _mm_storeu_ps(_mem+4, mem[1]);
-   _mm_store_ss(_mem+8, mem[2]);
-   mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0x55);
-   _mm_store_ss(_mem+9, mem[2]);
-}
-
-void filter_mem16_8(const float *x, const float *_num, const float *_den, float *y, int N, int ord, float *_mem)
-{
-   __m128 num[2], den[2], mem[2];
-
-   int i;
-
-   /* Copy numerator, denominator and memory to aligned xmm */
-   for (i=0;i<2;i++)
-   {
-      mem[i] = _mm_loadu_ps(_mem+4*i);
-      num[i] = _mm_loadu_ps(_num+4*i);
-      den[i] = _mm_loadu_ps(_den+4*i);
-   }
-   
-   for (i=0;i<N;i++)
-   {
-      __m128 xx;
-      __m128 yy;
-      /* Compute next filter result */
-      xx = _mm_load_ps1(x+i);
-      yy = _mm_add_ss(xx, mem[0]);
-      _mm_store_ss(y+i, yy);
-      yy = _mm_shuffle_ps(yy, yy, 0);
-      
-      /* Update memory */
-      mem[0] = _mm_move_ss(mem[0], mem[1]);
-      mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39);
-
-      mem[0] = _mm_add_ps(mem[0], _mm_mul_ps(xx, num[0]));
-      mem[0] = _mm_sub_ps(mem[0], _mm_mul_ps(yy, den[0]));
-
-      mem[1] = _mm_sub_ss(mem[1], mem[1]);
-      mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39);
-
-      mem[1] = _mm_add_ps(mem[1], _mm_mul_ps(xx, num[1]));
-      mem[1] = _mm_sub_ps(mem[1], _mm_mul_ps(yy, den[1]));
-   }
-   /* Put memory back in its place */
-   _mm_storeu_ps(_mem, mem[0]);
-   _mm_storeu_ps(_mem+4, mem[1]);
-}
-
-
-#define OVERRIDE_FILTER_MEM16
-void filter_mem16(const float *x, const float *_num, const float *_den, float *y, int N, int ord, float *_mem, char *stack)
-{
-   if(ord==10)
-      filter_mem16_10(x, _num, _den, y, N, ord, _mem);
-   else if (ord==8)
-      filter_mem16_8(x, _num, _den, y, N, ord, _mem);
-}
-
-
-
-void iir_mem16_10(const float *x, const float *_den, float *y, int N, int ord, float *_mem)
-{
-   __m128 den[3], mem[3];
-
-   int i;
-
-   /* Copy numerator, denominator and memory to aligned xmm */
-   for (i=0;i<2;i++)
-   {
-      mem[i] = _mm_loadu_ps(_mem+4*i);
-      den[i] = _mm_loadu_ps(_den+4*i);
-   }
-   mem[2] = _mm_setr_ps(_mem[8], _mem[9], 0, 0);
-   den[2] = _mm_setr_ps(_den[8], _den[9], 0, 0);
-   
-   for (i=0;i<N;i++)
-   {
-      __m128 xx;
-      __m128 yy;
-      /* Compute next filter result */
-      xx = _mm_load_ps1(x+i);
-      yy = _mm_add_ss(xx, mem[0]);
-      _mm_store_ss(y+i, yy);
-      yy = _mm_shuffle_ps(yy, yy, 0);
-      
-      /* Update memory */
-      mem[0] = _mm_move_ss(mem[0], mem[1]);
-      mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39);
-
-      mem[0] = _mm_sub_ps(mem[0], _mm_mul_ps(yy, den[0]));
-
-      mem[1] = _mm_move_ss(mem[1], mem[2]);
-      mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39);
-
-      mem[1] = _mm_sub_ps(mem[1], _mm_mul_ps(yy, den[1]));
-
-      mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0xfd);
-
-      mem[2] = _mm_sub_ps(mem[2], _mm_mul_ps(yy, den[2]));
-   }
-   /* Put memory back in its place */
-   _mm_storeu_ps(_mem, mem[0]);
-   _mm_storeu_ps(_mem+4, mem[1]);
-   _mm_store_ss(_mem+8, mem[2]);
-   mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0x55);
-   _mm_store_ss(_mem+9, mem[2]);
-}
-
-
-void iir_mem16_8(const float *x, const float *_den, float *y, int N, int ord, float *_mem)
-{
-   __m128 den[2], mem[2];
-
-   int i;
-
-   /* Copy numerator, denominator and memory to aligned xmm */
-   for (i=0;i<2;i++)
-   {
-      mem[i] = _mm_loadu_ps(_mem+4*i);
-      den[i] = _mm_loadu_ps(_den+4*i);
-   }
-   
-   for (i=0;i<N;i++)
-   {
-      __m128 xx;
-      __m128 yy;
-      /* Compute next filter result */
-      xx = _mm_load_ps1(x+i);
-      yy = _mm_add_ss(xx, mem[0]);
-      _mm_store_ss(y+i, yy);
-      yy = _mm_shuffle_ps(yy, yy, 0);
-      
-      /* Update memory */
-      mem[0] = _mm_move_ss(mem[0], mem[1]);
-      mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39);
-
-      mem[0] = _mm_sub_ps(mem[0], _mm_mul_ps(yy, den[0]));
-
-      mem[1] = _mm_sub_ss(mem[1], mem[1]);
-      mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39);
-
-      mem[1] = _mm_sub_ps(mem[1], _mm_mul_ps(yy, den[1]));
-   }
-   /* Put memory back in its place */
-   _mm_storeu_ps(_mem, mem[0]);
-   _mm_storeu_ps(_mem+4, mem[1]);
-}
-
-#define OVERRIDE_IIR_MEM16
-void iir_mem16(const float *x, const float *_den, float *y, int N, int ord, float *_mem, char *stack)
-{
-   if(ord==10)
-      iir_mem16_10(x, _den, y, N, ord, _mem);
-   else if (ord==8)
-      iir_mem16_8(x, _den, y, N, ord, _mem);
-}
-
-
-void fir_mem16_10(const float *x, const float *_num, float *y, int N, int ord, float *_mem)
-{
-   __m128 num[3], mem[3];
-
-   int i;
-
-   /* Copy numerator, denominator and memory to aligned xmm */
-   for (i=0;i<2;i++)
-   {
-      mem[i] = _mm_loadu_ps(_mem+4*i);
-      num[i] = _mm_loadu_ps(_num+4*i);
-   }
-   mem[2] = _mm_setr_ps(_mem[8], _mem[9], 0, 0);
-   num[2] = _mm_setr_ps(_num[8], _num[9], 0, 0);
-   
-   for (i=0;i<N;i++)
-   {
-      __m128 xx;
-      __m128 yy;
-      /* Compute next filter result */
-      xx = _mm_load_ps1(x+i);
-      yy = _mm_add_ss(xx, mem[0]);
-      _mm_store_ss(y+i, yy);
-      yy = _mm_shuffle_ps(yy, yy, 0);
-      
-      /* Update memory */
-      mem[0] = _mm_move_ss(mem[0], mem[1]);
-      mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39);
-
-      mem[0] = _mm_add_ps(mem[0], _mm_mul_ps(xx, num[0]));
-
-      mem[1] = _mm_move_ss(mem[1], mem[2]);
-      mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39);
-
-      mem[1] = _mm_add_ps(mem[1], _mm_mul_ps(xx, num[1]));
-
-      mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0xfd);
-
-      mem[2] = _mm_add_ps(mem[2], _mm_mul_ps(xx, num[2]));
-   }
-   /* Put memory back in its place */
-   _mm_storeu_ps(_mem, mem[0]);
-   _mm_storeu_ps(_mem+4, mem[1]);
-   _mm_store_ss(_mem+8, mem[2]);
-   mem[2] = _mm_shuffle_ps(mem[2], mem[2], 0x55);
-   _mm_store_ss(_mem+9, mem[2]);
-}
-
-void fir_mem16_8(const float *x, const float *_num, float *y, int N, int ord, float *_mem)
-{
-   __m128 num[2], mem[2];
-
-   int i;
-
-   /* Copy numerator, denominator and memory to aligned xmm */
-   for (i=0;i<2;i++)
-   {
-      mem[i] = _mm_loadu_ps(_mem+4*i);
-      num[i] = _mm_loadu_ps(_num+4*i);
-   }
-   
-   for (i=0;i<N;i++)
-   {
-      __m128 xx;
-      __m128 yy;
-      /* Compute next filter result */
-      xx = _mm_load_ps1(x+i);
-      yy = _mm_add_ss(xx, mem[0]);
-      _mm_store_ss(y+i, yy);
-      yy = _mm_shuffle_ps(yy, yy, 0);
-      
-      /* Update memory */
-      mem[0] = _mm_move_ss(mem[0], mem[1]);
-      mem[0] = _mm_shuffle_ps(mem[0], mem[0], 0x39);
-
-      mem[0] = _mm_add_ps(mem[0], _mm_mul_ps(xx, num[0]));
-
-      mem[1] = _mm_sub_ss(mem[1], mem[1]);
-      mem[1] = _mm_shuffle_ps(mem[1], mem[1], 0x39);
-
-      mem[1] = _mm_add_ps(mem[1], _mm_mul_ps(xx, num[1]));
-   }
-   /* Put memory back in its place */
-   _mm_storeu_ps(_mem, mem[0]);
-   _mm_storeu_ps(_mem+4, mem[1]);
-}
-
-#define OVERRIDE_FIR_MEM16
-void fir_mem16(const float *x, const float *_num, float *y, int N, int ord, float *_mem, char *stack)
-{
-   if(ord==10)
-      fir_mem16_10(x, _num, y, N, ord, _mem);
-   else if (ord==8)
-      fir_mem16_8(x, _num, y, N, ord, _mem);
-}
diff --git a/libspeexdsp/gain_table.c b/libspeexdsp/gain_table.c
deleted file mode 100644 (file)
index 00b8244..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: gain_table.c
-   Codebook for 3-tap pitch prediction gain (128 entries)
-  
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are
-   met:
-
-   1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.  
-
-   2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-   3. The name of the author may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-   POSSIBILITY OF SUCH DAMAGE.
-*/
-
-const signed char gain_cdbk_nb[512] = {
--32, -32, -32, 0,
--28, -67, -5, 33,
--42, -6, -32, 18,
--57, -10, -54, 35,
--16, 27, -41, 42,
-19, -19, -40, 36,
--45, 24, -21, 40,
--8, -14, -18, 28,
-1, 14, -58, 53,
--18, -88, -39, 39,
--38, 21, -18, 37,
--19, 20, -43, 38,
-10, 17, -48, 54,
--52, -58, -13, 33,
--44, -1, -11, 32,
--12, -11, -34, 22,
-14, 0, -46, 46,
--37, -35, -34, 5,
--25, 44, -30, 43,
-6, -4, -63, 49,
--31, 43, -41, 43,
--23, 30, -43, 41,
--43, 26, -14, 44,
--33, 1, -13, 27,
--13, 18, -37, 37,
--46, -73, -45, 34,
--36, 24, -25, 34,
--36, -11, -20, 19,
--25, 12, -18, 33,
--36, -69, -59, 34,
--45, 6, 8, 46,
--22, -14, -24, 18,
--1, 13, -44, 44,
--39, -48, -26, 15,
--32, 31, -37, 34,
--33, 15, -46, 31,
--24, 30, -36, 37,
--41, 31, -23, 41,
--50, 22, -4, 50,
--22, 2, -21, 28,
--17, 30, -34, 40,
--7, -60, -28, 29,
--38, 42, -28, 42,
--44, -11, 21, 43,
--16, 8, -44, 34,
--39, -55, -43, 21,
--11, -35, 26, 41,
--9, 0, -34, 29,
--8, 121, -81, 113,
-7, -16, -22, 33,
--37, 33, -31, 36,
--27, -7, -36, 17,
--34, 70, -57, 65,
--37, -11, -48, 21,
--40, 17, -1, 44,
--33, 6, -6, 33,
--9, 0, -20, 34,
--21, 69, -33, 57,
--29, 33, -31, 35,
--55, 12, -1, 49,
--33, 27, -22, 35,
--50, -33, -47, 17,
--50, 54, 51, 94,
--1, -5, -44, 35,
--4, 22, -40, 45,
--39, -66, -25, 24,
--33, 1, -26, 20,
--24, -23, -25, 12,
--11, 21, -45, 44,
--25, -45, -19, 17,
--43, 105, -16, 82,
-5, -21, 1, 41,
--16, 11, -33, 30,
--13, -99, -4, 57,
--37, 33, -15, 44,
--25, 37, -63, 54,
--36, 24, -31, 31,
--53, -56, -38, 26,
--41, -4, 4, 37,
--33, 13, -30, 24,
-49, 52, -94, 114,
--5, -30, -15, 23,
-1, 38, -40, 56,
--23, 12, -36, 29,
--17, 40, -47, 51,
--37, -41, -39, 11,
--49, 34, 0, 58,
--18, -7, -4, 34,
--16, 17, -27, 35,
-30, 5, -62, 65,
-4, 48, -68, 76,
--43, 11, -11, 38,
--18, 19, -15, 41,
--23, -62, -39, 23,
--42, 10, -2, 41,
--21, -13, -13, 25,
--9, 13, -47, 42,
--23, -62, -24, 24,
--44, 60, -21, 58,
--18, -3, -52, 32,
--22, 22, -36, 34,
--75, 57, 16, 90,
--19, 3, 10, 45,
--29, 23, -38, 32,
--5, -62, -51, 38,
--51, 40, -18, 53,
--42, 13, -24, 32,
--34, 14, -20, 30,
--56, -75, -26, 37,
--26, 32, 15, 59,
--26, 17, -29, 29,
--7, 28, -52, 53,
--12, -30, 5, 30,
--5, -48, -5, 35,
-2, 2, -43, 40,
-21, 16, 16, 75,
--25, -45, -32, 10,
--43, 18, -10, 42,
-9, 0, -1, 52,
--1, 7, -30, 36,
-19, -48, -4, 48,
--28, 25, -29, 32,
--22, 0, -31, 22,
--32, 17, -10, 36,
--64, -41, -62, 36,
--52, 15, 16, 58,
--30, -22, -32, 6,
--7, 9, -38, 36};
diff --git a/libspeexdsp/gain_table_lbr.c b/libspeexdsp/gain_table_lbr.c
deleted file mode 100644 (file)
index 3c1c3db..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: gain_table_lbr.c
-   Codebook for 3-tap pitch prediction gain (32 entries)
-  
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are
-   met:
-
-   1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.  
-
-   2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-   3. The name of the author may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-   POSSIBILITY OF SUCH DAMAGE.
-*/
-
-const signed char gain_cdbk_lbr[128] = {
--32, -32, -32, 0,
--31, -58, -16, 22,
--41, -24, -43, 14,
--56, -22, -55, 29,
--13, 33, -41, 47,
--4, -39, -9, 29,
--41, 15, -12, 38,
--8, -15, -12, 31,
-1, 2, -44, 40,
--22, -66, -42, 27,
--38, 28, -23, 38,
--21, 14, -37, 31,
-0, 21, -50, 52,
--53, -71, -27, 33,
--37, -1, -19, 25,
--19, -5, -28, 22,
-6, 65, -44, 74,
--33, -48, -33, 9,
--40, 57, -14, 58,
--17, 4, -45, 32,
--31, 38, -33, 36,
--23, 28, -40, 39,
--43, 29, -12, 46,
--34, 13, -23, 28,
--16, 15, -27, 34,
--14, -82, -15, 43,
--31, 25, -32, 29,
--21, 5, -5, 38,
--47, -63, -51, 33,
--46, 12, 3, 47,
--28, -17, -29, 11,
--10, 14, -40, 38};
diff --git a/libspeexdsp/hexc_10_32_table.c b/libspeexdsp/hexc_10_32_table.c
deleted file mode 100644 (file)
index 8dd408f..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: hexc_10_32_table.c
-   Codebook for high-band excitation in SB-CELP mode (4000 bps)
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-const signed char hexc_10_32_table[320] = {
--3, -2, -1, 0, -4, 5, 35, -40, -9, 13, 
--44, 5, -27, -1, -7, 6, -11, 7, -8, 7, 
-19, -14, 15, -4, 9, -10, 10, -8, 10, -9, 
--1, 1, 0, 0, 2, 5, -18, 22, -53, 50, 
-1, -23, 50, -36, 15, 3, -13, 14, -10, 6, 
-1, 5, -3, 4, -2, 5, -32, 25, 5, -2, 
--1, -4, 1, 11, -29, 26, -6, -15, 30, -18, 
-0, 15, -17, 40, -41, 3, 9, -2, -2, 3, 
--3, -1, -5, 2, 21, -6, -16, -21, 23, 2, 
-60, 15, 16, -16, -9, 14, 9, -1, 7, -9, 
-0, 1, 1, 0, -1, -6, 17, -28, 54, -45, 
--1, 1, -1, -6, -6, 2, 11, 26, -29, -2, 
-46, -21, 34, 12, -23, 32, -23, 16, -10, 3, 
-66, 19, -20, 24, 7, 11, -3, 0, -3, -1, 
--50, -46, 2, -18, -3, 4, -1, -2, 3, -3, 
--19, 41, -36, 9, 11, -24, 21, -16, 9, -3, 
--25, -3, 10, 18, -9, -2, -5, -1, -5, 6, 
--4, -3, 2, -26, 21, -19, 35, -15, 7, -13, 
-17, -19, 39, -43, 48, -31, 16, -9, 7, -2, 
--5, 3, -4, 9, -19, 27, -55, 63, -35, 10, 
-26, -44, -2, 9, 4, 1, -6, 8, -9, 5, 
--8, -1, -3, -16, 45, -42, 5, 15, -16, 10, 
-0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
--16, 24, -55, 47, -38, 27, -19, 7, -3, 1, 
-16, 27, 20, -19, 18, 5, -7, 1, -5, 2, 
--6, 8, -22, 0, -3, -3, 8, -1, 7, -8, 
-1, -3, 5, 0, 17, -48, 58, -52, 29, -7, 
--2, 3, -10, 6, -26, 58, -31, 1, -6, 3, 
-93, -29, 39, 3, 17, 5, 6, -1, -1, -1, 
-27, 13, 10, 19, -7, -34, 12, 10, -4, 9, 
--76, 9, 8, -28, -2, -11, 2, -1, 3, 1, 
--83, 38, -39, 4, -16, -6, -2, -5, 5, -2, 
-};
diff --git a/libspeexdsp/hexc_table.c b/libspeexdsp/hexc_table.c
deleted file mode 100644 (file)
index 268408a..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: hexc_table.c
-   Codebook for high-band excitation in SB-CELP mode (8000 bps with sign)
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-const signed char hexc_table[1024] = {
--24, 21, -20, 5, -5, -7, 14, -10, 
-2, -27, 16, -20, 0, -32, 26, 19, 
-8, -11, -41, 31, 28, -27, -32, 34, 
-42, 34, -17, 22, -10, 13, -29, 18, 
--12, -26, -24, 11, 22, 5, -5, -5, 
-54, -68, -43, 57, -25, 24, 4, 4, 
-26, -8, -12, -17, 54, 30, -45, 1, 
-10, -15, 18, -41, 11, 68, -67, 37, 
--16, -24, -16, 38, -22, 6, -29, 30, 
-66, -27, 5, 7, -16, 13, 2, -12, 
--7, -3, -20, 36, 4, -28, 9, 3, 
-32, 48, 26, 39, 3, 0, 7, -21, 
--13, 5, -82, -7, 73, -20, 34, -9, 
--5, 1, -1, 10, -5, -10, -1, 9, 
-1, -9, 10, 0, -14, 11, -1, -2, 
--1, 11, 20, 96, -81, -22, -12, -9, 
--58, 9, 24, -30, 26, -35, 27, -12, 
-13, -18, 56, -59, 15, -7, 23, -15, 
--1, 6, -25, 14, -22, -20, 47, -11, 
-16, 2, 38, -23, -19, -30, -9, 40, 
--11, 5, 4, -6, 8, 26, -21, -11, 
-127, 4, 1, 6, -9, 2, -7, -2, 
--3, 7, -5, 10, -19, 7, -106, 91, 
--3, 9, -4, 21, -8, 26, -80, 8, 
-1, -2, -10, -17, -17, -27, 32, 71, 
-6, -29, 11, -23, 54, -38, 29, -22, 
-39, 87, -31, -12, -20, 3, -2, -2, 
-2, 20, 0, -1, -35, 27, 9, -6, 
--12, 3, -12, -6, 13, 1, 14, -22, 
--59, -15, -17, -25, 13, -7, 7, 3, 
-0, 1, -7, 6, -3, 61, -37, -23, 
--23, -29, 38, -31, 27, 1, -8, 2, 
--27, 23, -26, 36, -34, 5, 24, -24, 
--6, 7, 3, -59, 78, -62, 44, -16, 
-1, 6, 0, 17, 8, 45, 0, -110, 
-6, 14, -2, 32, -77, -56, 62, -3, 
-3, -13, 4, -16, 102, -15, -36, -1, 
-9, -113, 6, 23, 0, 9, 9, 5, 
--8, -1, -14, 5, -12, 121, -53, -27, 
--8, -9, 22, -13, 3, 2, -3, 1, 
--2, -71, 95, 38, -19, 15, -16, -5, 
-71, 10, 2, -32, -13, -5, 15, -1, 
--2, -14, -85, 30, 29, 6, 3, 2, 
-0, 0, 0, 0, 0, 0, 0, 0, 
-2, -65, -56, -9, 18, 18, 23, -14, 
--2, 0, 12, -29, 26, -12, 1, 2, 
--12, -64, 90, -6, 4, 1, 5, -5, 
--110, -3, -31, 22, -29, 9, 0, 8, 
--40, -5, 21, -5, -5, 13, 10, -18, 
-40, 1, 35, -20, 30, -28, 11, -6, 
-19, 7, 14, 18, -64, 9, -6, 16, 
-51, 68, 8, 16, 12, -8, 0, -9, 
-20, -22, 25, 7, -4, -13, 41, -35, 
-93, -18, -54, 11, -1, 1, -9, 4, 
--66, 66, -31, 20, -22, 25, -23, 11, 
-10, 9, 19, 15, 11, -5, -31, -10, 
--23, -28, -6, -6, -3, -4, 5, 3, 
--28, 22, -11, -42, 25, -25, -16, 41, 
-34, 47, -6, 2, 42, -19, -22, 5, 
--39, 32, 6, -35, 22, 17, -30, 8, 
--26, -11, -11, 3, -12, 33, 33, -37, 
-21, -1, 6, -4, 3, 0, -5, 5, 
-12, -12, 57, 27, -61, -3, 20, -17, 
-2, 0, 4, 0, -2, -33, -58, 81, 
--23, 39, -10, -5, 2, 6, -7, 5, 
-4, -3, -2, -13, -23, -72, 107, 15, 
--5, 0, -7, -3, -6, 5, -4, 15, 
-47, 12, -31, 25, -16, 8, 22, -25, 
--62, -56, -18, 14, 28, 12, 2, -11, 
-74, -66, 41, -20, -7, 16, -20, 16, 
--8, 0, -16, 4, -19, 92, 12, -59, 
--14, -39, 49, -25, -16, 23, -27, 19, 
--3, -33, 19, 85, -29, 6, -7, -10, 
-16, -7, -12, 1, -6, 2, 4, -2, 
-64, 10, -25, 41, -2, -31, 15, 0, 
-110, 50, 69, 35, 28, 19, -10, 2, 
--43, -49, -56, -15, -16, 10, 3, 12, 
--1, -8, 1, 26, -12, -1, 7, -11, 
--27, 41, 25, 1, -11, -18, 22, -7, 
--1, -47, -8, 23, -3, -17, -7, 18, 
--125, 59, -5, 3, 18, 1, 2, 3, 
-27, -35, 65, -53, 50, -46, 37, -21, 
--28, 7, 14, -37, -5, -5, 12, 5, 
--8, 78, -19, 21, -6, -16, 8, -7, 
-5, 2, 7, 2, 10, -6, 12, -60, 
-44, 11, -36, -32, 31, 0, 2, -2, 
-2, 1, -3, 7, -10, 17, -21, 10, 
-6, -2, 19, -2, 59, -38, -86, 38, 
-8, -41, -30, -45, -33, 7, 15, 28, 
-29, -7, 24, -40, 7, 7, 5, -2, 
-9, 24, -23, -18, 6, -29, 30, 2, 
-28, 49, -11, -46, 10, 43, -13, -9, 
--1, -3, -7, -7, -17, -6, 97, -33, 
--21, 3, 5, 1, 12, -43, -8, 28, 
-7, -43, -7, 17, -20, 19, -1, 2, 
--13, 9, 54, 34, 9, -28, -11, -9, 
--17, 110, -59, 44, -26, 0, 3, -12, 
--47, 73, -34, -43, 38, -33, 16, -5, 
--46, -4, -6, -2, -25, 19, -29, 28, 
--13, 5, 14, 27, -40, -43, 4, 32, 
--13, -2, -35, -4, 112, -42, 9, -12, 
-37, -28, 17, 14, -19, 35, -39, 23, 
-3, -14, -1, -57, -5, 94, -9, 3, 
--39, 5, 30, -10, -32, 42, -13, -14, 
--97, -63, 30, -9, 1, -7, 12, 5, 
-20, 17, -9, -36, -30, 25, 47, -9, 
--15, 12, -22, 98, -8, -50, 15, -27, 
-21, -16, -11, 2, 12, -10, 10, -3, 
-33, 36, -96, 0, -17, 31, -9, 9, 
-3, -20, 13, -11, 8, -4, 10, -10, 
-9, 1, 112, -70, -27, 5, -21, 2, 
--57, -3, -29, 10, 19, -21, 21, -10, 
--66, -3, 91, -35, 30, -12, 0, -7, 
-59, -28, 26, 2, 14, -18, 1, 1, 
-11, 17, 20, -54, -59, 27, 4, 29, 
-32, 5, 19, 12, -4, 1, 7, -10, 
-5, -2, 10, 0, 23, -5, 28, -104, 
-46, 11, 16, 3, 29, 1, -8, -14, 
-1, 7, -50, 88, -62, 26, 8, -17, 
--14, 50, 0, 32, -12, -3, -27, 18, 
--8, -5, 8, 3, -20, -11, 37, -12, 
-9, 33, 46, -101, -1, -4, 1, 6, 
--1, 28, -42, -15, 16, 5, -1, -2, 
--55, 85, 38, -9, -4, 11, -2, -9, 
--6, 3, -20, -10, -77, 89, 24, -3, 
--104, -57, -26, -31, -20, -6, -9, 14, 
-20, -23, 46, -15, -31, 28, 1, -15, 
--2, 6, -2, 31, 45, -76, 23, -25, 
-};
diff --git a/libspeexdsp/high_lsp_tables.c b/libspeexdsp/high_lsp_tables.c
deleted file mode 100644 (file)
index e82e875..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: high_lsp_tables.c
-   Codebooks for high-band LSPs in SB-CELP mode
-  
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are
-   met:
-
-   1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.  
-
-   2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-   3. The name of the author may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-   POSSIBILITY OF SUCH DAMAGE.
-*/
-const signed char high_lsp_cdbk[512]={
-39,12,-14,-20,-29,-61,-67,-76,
--32,-71,-67,68,77,46,34,5,
--13,-48,-46,-72,-81,-84,-60,-58,
--40,-28,82,93,68,45,29,3,
--19,-47,-28,-43,-35,-30,-8,-13,
--39,-91,-91,-123,-96,10,10,-6,
--18,-55,-60,-91,-56,-36,-27,-16,
--48,-75,40,28,-10,-28,35,9,
-37,19,1,-20,-31,-41,-18,-25,
--35,-68,-80,45,27,-1,47,13,
-0,-29,-35,-57,-50,-79,-73,-38,
--19,5,35,14,-10,-23,16,-8,
-5,-24,-40,-62,-23,-27,-22,-16,
--18,-46,-72,-77,43,21,33,1,
--80,-70,-70,-64,-56,-52,-39,-33,
--31,-38,-19,-19,-15,32,33,-2,
-7,-15,-15,-24,-23,-33,-41,-56,
--24,-57,5,89,64,41,27,5,
--9,-47,-60,-97,-97,-124,-20,-9,
--44,-73,31,29,-4,64,48,7,
--35,-57,0,-3,-26,-47,-3,-6,
--40,-76,-79,-48,12,81,55,10,
-9,-24,-43,-73,-57,-69,16,5,
--28,-53,18,29,20,0,-4,-11,
-6,-13,23,7,-17,-35,-37,-37,
--30,-68,-63,6,24,-9,-14,3,
-21,-13,-27,-57,-49,-80,-24,-41,
--5,-16,-5,1,45,25,12,-7,
-3,-15,-6,-16,-15,-8,6,-13,
--42,-81,-80,-87,14,1,-10,-3,
--43,-69,-46,-24,-28,-29,36,6,
--43,-56,-12,12,54,79,43,9,
-54,22,2,8,-12,-43,-46,-52,
--38,-69,-89,-5,75,38,33,5,
--13,-53,-62,-87,-89,-113,-99,-55,
--34,-37,62,55,33,16,21,-2,
--17,-46,-29,-38,-38,-48,-39,-42,
--36,-75,-72,-88,-48,-30,21,2,
--15,-57,-64,-98,-84,-76,25,1,
--46,-80,-12,18,-7,3,34,6,
-38,31,23,4,-1,20,14,-15,
--43,-78,-91,-24,14,-3,54,16,
-0,-27,-28,-44,-56,-83,-92,-89,
--3,34,56,41,36,22,20,-8,
--7,-35,-42,-62,-49,3,12,-10,
--50,-87,-96,-66,92,70,38,9,
--70,-71,-62,-42,-39,-43,-11,-7,
--50,-79,-58,-50,-31,32,31,-6,
--4,-25,7,-17,-38,-70,-58,-27,
--43,-83,-28,59,36,20,31,2,
--27,-71,-80,-109,-98,-75,-33,-32,
--31,-2,33,15,-6,43,33,-5,
-0,-22,-10,-27,-34,-49,-11,-20,
--41,-91,-100,-121,-39,57,41,10,
--19,-50,-38,-59,-60,-70,-18,-20,
--8,-31,-8,-15,1,-14,-26,-25,
-33,21,32,17,1,-19,-19,-26,
--58,-81,-35,-22,45,30,11,-11,
-3,-26,-48,-87,-67,-83,-58,3,
--1,-26,-20,44,10,25,39,5,
--9,-35,-27,-38,7,10,4,-9,
--42,-85,-102,-127,52,44,28,10,
--47,-61,-40,-39,-17,-1,-10,-33,
--42,-74,-48,21,-4,70,52,10};
-
-
-const signed char high_lsp_cdbk2[512]={
--36,-62,6,-9,-10,-14,-56,23,
-1,-26,23,-48,-17,12,8,-7,
-23,29,-36,-28,-6,-29,-17,-5,
-40,23,10,10,-46,-13,36,6,
-4,-30,-29,62,32,-32,-1,22,
--14,1,-4,-22,-45,2,54,4,
--30,-57,-59,-12,27,-3,-31,8,
--9,5,10,-14,32,66,19,9,
-2,-25,-37,23,-15,18,-38,-31,
-5,-9,-21,15,0,22,62,30,
-15,-12,-14,-46,77,21,33,3,
-34,29,-19,50,2,11,9,-38,
--12,-37,62,1,-15,54,32,6,
-2,-24,20,35,-21,2,19,24,
--13,55,4,9,39,-19,30,-1,
--21,73,54,33,8,18,3,15,
-6,-19,-47,6,-3,-48,-50,1,
-26,20,8,-23,-50,65,-14,-55,
--17,-31,-37,-28,53,-1,-17,-53,
-1,57,11,-8,-25,-30,-37,64,
-5,-52,-45,15,23,31,15,14,
--25,24,33,-2,-44,-56,-18,6,
--21,-43,4,-12,17,-37,20,-10,
-34,15,2,15,55,21,-11,-31,
--6,46,25,16,-9,-25,-8,-62,
-28,17,20,-32,-29,26,30,25,
--19,2,-16,-17,26,-51,2,50,
-42,19,-66,23,29,-2,3,19,
--19,-37,32,15,6,30,-34,13,
-11,-5,40,31,10,-42,4,-9,
-26,-9,-70,17,-2,-23,20,-22,
--55,51,-24,-31,22,-22,15,-13,
-3,-10,-28,-16,56,4,-63,11,
--18,-15,-18,-38,-35,16,-7,34,
--1,-21,-49,-47,9,-37,7,8,
-69,55,20,6,-33,-45,-10,-9,
-6,-9,12,71,15,-3,-42,-7,
--24,32,-35,-2,-42,-17,-5,0,
--2,-33,-54,13,-12,-34,47,23,
-19,55,7,-8,74,31,14,16,
--23,-26,19,12,-18,-49,-28,-31,
--20,2,-14,-20,-47,78,40,13,
--23,-11,21,-6,18,1,47,5,
-38,35,32,46,22,8,13,16,
--14,18,51,19,40,39,11,-26,
--1,-17,47,2,-53,-15,31,-22,
-38,21,-15,-16,5,-33,53,15,
--38,86,11,-3,-24,49,13,-4,
--11,-18,28,20,-12,-27,-26,35,
--25,-35,-3,-20,-61,30,10,-55,
--12,-22,-52,-54,-14,19,-32,-12,
-45,15,-8,-48,-9,11,-32,8,
--16,-34,-13,51,18,38,-2,-32,
--17,22,-2,-18,-28,-70,59,27,
--28,-19,-10,-20,-9,-9,-8,-21,
-21,-8,35,-2,45,-3,-9,12,
-0,30,7,-39,43,27,-38,-91,
-30,26,19,-55,-4,63,14,-17,
-13,9,13,2,7,4,6,61,
-72,-1,-17,29,-1,-22,-17,8,
--28,-37,63,44,41,3,2,14,
-9,-6,75,-8,-7,-12,-15,-12,
-13,9,-4,30,-22,-65,15,0,
--45,4,-4,1,5,22,11,23};
diff --git a/libspeexdsp/lpc.c b/libspeexdsp/lpc.c
deleted file mode 100644 (file)
index 141fd9d..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
-  Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
-  Technische Universitaet Berlin
-
-  Any use of this software is permitted provided that this notice is not
-  removed and that neither the authors nor the Technische Universitaet Berlin
-  are deemed to have made any representations as to the suitability of this
-  software for any purpose nor are held responsible for any defects of
-  this software.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
-
-  As a matter of courtesy, the authors request to be informed about uses
-  this software has found, about bugs in this software, and about any
-  improvements that may be of general interest.
-
-  Berlin, 28.11.1994
-  Jutta Degener
-  Carsten Bormann
-
-
-   Code modified by Jean-Marc Valin
-
-   Speex License:
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifndef DISABLE_ENCODER
-
-#include "lpc.h"
-
-#ifdef BFIN_ASM
-#include "lpc_bfin.h"
-#endif
-
-/* LPC analysis
- *
- * The next two functions calculate linear prediction coefficients
- * and/or the related reflection coefficients from the first P_MAX+1
- * values of the autocorrelation function.
- */
-
-/* Invented by N. Levinson in 1947, modified by J. Durbin in 1959.
- */
-
-/* returns minimum mean square error    */
-spx_word32_t _spx_lpc(
-spx_coef_t       *lpc, /* out: [0...p-1] LPC coefficients      */
-const spx_word16_t *ac,  /* in:  [0...p] autocorrelation values  */
-int          p
-)
-{
-   int i, j;  
-   spx_word16_t r;
-   spx_word16_t error = ac[0];
-
-   for (i = 0; i < p; i++) {
-
-      /* Sum up this iteration's reflection coefficient */
-      spx_word32_t rr = NEG32(SHL32(EXTEND32(ac[i + 1]),13));
-      for (j = 0; j < i; j++) 
-         rr = SUB32(rr,MULT16_16(lpc[j],ac[i - j]));
-#ifdef FIXED_POINT
-      r = DIV32_16(rr+PSHR32(error,1),ADD16(error,8));
-#else
-      r = rr/(error+.003*ac[0]);
-#endif
-      /*  Update LPC coefficients and total error */
-      lpc[i] = r;
-      for (j = 0; j < (i+1)>>1; j++) 
-      {
-         spx_word16_t tmp1, tmp2;
-         /* It could be that j == i-1-j, in which case, we're updating the same value twice, which is OK */
-         tmp1 = lpc[j];
-         tmp2 = lpc[i-1-j];
-         lpc[j]     = MAC16_16_P13(tmp1,r,tmp2);
-         lpc[i-1-j] = MAC16_16_P13(tmp2,r,tmp1);
-      }
-
-      error = SUB16(error,MULT16_16_Q13(r,MULT16_16_Q13(error,r)));
-   }
-   return error;
-}
-
-
-#ifdef FIXED_POINT
-
-/* Compute the autocorrelation
- *                      ,--,
- *              ac(i) = >  x(n) * x(n-i)  for all n
- *                      `--'
- * for lags between 0 and lag-1, and x == 0 outside 0...n-1
- */
-
-#ifndef OVERRIDE_SPEEX_AUTOCORR
-void _spx_autocorr(
-const spx_word16_t *x,   /*  in: [0...n-1] samples x   */
-spx_word16_t       *ac,  /* out: [0...lag-1] ac values */
-int          lag, 
-int          n
-)
-{
-   spx_word32_t d;
-   int i, j;
-   spx_word32_t ac0=1;
-   int shift, ac_shift;
-   
-   for (j=0;j<n;j++)
-      ac0 = ADD32(ac0,SHR32(MULT16_16(x[j],x[j]),8));
-   ac0 = ADD32(ac0,n);
-   shift = 8;
-   while (shift && ac0<0x40000000)
-   {
-      shift--;
-      ac0 <<= 1;
-   }
-   ac_shift = 18;
-   while (ac_shift && ac0<0x40000000)
-   {
-      ac_shift--;
-      ac0 <<= 1;
-   }
-   
-   
-   for (i=0;i<lag;i++)
-   {
-      d=0;
-      for (j=i;j<n;j++)
-      {
-         d = ADD32(d,SHR32(MULT16_16(x[j],x[j-i]), shift));
-      }
-      
-      ac[i] = SHR32(d, ac_shift);
-   }
-}
-#endif
-
-
-#else
-
-
-
-/* Compute the autocorrelation
- *                      ,--,
- *              ac(i) = >  x(n) * x(n-i)  for all n
- *                      `--'
- * for lags between 0 and lag-1, and x == 0 outside 0...n-1
- */
-void _spx_autocorr(
-const spx_word16_t *x,   /*  in: [0...n-1] samples x   */
-float       *ac,  /* out: [0...lag-1] ac values */
-int          lag, 
-int          n
-)
-{
-   float d;
-   int i;
-   while (lag--) 
-   {
-      for (i = lag, d = 0; i < n; i++) 
-         d += x[i] * x[i-lag];
-      ac[lag] = d;
-   }
-   ac[0] += 10;
-}
-
-#endif
-
-
-#endif /* DISABLE_ENCODER */
diff --git a/libspeexdsp/lpc.h b/libspeexdsp/lpc.h
deleted file mode 100644 (file)
index 952ecdd..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin */
-/**
-   @file lpc.h
-   @brief Functions for LPC (Linear Prediction Coefficients) analysis
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef LPC_H
-#define LPC_H
-
-#include "arch.h"
-
-void _spx_autocorr(
-              const spx_word16_t * x,   /*  in: [0...n-1] samples x   */
-              spx_word16_t *ac,   /* out: [0...lag-1] ac values */
-              int lag, int   n);
-
-spx_word32_t                      /* returns minimum mean square error    */
-_spx_lpc(
-    spx_coef_t       * lpc, /*      [0...p-1] LPC coefficients      */
-    const spx_word16_t * ac,  /*  in: [0...p] autocorrelation values  */
-    int p
-    );
-
-
-#endif
diff --git a/libspeexdsp/lpc_bfin.h b/libspeexdsp/lpc_bfin.h
deleted file mode 100644 (file)
index d7d11c0..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Copyright (C) 2005 Analog Devices */
-/**
-   @file lpc_bfin.h
-   @author Jean-Marc Valin 
-   @brief Functions for LPC (Linear Prediction Coefficients) analysis (Blackfin version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "bfin.h"
-
-#define OVERRIDE_SPEEX_AUTOCORR
-void _spx_autocorr(
-const spx_word16_t *x,   /*  in: [0...n-1] samples x   */
-spx_word16_t       *ac,  /* out: [0...lag-1] ac values */
-int          lag, 
-int          n
-                  )
-{
-   spx_word32_t d;
-   const spx_word16_t *xs;
-   int i, j;
-   spx_word32_t ac0=1;
-   spx_word32_t ac32[11], *ac32top;
-   int shift, ac_shift;
-   ac32top = ac32+lag-1;
-   int lag_1, N_lag;
-   int nshift;
-   lag_1 = lag-1;
-   N_lag = n-lag_1;
-   for (j=0;j<n;j++)
-      ac0 = ADD32(ac0,SHR32(MULT16_16(x[j],x[j]),8));
-   ac0 = ADD32(ac0,n);
-   shift = 8;
-   while (shift && ac0<0x40000000)
-   {
-      shift--;
-      ac0 <<= 1;
-   }
-   ac_shift = 18;
-   while (ac_shift && ac0<0x40000000)
-   {
-      ac_shift--;
-      ac0 <<= 1;
-   }
-   
-   xs = x+lag-1;
-   nshift = -shift;
-   __asm__ __volatile__ 
-   (
-         "P2 = %0;\n\t"
-         "I0 = P2;\n\t" /* x in I0 */
-         "B0 = P2;\n\t" /* x in B0 */
-         "R0 = %3;\n\t" /* len in R0 */
-         "P3 = %3;\n\t" /* len in R0 */
-         "P4 = %4;\n\t" /* nb_pitch in R0 */
-         "R1 = R0 << 1;\n\t" /* number of bytes in x */
-         "L0 = R1;\n\t"
-         "P0 = %1;\n\t"
-         "P1 = %2;\n\t"
-         "B1 = P1;\n\t"
-         "R4 = %5;\n\t"
-         "L1 = 0;\n\t" /*Disable looping on I1*/
-
-         "r0 = [I0++];\n\t"
-         "R2 = 0;R3=0;"
-         "LOOP pitch%= LC0 = P4 >> 1;\n\t"
-         "LOOP_BEGIN pitch%=;\n\t"
-            "I1 = P0;\n\t"
-            "A1 = A0 = 0;\n\t"
-            "R1 = [I1++];\n\t"
-            "LOOP inner_prod%= LC1 = P3 >> 1;\n\t"
-            "LOOP_BEGIN inner_prod%=;\n\t"
-               "A1 += R0.L*R1.H, A0 += R0.L*R1.L (IS) || R1.L = W[I1++];\n\t"
-               "A1 += R0.H*R1.L, A0 += R0.H*R1.H (IS) || R1.H = W[I1++] || R0 = [I0++];\n\t"
-            "LOOP_END inner_prod%=;\n\t"
-            "A0 = ASHIFT A0 by R4.L;\n\t"
-            "A1 = ASHIFT A1 by R4.L;\n\t"
-   
-            "R2 = A0, R3 = A1;\n\t"
-            "[P1--] = R2;\n\t"
-            "[P1--] = R3;\n\t"
-            "P0 += 4;\n\t"
-         "LOOP_END pitch%=;\n\t"
-   : : "m" (xs), "m" (x), "m" (ac32top), "m" (N_lag), "m" (lag_1), "m" (nshift)
-   : "A0", "A1", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "R3", "R4", "I0", "I1", "L0", "L1", "B0", "B1", "memory",
-     "ASTAT" BFIN_HWLOOP0_REGS BFIN_HWLOOP1_REGS
-   );
-   d=0;
-   for (j=0;j<n;j++)
-   {
-      d = ADD32(d,SHR32(MULT16_16(x[j],x[j]), shift));
-   }
-   ac32[0] = d;
-   
-   for (i=0;i<lag;i++)
-   {
-      d=0;
-      for (j=i;j<lag_1;j++)
-      {
-         d = ADD32(d,SHR32(MULT16_16(x[j],x[j-i]), shift));
-      }
-      if (i)
-         ac32[i] += d;
-      ac[i] = SHR32(ac32[i], ac_shift);
-   }
-}
-
diff --git a/libspeexdsp/lsp.c b/libspeexdsp/lsp.c
deleted file mode 100644 (file)
index 79ae369..0000000
+++ /dev/null
@@ -1,643 +0,0 @@
-/*---------------------------------------------------------------------------*\
-Original copyright
-       FILE........: lsp.c
-       AUTHOR......: David Rowe
-       DATE CREATED: 24/2/93
-
-Heavily modified by Jean-Marc Valin (c) 2002-2006 (fixed-point, 
-                       optimizations, additional functions, ...)
-
-   This file contains functions for converting Linear Prediction
-   Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the
-   LSP coefficients are not in radians format but in the x domain of the
-   unit circle.
-
-   Speex License:
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*---------------------------------------------------------------------------*\
-
-  Introduction to Line Spectrum Pairs (LSPs)
-  ------------------------------------------
-
-  LSPs are used to encode the LPC filter coefficients {ak} for
-  transmission over the channel.  LSPs have several properties (like
-  less sensitivity to quantisation noise) that make them superior to
-  direct quantisation of {ak}.
-
-  A(z) is a polynomial of order lpcrdr with {ak} as the coefficients.
-
-  A(z) is transformed to P(z) and Q(z) (using a substitution and some
-  algebra), to obtain something like:
-
-    A(z) = 0.5[P(z)(z+z^-1) + Q(z)(z-z^-1)]  (1)
-
-  As you can imagine A(z) has complex zeros all over the z-plane. P(z)
-  and Q(z) have the very neat property of only having zeros _on_ the
-  unit circle.  So to find them we take a test point z=exp(jw) and
-  evaluate P (exp(jw)) and Q(exp(jw)) using a grid of points between 0
-  and pi.
-
-  The zeros (roots) of P(z) also happen to alternate, which is why we
-  swap coefficients as we find roots.  So the process of finding the
-  LSP frequencies is basically finding the roots of 5th order
-  polynomials.
-
-  The root so P(z) and Q(z) occur in symmetrical pairs at +/-w, hence
-  the name Line Spectrum Pairs (LSPs).
-
-  To convert back to ak we just evaluate (1), "clocking" an impulse
-  thru it lpcrdr times gives us the impulse response of A(z) which is
-  {ak}.
-
-\*---------------------------------------------------------------------------*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-#include "lsp.h"
-#include "stack_alloc.h"
-#include "math_approx.h"
-
-#ifndef M_PI
-#define M_PI           3.14159265358979323846  /* pi */
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifdef FIXED_POINT
-
-#define FREQ_SCALE 16384
-
-/*#define ANGLE2X(a) (32768*cos(((a)/8192.)))*/
-#define ANGLE2X(a) (SHL16(spx_cos(a),2))
-
-/*#define X2ANGLE(x) (acos(.00006103515625*(x))*LSP_SCALING)*/
-#define X2ANGLE(x) (spx_acos(x))
-
-#ifdef BFIN_ASM
-#include "lsp_bfin.h"
-#endif
-
-#else
-
-/*#define C1 0.99940307
-#define C2 -0.49558072
-#define C3 0.03679168*/
-
-#define FREQ_SCALE 1.
-#define ANGLE2X(a) (spx_cos(a))
-#define X2ANGLE(x) (acos(x))
-
-#endif
-
-#ifndef DISABLE_ENCODER
-
-/*---------------------------------------------------------------------------*\
-
-   FUNCTION....: cheb_poly_eva()
-
-   AUTHOR......: David Rowe
-   DATE CREATED: 24/2/93
-
-   This function evaluates a series of Chebyshev polynomials
-
-\*---------------------------------------------------------------------------*/
-
-#ifdef FIXED_POINT
-
-#ifndef OVERRIDE_CHEB_POLY_EVA
-static inline spx_word32_t cheb_poly_eva(
-  spx_word16_t *coef, /* P or Q coefs in Q13 format               */
-  spx_word16_t     x, /* cos of freq (-1.0 to 1.0) in Q14 format  */
-  int              m, /* LPC order/2                              */
-  char         *stack
-)
-{
-    int i;
-    spx_word16_t b0, b1;
-    spx_word32_t sum;
-
-    /*Prevents overflows*/
-    if (x>16383)
-       x = 16383;
-    if (x<-16383)
-       x = -16383;
-
-    /* Initialise values */
-    b1=16384;
-    b0=x;
-
-    /* Evaluate Chebyshev series formulation usin g iterative approach  */
-    sum = ADD32(EXTEND32(coef[m]), EXTEND32(MULT16_16_P14(coef[m-1],x)));
-    for(i=2;i<=m;i++)
-    {
-       spx_word16_t tmp=b0;
-       b0 = SUB16(MULT16_16_Q13(x,b0), b1);
-       b1 = tmp;
-       sum = ADD32(sum, EXTEND32(MULT16_16_P14(coef[m-i],b0)));
-    }
-    
-    return sum;
-}
-#endif
-
-#else
-
-static float cheb_poly_eva(spx_word32_t *coef, spx_word16_t x, int m, char *stack)
-{
-   int k;
-   float b0, b1, tmp;
-
-   /* Initial conditions */
-   b0=0; /* b_(m+1) */
-   b1=0; /* b_(m+2) */
-
-   x*=2;
-
-   /* Calculate the b_(k) */
-   for(k=m;k>0;k--)
-   {
-      tmp=b0;                           /* tmp holds the previous value of b0 */
-      b0=x*b0-b1+coef[m-k];    /* b0 holds its new value based on b0 and b1 */
-      b1=tmp;                           /* b1 holds the previous value of b0 */
-   }
-
-   return(-b1+.5*x*b0+coef[m]);
-}
-#endif
-
-/*---------------------------------------------------------------------------*\
-
-    FUNCTION....: lpc_to_lsp()
-
-    AUTHOR......: David Rowe
-    DATE CREATED: 24/2/93
-
-    This function converts LPC coefficients to LSP
-    coefficients.
-
-\*---------------------------------------------------------------------------*/
-
-#ifdef FIXED_POINT
-#define SIGN_CHANGE(a,b) ((((a)^(b))&0x80000000)||(b==0))
-#else
-#define SIGN_CHANGE(a,b) (((a)*(b))<0.0)
-#endif
-
-
-int lpc_to_lsp (spx_coef_t *a,int lpcrdr,spx_lsp_t *freq,int nb,spx_word16_t delta, char *stack)
-/*  float *a                   lpc coefficients                        */
-/*  int lpcrdr                 order of LPC coefficients (10)          */
-/*  float *freq                LSP frequencies in the x domain         */
-/*  int nb                     number of sub-intervals (4)             */
-/*  float delta                        grid spacing interval (0.02)            */
-
-
-{
-    spx_word16_t temp_xr,xl,xr,xm=0;
-    spx_word32_t psuml,psumr,psumm,temp_psumr/*,temp_qsumr*/;
-    int i,j,m,flag,k;
-    VARDECL(spx_word32_t *Q);                  /* ptrs for memory allocation           */
-    VARDECL(spx_word32_t *P);
-    VARDECL(spx_word16_t *Q16);         /* ptrs for memory allocation          */
-    VARDECL(spx_word16_t *P16);
-    spx_word32_t *px;                  /* ptrs of respective P'(z) & Q'(z)     */
-    spx_word32_t *qx;
-    spx_word32_t *p;
-    spx_word32_t *q;
-    spx_word16_t *pt;                  /* ptr used for cheb_poly_eval()
-                               whether P' or Q'                        */
-    int roots=0;               /* DR 8/2/94: number of roots found     */
-    flag = 1;                  /*  program is searching for a root when,
-                               1 else has found one                    */
-    m = lpcrdr/2;              /* order of P'(z) & Q'(z) polynomials   */
-
-    /* Allocate memory space for polynomials */
-    ALLOC(Q, (m+1), spx_word32_t);
-    ALLOC(P, (m+1), spx_word32_t);
-
-    /* determine P'(z)'s and Q'(z)'s coefficients where
-      P'(z) = P(z)/(1 + z^(-1)) and Q'(z) = Q(z)/(1-z^(-1)) */
-
-    px = P;                      /* initialise ptrs                    */
-    qx = Q;
-    p = px;
-    q = qx;
-
-#ifdef FIXED_POINT
-    *px++ = LPC_SCALING;
-    *qx++ = LPC_SCALING;
-    for(i=0;i<m;i++){
-       *px++ = SUB32(ADD32(EXTEND32(a[i]),EXTEND32(a[lpcrdr-i-1])), *p++);
-       *qx++ = ADD32(SUB32(EXTEND32(a[i]),EXTEND32(a[lpcrdr-i-1])), *q++);
-    }
-    px = P;
-    qx = Q;
-    for(i=0;i<m;i++)
-    {
-       /*if (fabs(*px)>=32768)
-          speex_warning_int("px", *px);
-       if (fabs(*qx)>=32768)
-       speex_warning_int("qx", *qx);*/
-       *px = PSHR32(*px,2);
-       *qx = PSHR32(*qx,2);
-       px++;
-       qx++;
-    }
-    /* The reason for this lies in the way cheb_poly_eva() is implemented for fixed-point */
-    P[m] = PSHR32(P[m],3);
-    Q[m] = PSHR32(Q[m],3);
-#else
-    *px++ = LPC_SCALING;
-    *qx++ = LPC_SCALING;
-    for(i=0;i<m;i++){
-       *px++ = (a[i]+a[lpcrdr-1-i]) - *p++;
-       *qx++ = (a[i]-a[lpcrdr-1-i]) + *q++;
-    }
-    px = P;
-    qx = Q;
-    for(i=0;i<m;i++){
-       *px = 2**px;
-       *qx = 2**qx;
-       px++;
-       qx++;
-    }
-#endif
-
-    px = P;                    /* re-initialise ptrs                   */
-    qx = Q;
-
-    /* now that we have computed P and Q convert to 16 bits to
-       speed up cheb_poly_eval */
-
-    ALLOC(P16, m+1, spx_word16_t);
-    ALLOC(Q16, m+1, spx_word16_t);
-
-    for (i=0;i<m+1;i++)
-    {
-       P16[i] = P[i];
-       Q16[i] = Q[i];
-    }
-
-    /* Search for a zero in P'(z) polynomial first and then alternate to Q'(z).
-    Keep alternating between the two polynomials as each zero is found         */
-
-    xr = 0;                    /* initialise xr to zero                */
-    xl = FREQ_SCALE;                   /* start at point xl = 1                */
-
-    for(j=0;j<lpcrdr;j++){
-       if(j&1)                 /* determines whether P' or Q' is eval. */
-           pt = Q16;
-       else
-           pt = P16;
-
-       psuml = cheb_poly_eva(pt,xl,m,stack);   /* evals poly. at xl    */
-       flag = 1;
-       while(xr >= -FREQ_SCALE){
-           spx_word16_t dd;
-           /* Modified by JMV to provide smaller steps around x=+-1 */
-#ifdef FIXED_POINT
-           dd = MULT16_16_Q15(delta,SUB16(FREQ_SCALE, MULT16_16_Q14(MULT16_16_Q14(xl,xl),14000)));
-           if (psuml<512 && psuml>-512)
-              dd = PSHR16(dd,1);
-#else
-           dd=delta*(1-.9*xl*xl);
-           if (fabs(psuml)<.2)
-              dd *= .5;
-#endif
-           xr = SUB16(xl, dd);                         /* interval spacing     */
-           psumr = cheb_poly_eva(pt,xr,m,stack);/* poly(xl-delta_x)    */
-           temp_psumr = psumr;
-           temp_xr = xr;
-
-    /* if no sign change increment xr and re-evaluate poly(xr). Repeat til
-    sign change.
-    if a sign change has occurred the interval is bisected and then
-    checked again for a sign change which determines in which
-    interval the zero lies in.
-    If there is no sign change between poly(xm) and poly(xl) set interval
-    between xm and xr else set interval between xl and xr and repeat till
-    root is located within the specified limits                        */
-
-           if(SIGN_CHANGE(psumr,psuml))
-            {
-               roots++;
-
-               psumm=psuml;
-               for(k=0;k<=nb;k++){
-#ifdef FIXED_POINT
-                   xm = ADD16(PSHR16(xl,1),PSHR16(xr,1));              /* bisect the interval  */
-#else
-                    xm = .5*(xl+xr);           /* bisect the interval  */
-#endif
-                   psumm=cheb_poly_eva(pt,xm,m,stack);
-                   /*if(psumm*psuml>0.)*/
-                   if(!SIGN_CHANGE(psumm,psuml))
-                    {
-                       psuml=psumm;
-                       xl=xm;
-                   } else {
-                       psumr=psumm;
-                       xr=xm;
-                   }
-               }
-
-              /* once zero is found, reset initial interval to xr      */
-              freq[j] = X2ANGLE(xm);
-              xl = xm;
-              break;                   /* reset flag for next search   */
-           }
-           else{
-               psuml=temp_psumr;
-               xl=temp_xr;
-           }
-       }
-    }
-    return(roots);
-}
-
-#endif /* DISABLE_ENCODER */
-/*---------------------------------------------------------------------------*\
-
-       FUNCTION....: lsp_to_lpc()
-
-       AUTHOR......: David Rowe
-       DATE CREATED: 24/2/93
-
-        Converts LSP coefficients to LPC coefficients.
-
-\*---------------------------------------------------------------------------*/
-
-#ifdef FIXED_POINT
-
-void lsp_to_lpc(const spx_lsp_t *freq,spx_coef_t *ak,int lpcrdr, char *stack)
-/*  float *freq        array of LSP frequencies in the x domain        */
-/*  float *ak          array of LPC coefficients                       */
-/*  int lpcrdr         order of LPC coefficients                       */
-{
-    int i,j;
-    spx_word32_t xout1,xout2,xin;
-    spx_word32_t mult, a;
-    VARDECL(spx_word16_t *freqn);
-    VARDECL(spx_word32_t **xp);
-    VARDECL(spx_word32_t *xpmem);
-    VARDECL(spx_word32_t **xq);
-    VARDECL(spx_word32_t *xqmem);
-    int m = lpcrdr>>1;
-
-    /* 
-    
-       Reconstruct P(z) and Q(z) by cascading second order polynomials
-       in form 1 - 2cos(w)z(-1) + z(-2), where w is the LSP frequency.
-       In the time domain this is:
-
-       y(n) = x(n) - 2cos(w)x(n-1) + x(n-2)
-    
-       This is what the ALLOCS below are trying to do:
-
-         int xp[m+1][lpcrdr+1+2]; // P matrix in QIMP
-         int xq[m+1][lpcrdr+1+2]; // Q matrix in QIMP
-
-       These matrices store the output of each stage on each row.  The
-       final (m-th) row has the output of the final (m-th) cascaded
-       2nd order filter.  The first row is the impulse input to the
-       system (not written as it is known).
-
-       The version below takes advantage of the fact that a lot of the
-       outputs are zero or known, for example if we put an inpulse
-       into the first section the "clock" it 10 times only the first 3
-       outputs samples are non-zero (it's an FIR filter).
-    */
-
-    ALLOC(xp, (m+1), spx_word32_t*);
-    ALLOC(xpmem, (m+1)*(lpcrdr+1+2), spx_word32_t);
-
-    ALLOC(xq, (m+1), spx_word32_t*);
-    ALLOC(xqmem, (m+1)*(lpcrdr+1+2), spx_word32_t);
-    
-    for(i=0; i<=m; i++) {
-      xp[i] = xpmem + i*(lpcrdr+1+2);
-      xq[i] = xqmem + i*(lpcrdr+1+2);
-    }
-
-    /* work out 2cos terms in Q14 */
-
-    ALLOC(freqn, lpcrdr, spx_word16_t);
-    for (i=0;i<lpcrdr;i++) 
-       freqn[i] = ANGLE2X(freq[i]);
-
-    #define QIMP  21   /* scaling for impulse */
-
-    xin = SHL32(EXTEND32(1), (QIMP-1)); /* 0.5 in QIMP format */
-   
-    /* first col and last non-zero values of each row are trivial */
-    
-    for(i=0;i<=m;i++) {
-     xp[i][1] = 0;
-     xp[i][2] = xin;
-     xp[i][2+2*i] = xin;
-     xq[i][1] = 0;
-     xq[i][2] = xin;
-     xq[i][2+2*i] = xin;
-    }
-
-    /* 2nd row (first output row) is trivial */
-
-    xp[1][3] = -MULT16_32_Q14(freqn[0],xp[0][2]);
-    xq[1][3] = -MULT16_32_Q14(freqn[1],xq[0][2]);
-
-    xout1 = xout2 = 0;
-
-    /* now generate remaining rows */
-
-    for(i=1;i<m;i++) {
-
-      for(j=1;j<2*(i+1)-1;j++) {
-       mult = MULT16_32_Q14(freqn[2*i],xp[i][j+1]);
-       xp[i+1][j+2] = ADD32(SUB32(xp[i][j+2], mult), xp[i][j]);
-       mult = MULT16_32_Q14(freqn[2*i+1],xq[i][j+1]);
-       xq[i+1][j+2] = ADD32(SUB32(xq[i][j+2], mult), xq[i][j]);
-      }
-
-      /* for last col xp[i][j+2] = xq[i][j+2] = 0 */
-
-      mult = MULT16_32_Q14(freqn[2*i],xp[i][j+1]);
-      xp[i+1][j+2] = SUB32(xp[i][j], mult);
-      mult = MULT16_32_Q14(freqn[2*i+1],xq[i][j+1]);
-      xq[i+1][j+2] = SUB32(xq[i][j], mult);
-    }
-
-    /* process last row to extra a{k} */
-
-    for(j=1;j<=lpcrdr;j++) {
-      int shift = QIMP-13;
-
-      /* final filter sections */
-      a = PSHR32(xp[m][j+2] + xout1 + xq[m][j+2] - xout2, shift); 
-      xout1 = xp[m][j+2];
-      xout2 = xq[m][j+2];
-      
-      /* hard limit ak's to +/- 32767 */
-
-      if (a < -32767) a = -32767;
-      if (a > 32767) a = 32767;
-      ak[j-1] = (short)a;
-     
-    }
-
-}
-
-#else
-
-void lsp_to_lpc(const spx_lsp_t *freq,spx_coef_t *ak,int lpcrdr, char *stack)
-/*  float *freq        array of LSP frequencies in the x domain        */
-/*  float *ak          array of LPC coefficients                       */
-/*  int lpcrdr         order of LPC coefficients                       */
-
-
-{
-    int i,j;
-    float xout1,xout2,xin1,xin2;
-    VARDECL(float *Wp);
-    float *pw,*n1,*n2,*n3,*n4=NULL;
-    VARDECL(float *x_freq);
-    int m = lpcrdr>>1;
-
-    ALLOC(Wp, 4*m+2, float);
-    pw = Wp;
-
-    /* initialise contents of array */
-
-    for(i=0;i<=4*m+1;i++){             /* set contents of buffer to 0 */
-       *pw++ = 0.0;
-    }
-
-    /* Set pointers up */
-
-    pw = Wp;
-    xin1 = 1.0;
-    xin2 = 1.0;
-
-    ALLOC(x_freq, lpcrdr, float);
-    for (i=0;i<lpcrdr;i++)
-       x_freq[i] = ANGLE2X(freq[i]);
-
-    /* reconstruct P(z) and Q(z) by  cascading second order
-      polynomials in form 1 - 2xz(-1) +z(-2), where x is the
-      LSP coefficient */
-
-    for(j=0;j<=lpcrdr;j++){
-       int i2=0;
-       for(i=0;i<m;i++,i2+=2){
-           n1 = pw+(i*4);
-           n2 = n1 + 1;
-           n3 = n2 + 1;
-           n4 = n3 + 1;
-           xout1 = xin1 - 2.f*x_freq[i2] * *n1 + *n2;
-           xout2 = xin2 - 2.f*x_freq[i2+1] * *n3 + *n4;
-           *n2 = *n1;
-           *n4 = *n3;
-           *n1 = xin1;
-           *n3 = xin2;
-           xin1 = xout1;
-           xin2 = xout2;
-       }
-       xout1 = xin1 + *(n4+1);
-       xout2 = xin2 - *(n4+2);
-       if (j>0)
-          ak[j-1] = (xout1 + xout2)*0.5f;
-       *(n4+1) = xin1;
-       *(n4+2) = xin2;
-
-       xin1 = 0.0;
-       xin2 = 0.0;
-    }
-
-}
-#endif
-
-
-#ifdef FIXED_POINT
-
-
-void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *lsp, int len, int subframe, int nb_subframes, spx_word16_t margin)
-{
-   int i;
-   spx_word16_t m = margin;
-   spx_word16_t m2 = 25736-margin;
-   spx_word16_t tmp = DIV32_16(SHL32(EXTEND32(1 + subframe),14),nb_subframes);
-   spx_word16_t tmp2 = 16384-tmp;
-   for (i=0;i<len;i++)
-      lsp[i] = MULT16_16_P14(tmp2,old_lsp[i]) + MULT16_16_P14(tmp,new_lsp[i]);
-   /* Enforce margin to sure the LSPs are stable*/
-   if (lsp[0]<m)
-      lsp[0]=m;
-   if (lsp[len-1]>m2)
-      lsp[len-1]=m2;
-   for (i=1;i<len-1;i++)
-   {
-      if (lsp[i]<lsp[i-1]+m)
-         lsp[i]=lsp[i-1]+m;
-
-      if (lsp[i]>lsp[i+1]-m)
-         lsp[i]= SHR16(lsp[i],1) + SHR16(lsp[i+1]-m,1);
-   }
-}
-
-#else
-
-
-void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *lsp, int len, int subframe, int nb_subframes, spx_word16_t margin)
-{
-   int i;
-   float tmp = (1.0f + subframe)/nb_subframes;
-   for (i=0;i<len;i++)
-      lsp[i] = (1-tmp)*old_lsp[i] + tmp*new_lsp[i];
-   /* Enforce margin to sure the LSPs are stable*/
-   if (lsp[0]<LSP_SCALING*margin)
-      lsp[0]=LSP_SCALING*margin;
-   if (lsp[len-1]>LSP_SCALING*(M_PI-margin))
-      lsp[len-1]=LSP_SCALING*(M_PI-margin);
-   for (i=1;i<len-1;i++)
-   {
-      if (lsp[i]<lsp[i-1]+LSP_SCALING*margin)
-         lsp[i]=lsp[i-1]+LSP_SCALING*margin;
-
-      if (lsp[i]>lsp[i+1]-LSP_SCALING*margin)
-         lsp[i]= .5f* (lsp[i] + lsp[i+1]-LSP_SCALING*margin);
-   }
-}
-
-#endif
diff --git a/libspeexdsp/lsp.h b/libspeexdsp/lsp.h
deleted file mode 100644 (file)
index 6560f85..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/*---------------------------------------------------------------------------*\
-Original Copyright
-       FILE........: AK2LSPD.H
-       TYPE........: Turbo C header file
-       COMPANY.....: Voicetronix
-       AUTHOR......: James Whitehall
-       DATE CREATED: 21/11/95
-
-Modified by Jean-Marc Valin
-
-    This file contains functions for converting Linear Prediction
-    Coefficients (LPC) to Line Spectral Pair (LSP) and back. Note that the
-    LSP coefficients are not in radians format but in the x domain of the
-    unit circle.
-
-\*---------------------------------------------------------------------------*/
-/**
-   @file lsp.h
-   @brief Line Spectral Pair (LSP) functions.
-*/
-/* Speex License:
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef __AK2LSPD__
-#define __AK2LSPD__
-
-#include "arch.h"
-
-int lpc_to_lsp (spx_coef_t *a, int lpcrdr, spx_lsp_t *freq, int nb, spx_word16_t delta, char *stack);
-void lsp_to_lpc(const spx_lsp_t *freq, spx_coef_t *ak, int lpcrdr, char *stack);
-
-/*Added by JMV*/
-void lsp_interpolate(spx_lsp_t *old_lsp, spx_lsp_t *new_lsp, spx_lsp_t *interp_lsp, int len, int subframe, int nb_subframes, spx_word16_t margin);
-
-#endif /* __AK2LSPD__ */
diff --git a/libspeexdsp/lsp_bfin.h b/libspeexdsp/lsp_bfin.h
deleted file mode 100644 (file)
index 530367c..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright (C) 2006 David Rowe */
-/**
-   @file lsp_bfin.h
-   @author David Rowe
-   @brief LSP routines optimised for the Blackfin
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#define OVERRIDE_CHEB_POLY_EVA
-#ifdef OVERRIDE_CHEB_POLY_EVA
-static inline spx_word32_t cheb_poly_eva(
-  spx_word16_t *coef, /* P or Q coefs in Q13 format               */
-  spx_word16_t     x, /* cos of freq (-1.0 to 1.0) in Q14 format  */
-  int              m, /* LPC order/2                              */
-  char         *stack
-)
-{
-    spx_word32_t sum;
-
-   __asm__ __volatile__
-     (
-      "P0 = %2;\n\t"           /* P0: coef[m], coef[m-1],..., coef[0] */
-      "R4 = 8192;\n\t"         /* R4: rounding constant               */
-      "R2 = %1;\n\t"           /* R2: x  */
-
-      "R5 = -16383;\n\t"
-      "R2 = MAX(R2,R5);\n\t"
-      "R5 = 16383;\n\t"
-      "R2 = MIN(R2,R5);\n\t"
-
-      "R3 = W[P0--] (X);\n\t"  /* R3: sum */
-      "R5 = W[P0--] (X);\n\t"
-      "R5 = R5.L * R2.L (IS);\n\t"
-      "R5 = R5 + R4;\n\t"
-      "R5 >>>= 14;\n\t"
-      "R3 = R3 + R5;\n\t" 
-      
-      "R0 = R2;\n\t"           /* R0: b0 */
-      "R1 = 16384;\n\t"        /* R1: b1 */
-      "LOOP cpe%= LC0 = %3;\n\t"
-      "LOOP_BEGIN cpe%=;\n\t"
-        "P1 = R0;\n\t" 
-        "R0 = R2.L * R0.L (IS) || R5 = W[P0--] (X);\n\t"
-        "R0 >>>= 13;\n\t"
-        "R0 = R0 - R1;\n\t"
-        "R1 = P1;\n\t"
-        "R5 = R5.L * R0.L (IS);\n\t"
-        "R5 = R5 + R4;\n\t"
-        "R5 >>>= 14;\n\t"
-        "R3 = R3 + R5;\n\t"
-      "LOOP_END cpe%=;\n\t"
-      "%0 = R3;\n\t"
-      : "=&d" (sum)
-      : "a" (x), "a" (&coef[m]), "a" (m-1)
-      : "R0", "R1", "R3", "R2", "R4", "R5", "P0", "P1", "ASTAT" BFIN_HWLOOP0_REGS
-      );
-    return sum;
-}
-#endif
-
-
-
diff --git a/libspeexdsp/lsp_tables_nb.c b/libspeexdsp/lsp_tables_nb.c
deleted file mode 100644 (file)
index 16f2e1b..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin 
-   File: lsp_tables_nb.c
-   Codebooks for LSPs in narrowband CELP mode
-  
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions are
-   met:
-
-   1. Redistributions of source code must retain the above copyright notice,
-   this list of conditions and the following disclaimer.  
-
-   2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-   3. The name of the author may not be used to endorse or promote products
-   derived from this software without specific prior written permission.
-
-   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-   DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
-   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-   STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-   POSSIBILITY OF SUCH DAMAGE.
-*/
-
-const signed char cdbk_nb[640]={
-30,19,38,34,40,32,46,43,58,43,
-5,-18,-25,-40,-33,-55,-52,20,34,28,
--20,-63,-97,-92,61,53,47,49,53,75,
--14,-53,-77,-79,0,-3,-5,19,22,26,
--9,-53,-55,66,90,72,85,68,74,52,
--4,-41,-58,-31,-18,-31,27,32,30,18,
-24,3,8,5,-12,-3,26,28,74,63,
--2,-39,-67,-77,-106,-74,59,59,73,65,
-44,40,71,72,82,83,98,88,89,60,
--6,-31,-47,-48,-13,-39,-9,7,2,79,
--1,-39,-60,-17,87,81,65,50,45,19,
--21,-67,-91,-87,-41,-50,7,18,39,74,
-10,-31,-28,39,24,13,23,5,56,45,
-29,10,-5,-13,-11,-35,-18,-8,-10,-8,
--25,-71,-77,-21,2,16,50,63,87,87,
-5,-32,-40,-51,-68,0,12,6,54,34,
-5,-12,32,52,68,64,69,59,65,45,
-14,-16,-31,-40,-65,-67,41,49,47,37,
--11,-52,-75,-84,-4,57,48,42,42,33,
--11,-51,-68,-6,13,0,8,-8,26,32,
--23,-53,0,36,56,76,97,105,111,97,
--1,-28,-39,-40,-43,-54,-44,-40,-18,35,
-16,-20,-19,-28,-42,29,47,38,74,45,
-3,-29,-48,-62,-80,-104,-33,56,59,59,
-10,17,46,72,84,101,117,123,123,106,
--7,-33,-49,-51,-70,-67,-27,-31,70,67,
--16,-62,-85,-20,82,71,86,80,85,74,
--19,-58,-75,-45,-29,-33,-18,-25,45,57,
--12,-42,-5,12,28,36,52,64,81,82,
-13,-9,-27,-28,22,3,2,22,26,6,
--6,-44,-51,2,15,10,48,43,49,34,
--19,-62,-84,-89,-102,-24,8,17,61,68,
-39,24,23,19,16,-5,12,15,27,15,
--8,-44,-49,-60,-18,-32,-28,52,54,62,
--8,-48,-77,-70,66,101,83,63,61,37,
--12,-50,-75,-64,33,17,13,25,15,77,
-1,-42,-29,72,64,46,49,31,61,44,
--8,-47,-54,-46,-30,19,20,-1,-16,0,
-16,-12,-18,-9,-26,-27,-10,-22,53,45,
--10,-47,-75,-82,-105,-109,8,25,49,77,
-50,65,114,117,124,118,115,96,90,61,
--9,-45,-63,-60,-75,-57,8,11,20,29,
-0,-35,-49,-43,40,47,35,40,55,38,
--24,-76,-103,-112,-27,3,23,34,52,75,
-8,-29,-43,12,63,38,35,29,24,8,
-25,11,1,-15,-18,-43,-7,37,40,21,
--20,-56,-19,-19,-4,-2,11,29,51,63,
--2,-44,-62,-75,-89,30,57,51,74,51,
-50,46,68,64,65,52,63,55,65,43,
-18,-9,-26,-35,-55,-69,3,6,8,17,
--15,-61,-86,-97,1,86,93,74,78,67,
--1,-38,-66,-48,48,39,29,25,17,-1,
-13,13,29,39,50,51,69,82,97,98,
--2,-36,-46,-27,-16,-30,-13,-4,-7,-4,
-25,-5,-11,-6,-25,-21,33,12,31,29,
--8,-38,-52,-63,-68,-89,-33,-1,10,74,
--2,-15,59,91,105,105,101,87,84,62,
--7,-33,-50,-35,-54,-47,25,17,82,81,
--13,-56,-83,21,58,31,42,25,72,65,
--24,-66,-91,-56,9,-2,21,10,69,75,
-2,-24,11,22,25,28,38,34,48,33,
-7,-29,-26,17,15,-1,14,0,-2,0,
--6,-41,-67,6,-2,-9,19,2,85,74,
--22,-67,-84,-71,-50,3,11,-9,2,62};
-
-const signed char cdbk_nb_low1[320]={
--34,-52,-15,45,2,
-23,21,52,24,-33,
--9,-1,9,-44,-41,
--13,-17,44,22,-17,
--6,-4,-1,22,38,
-26,16,2,50,27,
--35,-34,-9,-41,6,
-0,-16,-34,51,8,
--14,-31,-49,15,-33,
-45,49,33,-11,-37,
--62,-54,45,11,-5,
--72,11,-1,-12,-11,
-24,27,-11,-43,46,
-43,33,-12,-9,-1,
-1,-4,-23,-57,-71,
-11,8,16,17,-8,
--20,-31,-41,53,48,
--16,3,65,-24,-8,
--23,-32,-37,-32,-49,
--10,-17,6,38,5,
--9,-17,-46,8,52,
-3,6,45,40,39,
--7,-6,-34,-74,31,
-8,1,-16,43,68,
--11,-19,-31,4,6,
-0,-6,-17,-16,-38,
--16,-30,2,9,-39,
--16,-1,43,-10,48,
-3,3,-16,-31,-3,
-62,68,43,13,3,
--10,8,20,-56,12,
-12,-2,-18,22,-15,
--40,-36,1,7,41,
-0,1,46,-6,-62,
--4,-12,-2,-11,-83,
--13,-2,91,33,-10,
-0,4,-11,-16,79,
-32,37,14,9,51,
--21,-28,-56,-34,0,
-21,9,-26,11,28,
--42,-54,-23,-2,-15,
-31,30,8,-39,-66,
--39,-36,31,-28,-40,
--46,35,40,22,24,
-33,48,23,-34,14,
-40,32,17,27,-3,
-25,26,-13,-61,-17,
-11,4,31,60,-6,
--26,-41,-64,13,16,
--26,54,31,-11,-23,
--9,-11,-34,-71,-21,
--34,-35,55,50,29,
--22,-27,-50,-38,57,
-33,42,57,48,26,
-11,0,-49,-31,26,
--4,-14,5,78,37,
-17,0,-49,-12,-23,
-26,14,2,2,-43,
--17,-12,10,-8,-4,
-8,18,12,-6,20,
--12,-6,-13,-25,34,
-15,40,49,7,8,
-13,20,20,-19,-22,
--2,-8,2,51,-51};
-
-const signed char cdbk_nb_low2[320]={
--6,53,-21,-24,4,
-26,17,-4,-37,25,
-17,-36,-13,31,3,
--6,27,15,-10,31,
-28,26,-10,-10,-40,
-16,-7,15,13,41,
--9,0,-4,50,-6,
--7,14,38,22,0,
--48,2,1,-13,-19,
-32,-3,-60,11,-17,
--1,-24,-34,-1,35,
--5,-27,28,44,13,
-25,15,42,-11,15,
-51,35,-36,20,8,
--4,-12,-29,19,-47,
-49,-15,-4,16,-29,
--39,14,-30,4,25,
--9,-5,-51,-14,-3,
--40,-32,38,5,-9,
--8,-4,-1,-22,71,
--3,14,26,-18,-22,
-24,-41,-25,-24,6,
-23,19,-10,39,-26,
--27,65,45,2,-7,
--26,-8,22,-12,16,
-15,16,-35,-5,33,
--21,-8,0,23,33,
-34,6,21,36,6,
--7,-22,8,-37,-14,
-31,38,11,-4,-3,
--39,-32,-8,32,-23,
--6,-12,16,20,-28,
--4,23,13,-52,-1,
-22,6,-33,-40,-6,
-4,-62,13,5,-26,
-35,39,11,2,57,
--11,9,-20,-28,-33,
-52,-5,-6,-2,22,
--14,-16,-48,35,1,
--58,20,13,33,-1,
--74,56,-18,-22,-31,
-12,6,-14,4,-2,
--9,-47,10,-3,29,
--17,-5,61,14,47,
--12,2,72,-39,-17,
-92,64,-53,-51,-15,
--30,-38,-41,-29,-28,
-27,9,36,9,-35,
--42,81,-21,20,25,
--16,-5,-17,-35,21,
-15,-28,48,2,-2,
-9,-19,29,-40,30,
--18,-18,18,-16,-57,
-15,-20,-12,-15,-37,
--15,33,-39,21,-22,
--13,35,11,13,-38,
--63,29,23,-27,32,
-18,3,-26,42,33,
--64,-66,-17,16,56,
-2,36,3,31,21,
--41,-39,8,-57,14,
-37,-2,19,-36,-19,
--23,-29,-16,1,-3,
--8,-10,31,64,-65};
-
-const signed char cdbk_nb_high1[320]={
--26,-8,29,21,4,
-19,-39,33,-7,-36,
-56,54,48,40,29,
--4,-24,-42,-66,-43,
--60,19,-2,37,41,
--10,-37,-60,-64,18,
--22,77,73,40,25,
-4,19,-19,-66,-2,
-11,5,21,14,26,
--25,-86,-4,18,1,
-26,-37,10,37,-1,
-24,-12,-59,-11,20,
--6,34,-16,-16,42,
-19,-28,-51,53,32,
-4,10,62,21,-12,
--34,27,4,-48,-48,
--50,-49,31,-7,-21,
--42,-25,-4,-43,-22,
-59,2,27,12,-9,
--6,-16,-8,-32,-58,
--16,-29,-5,41,23,
--30,-33,-46,-13,-10,
--38,52,52,1,-17,
--9,10,26,-25,-6,
-33,-20,53,55,25,
--32,-5,-42,23,21,
-66,5,-28,20,9,
-75,29,-7,-42,-39,
-15,3,-23,21,6,
-11,1,-29,14,63,
-10,54,26,-24,-51,
--49,7,-23,-51,15,
--66,1,60,25,10,
-0,-30,-4,-15,17,
-19,59,40,4,-5,
-33,6,-22,-58,-70,
--5,23,-6,60,44,
--29,-16,-47,-29,52,
--19,50,28,16,35,
-31,36,0,-21,6,
-21,27,22,42,7,
--66,-40,-8,7,19,
-46,0,-4,60,36,
-45,-7,-29,-6,-32,
--39,2,6,-9,33,
-20,-51,-34,18,-6,
-19,6,11,5,-19,
--29,-2,42,-11,-45,
--21,-55,57,37,2,
--14,-67,-16,-27,-38,
-69,48,19,2,-17,
-20,-20,-16,-34,-17,
--25,-61,10,73,45,
-16,-40,-64,-17,-29,
--22,56,17,-39,8,
--11,8,-25,-18,-13,
--19,8,54,57,36,
--17,-26,-4,6,-21,
-40,42,-4,20,31,
-53,10,-34,-53,31,
--17,35,0,15,-6,
--20,-63,-73,22,25,
-29,17,8,-29,-39,
--69,18,15,-15,-5};
-
-const signed char cdbk_nb_high2[320]={
-11,47,16,-9,-46,
--32,26,-64,34,-5,
-38,-7,47,20,2,
--73,-99,-3,-45,20,
-70,-52,15,-6,-7,
--82,31,21,47,51,
-39,-3,9,0,-41,
--7,-15,-54,2,0,
-27,-31,9,-45,-22,
--38,-24,-24,8,-33,
-23,5,50,-36,-17,
--18,-51,-2,13,19,
-43,12,-15,-12,61,
-38,38,7,13,0,
-6,-1,3,62,9,
-27,22,-33,38,-35,
--9,30,-43,-9,-32,
--1,4,-4,1,-5,
--11,-8,38,31,11,
--10,-42,-21,-37,1,
-43,15,-13,-35,-19,
--18,15,23,-26,59,
-1,-21,53,8,-41,
--50,-14,-28,4,21,
-25,-28,-40,5,-40,
--41,4,51,-33,-8,
--8,1,17,-60,12,
-25,-41,17,34,43,
-19,45,7,-37,24,
--15,56,-2,35,-10,
-48,4,-47,-2,5,
--5,-54,5,-3,-33,
--10,30,-2,-44,-24,
--38,9,-9,42,4,
-6,-56,44,-16,9,
--40,-26,18,-20,10,
-28,-41,-21,-4,13,
--18,32,-30,-3,37,
-15,22,28,50,-40,
-3,-29,-64,7,51,
--19,-11,17,-27,-40,
--64,24,-12,-7,-27,
-3,37,48,-1,2,
--9,-38,-34,46,1,
-27,-6,19,-13,26,
-10,34,20,25,40,
-50,-6,-7,30,9,
--24,0,-23,71,-61,
-22,58,-34,-4,2,
--49,-33,25,30,-8,
--6,-16,77,2,38,
--8,-35,-6,-30,56,
-78,31,33,-20,13,
--39,20,22,4,21,
--8,4,-6,10,-83,
--41,9,-25,-43,15,
--7,-12,-34,-39,-37,
--33,19,30,16,-33,
-42,-25,25,-68,44,
--15,-11,-4,23,50,
-14,4,-39,-43,20,
--30,60,9,-20,7,
-16,19,-33,37,29,
-16,-35,7,38,-27};
diff --git a/libspeexdsp/ltp.c b/libspeexdsp/ltp.c
deleted file mode 100644 (file)
index f20bca5..0000000
+++ /dev/null
@@ -1,851 +0,0 @@
-/* Copyright (C) 2002-2006 Jean-Marc Valin 
-   File: ltp.c
-   Long-Term Prediction functions
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-#include "ltp.h"
-#include "stack_alloc.h"
-#include "filters.h"
-#include "../include/speex/speex_bits.h"
-#include "math_approx.h"
-#include "os_support.h"
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-
-#ifdef _USE_SSE
-#include "ltp_sse.h"
-#elif defined (ARM4_ASM) || defined(ARM5E_ASM)
-#include "ltp_arm4.h"
-#elif defined (BFIN_ASM)
-#include "ltp_bfin.h"
-#endif
-
-#ifndef OVERRIDE_INNER_PROD
-spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len)
-{
-   spx_word32_t sum=0;
-   len >>= 2;
-   while(len--)
-   {
-      spx_word32_t part=0;
-      part = MAC16_16(part,*x++,*y++);
-      part = MAC16_16(part,*x++,*y++);
-      part = MAC16_16(part,*x++,*y++);
-      part = MAC16_16(part,*x++,*y++);
-      /* HINT: If you had a 40-bit accumulator, you could shift only at the end */
-      sum = ADD32(sum,SHR32(part,6));
-   }
-   return sum;
-}
-#endif
-
-#ifndef DISABLE_ENCODER
-
-#ifndef OVERRIDE_PITCH_XCORR
-#if 0 /* HINT: Enable this for machines with enough registers (i.e. not x86) */
-static void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack)
-{
-   int i,j;
-   for (i=0;i<nb_pitch;i+=4)
-   {
-      /* Compute correlation*/
-      /*corr[nb_pitch-1-i]=inner_prod(x, _y+i, len);*/
-      spx_word32_t sum1=0;
-      spx_word32_t sum2=0;
-      spx_word32_t sum3=0;
-      spx_word32_t sum4=0;
-      const spx_word16_t *y = _y+i;
-      const spx_word16_t *x = _x;
-      spx_word16_t y0, y1, y2, y3;
-      /*y0=y[0];y1=y[1];y2=y[2];y3=y[3];*/
-      y0=*y++;
-      y1=*y++;
-      y2=*y++;
-      y3=*y++;
-      for (j=0;j<len;j+=4)
-      {
-         spx_word32_t part1;
-         spx_word32_t part2;
-         spx_word32_t part3;
-         spx_word32_t part4;
-         part1 = MULT16_16(*x,y0);
-         part2 = MULT16_16(*x,y1);
-         part3 = MULT16_16(*x,y2);
-         part4 = MULT16_16(*x,y3);
-         x++;
-         y0=*y++;
-         part1 = MAC16_16(part1,*x,y1);
-         part2 = MAC16_16(part2,*x,y2);
-         part3 = MAC16_16(part3,*x,y3);
-         part4 = MAC16_16(part4,*x,y0);
-         x++;
-         y1=*y++;
-         part1 = MAC16_16(part1,*x,y2);
-         part2 = MAC16_16(part2,*x,y3);
-         part3 = MAC16_16(part3,*x,y0);
-         part4 = MAC16_16(part4,*x,y1);
-         x++;
-         y2=*y++;
-         part1 = MAC16_16(part1,*x,y3);
-         part2 = MAC16_16(part2,*x,y0);
-         part3 = MAC16_16(part3,*x,y1);
-         part4 = MAC16_16(part4,*x,y2);
-         x++;
-         y3=*y++;
-         
-         sum1 = ADD32(sum1,SHR32(part1,6));
-         sum2 = ADD32(sum2,SHR32(part2,6));
-         sum3 = ADD32(sum3,SHR32(part3,6));
-         sum4 = ADD32(sum4,SHR32(part4,6));
-      }
-      corr[nb_pitch-1-i]=sum1;
-      corr[nb_pitch-2-i]=sum2;
-      corr[nb_pitch-3-i]=sum3;
-      corr[nb_pitch-4-i]=sum4;
-   }
-
-}
-#else
-static void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack)
-{
-   int i;
-   for (i=0;i<nb_pitch;i++)
-   {
-      /* Compute correlation*/
-      corr[nb_pitch-1-i]=inner_prod(_x, _y+i, len);
-   }
-
-}
-#endif
-#endif
-
-#ifndef OVERRIDE_COMPUTE_PITCH_ERROR
-static inline spx_word32_t compute_pitch_error(spx_word16_t *C, spx_word16_t *g, spx_word16_t pitch_control)
-{
-   spx_word32_t sum = 0;
-   sum = ADD32(sum,MULT16_16(MULT16_16_16(g[0],pitch_control),C[0]));
-   sum = ADD32(sum,MULT16_16(MULT16_16_16(g[1],pitch_control),C[1]));
-   sum = ADD32(sum,MULT16_16(MULT16_16_16(g[2],pitch_control),C[2]));
-   sum = SUB32(sum,MULT16_16(MULT16_16_16(g[0],g[1]),C[3]));
-   sum = SUB32(sum,MULT16_16(MULT16_16_16(g[2],g[1]),C[4]));
-   sum = SUB32(sum,MULT16_16(MULT16_16_16(g[2],g[0]),C[5]));
-   sum = SUB32(sum,MULT16_16(MULT16_16_16(g[0],g[0]),C[6]));
-   sum = SUB32(sum,MULT16_16(MULT16_16_16(g[1],g[1]),C[7]));
-   sum = SUB32(sum,MULT16_16(MULT16_16_16(g[2],g[2]),C[8]));
-   return sum;
-}
-#endif
-
-#ifndef OVERRIDE_OPEN_LOOP_NBEST_PITCH
-void open_loop_nbest_pitch(spx_word16_t *sw, int start, int end, int len, int *pitch, spx_word16_t *gain, int N, char *stack)
-{
-   int i,j,k;
-   VARDECL(spx_word32_t *best_score);
-   VARDECL(spx_word32_t *best_ener);
-   spx_word32_t e0;
-   VARDECL(spx_word32_t *corr);
-#ifdef FIXED_POINT
-   /* In fixed-point, we need only one (temporary) array of 32-bit values and two (corr16, ener16) 
-      arrays for (normalized) 16-bit values */
-   VARDECL(spx_word16_t *corr16);
-   VARDECL(spx_word16_t *ener16);
-   spx_word32_t *energy;
-   int cshift=0, eshift=0;
-   int scaledown = 0;
-   ALLOC(corr16, end-start+1, spx_word16_t);
-   ALLOC(ener16, end-start+1, spx_word16_t);
-   ALLOC(corr, end-start+1, spx_word32_t);
-   energy = corr;
-#else
-   /* In floating-point, we need to float arrays and no normalized copies */
-   VARDECL(spx_word32_t *energy);
-   spx_word16_t *corr16;
-   spx_word16_t *ener16;
-   ALLOC(energy, end-start+2, spx_word32_t);
-   ALLOC(corr, end-start+1, spx_word32_t);
-   corr16 = corr;
-   ener16 = energy;
-#endif
-   
-   ALLOC(best_score, N, spx_word32_t);
-   ALLOC(best_ener, N, spx_word32_t);
-   for (i=0;i<N;i++)
-   {
-        best_score[i]=-1;
-        best_ener[i]=0;
-        pitch[i]=start;
-   }
-   
-#ifdef FIXED_POINT
-   for (i=-end;i<len;i++)
-   {
-      if (ABS16(sw[i])>16383)
-      {
-         scaledown=1;
-         break;
-      }
-   }
-   /* If the weighted input is close to saturation, then we scale it down */
-   if (scaledown)
-   {
-      for (i=-end;i<len;i++)
-      {
-         sw[i]=SHR16(sw[i],1);
-      }
-   }      
-#endif
-   energy[0]=inner_prod(sw-start, sw-start, len);
-   e0=inner_prod(sw, sw, len);
-   for (i=start;i<end;i++)
-   {
-      /* Update energy for next pitch*/
-      energy[i-start+1] = SUB32(ADD32(energy[i-start],SHR32(MULT16_16(sw[-i-1],sw[-i-1]),6)), SHR32(MULT16_16(sw[-i+len-1],sw[-i+len-1]),6));
-      if (energy[i-start+1] < 0)
-         energy[i-start+1] = 0;
-   }
-   
-#ifdef FIXED_POINT
-   eshift = normalize16(energy, ener16, 32766, end-start+1);
-#endif
-   
-   /* In fixed-point, this actually overrites the energy array (aliased to corr) */
-   pitch_xcorr(sw, sw-end, corr, len, end-start+1, stack);
-   
-#ifdef FIXED_POINT
-   /* Normalize to 180 so we can square it and it still fits in 16 bits */
-   cshift = normalize16(corr, corr16, 180, end-start+1);
-   /* If we scaled weighted input down, we need to scale it up again (OK, so we've just lost the LSB, who cares?) */
-   if (scaledown)
-   {
-      for (i=-end;i<len;i++)
-      {
-         sw[i]=SHL16(sw[i],1);
-      }
-   }      
-#endif
-
-   /* Search for the best pitch prediction gain */
-   for (i=start;i<=end;i++)
-   {
-      spx_word16_t tmp = MULT16_16_16(corr16[i-start],corr16[i-start]);
-      /* Instead of dividing the tmp by the energy, we multiply on the other side */
-      if (MULT16_16(tmp,best_ener[N-1])>MULT16_16(best_score[N-1],ADD16(1,ener16[i-start])))
-      {
-         /* We can safely put it last and then check */
-         best_score[N-1]=tmp;
-         best_ener[N-1]=ener16[i-start]+1;
-         pitch[N-1]=i;
-         /* Check if it comes in front of others */
-         for (j=0;j<N-1;j++)
-         {
-            if (MULT16_16(tmp,best_ener[j])>MULT16_16(best_score[j],ADD16(1,ener16[i-start])))
-            {
-               for (k=N-1;k>j;k--)
-               {
-                  best_score[k]=best_score[k-1];
-                  best_ener[k]=best_ener[k-1];
-                  pitch[k]=pitch[k-1];
-               }
-               best_score[j]=tmp;
-               best_ener[j]=ener16[i-start]+1;
-               pitch[j]=i;
-               break;
-            }
-         }
-      }
-   }
-   
-   /* Compute open-loop gain if necessary */
-   if (gain)
-   {
-      for (j=0;j<N;j++)
-      {
-         spx_word16_t g;
-         i=pitch[j];
-         g = DIV32(SHL32(EXTEND32(corr16[i-start]),cshift), 10+SHR32(MULT16_16(spx_sqrt(e0),spx_sqrt(SHL32(EXTEND32(ener16[i-start]),eshift))),6));
-         /* FIXME: g = max(g,corr/energy) */
-         if (g<0)
-            g = 0;
-         gain[j]=g;
-      }
-   }
-
-
-}
-#endif
-
-#ifndef OVERRIDE_PITCH_GAIN_SEARCH_3TAP_VQ
-static int pitch_gain_search_3tap_vq(
-  const signed char *gain_cdbk,
-  int                gain_cdbk_size,
-  spx_word16_t      *C16,
-  spx_word16_t       max_gain
-)
-{
-  const signed char *ptr=gain_cdbk;
-  int                best_cdbk=0;
-  spx_word32_t       best_sum=-VERY_LARGE32;
-  spx_word32_t       sum=0;
-  spx_word16_t       g[3];
-  spx_word16_t       pitch_control=64;
-  spx_word16_t       gain_sum;
-  int                i;
-
-  for (i=0;i<gain_cdbk_size;i++) {
-         
-    ptr = gain_cdbk+4*i;
-    g[0]=ADD16((spx_word16_t)ptr[0],32);
-    g[1]=ADD16((spx_word16_t)ptr[1],32);
-    g[2]=ADD16((spx_word16_t)ptr[2],32);
-    gain_sum = (spx_word16_t)ptr[3];
-         
-    sum = compute_pitch_error(C16, g, pitch_control);
-         
-    if (sum>best_sum && gain_sum<=max_gain) {
-      best_sum=sum;
-      best_cdbk=i;
-    }
-  }
-
-  return best_cdbk;
-}
-#endif
-
-/** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
-static spx_word32_t pitch_gain_search_3tap(
-const spx_word16_t target[],       /* Target vector */
-const spx_coef_t ak[],          /* LPCs for this subframe */
-const spx_coef_t awk1[],        /* Weighted LPCs #1 for this subframe */
-const spx_coef_t awk2[],        /* Weighted LPCs #2 for this subframe */
-spx_sig_t exc[],                /* Excitation */
-const signed char *gain_cdbk,
-int gain_cdbk_size,
-int   pitch,                    /* Pitch value */
-int   p,                        /* Number of LPC coeffs */
-int   nsf,                      /* Number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-const spx_word16_t *exc2,
-const spx_word16_t *r,
-spx_word16_t *new_target,
-int  *cdbk_index,
-int plc_tuning,
-spx_word32_t cumul_gain,
-int scaledown
-)
-{
-   int i,j;
-   VARDECL(spx_word16_t *tmp1);
-   VARDECL(spx_word16_t *e);
-   spx_word16_t *x[3];
-   spx_word32_t corr[3];
-   spx_word32_t A[3][3];
-   spx_word16_t gain[3];
-   spx_word32_t err;
-   spx_word16_t max_gain=128;
-   int          best_cdbk=0;
-
-   ALLOC(tmp1, 3*nsf, spx_word16_t);
-   ALLOC(e, nsf, spx_word16_t);
-
-   if (cumul_gain > 262144)
-      max_gain = 31;
-   
-   x[0]=tmp1;
-   x[1]=tmp1+nsf;
-   x[2]=tmp1+2*nsf;
-   
-   for (j=0;j<nsf;j++)
-      new_target[j] = target[j];
-
-   {
-      int bound;
-      VARDECL(spx_mem_t *mm);
-      int pp=pitch-1;
-      ALLOC(mm, p, spx_mem_t);
-      bound = nsf;
-      if (nsf-pp>0)
-         bound = pp;
-      for (j=0;j<bound;j++)
-         e[j]=exc2[j-pp];
-      bound = nsf;
-      if (nsf-pp-pitch>0)
-         bound = pp+pitch;
-      for (;j<bound;j++)
-         e[j]=exc2[j-pp-pitch];
-      for (;j<nsf;j++)
-         e[j]=0;
-#ifdef FIXED_POINT
-      /* Scale target and excitation down if needed (avoiding overflow) */
-      if (scaledown)
-      {
-         for (j=0;j<nsf;j++)
-            e[j] = SHR16(e[j],1);
-         for (j=0;j<nsf;j++)
-            new_target[j] = SHR16(new_target[j],1);
-      }
-#endif
-      for (j=0;j<p;j++)
-         mm[j] = 0;
-      iir_mem16(e, ak, e, nsf, p, mm, stack);
-      for (j=0;j<p;j++)
-         mm[j] = 0;
-      filter10(e, awk1, awk2, e, nsf, mm, stack);
-      for (j=0;j<nsf;j++)
-         x[2][j] = e[j];
-   }
-   for (i=1;i>=0;i--)
-   {
-      spx_word16_t e0=exc2[-pitch-1+i];
-#ifdef FIXED_POINT
-      /* Scale excitation down if needed (avoiding overflow) */
-      if (scaledown)
-         e0 = SHR16(e0,1);
-#endif
-      x[i][0]=MULT16_16_Q14(r[0], e0);
-      for (j=0;j<nsf-1;j++)
-         x[i][j+1]=ADD32(x[i+1][j],MULT16_16_P14(r[j+1], e0));
-   }
-
-   for (i=0;i<3;i++)
-      corr[i]=inner_prod(x[i],new_target,nsf);
-   for (i=0;i<3;i++)
-      for (j=0;j<=i;j++)
-         A[i][j]=A[j][i]=inner_prod(x[i],x[j],nsf);
-
-   {
-      spx_word32_t C[9];
-#ifdef FIXED_POINT
-      spx_word16_t C16[9];
-#else
-      spx_word16_t *C16=C;
-#endif      
-      C[0]=corr[2];
-      C[1]=corr[1];
-      C[2]=corr[0];
-      C[3]=A[1][2];
-      C[4]=A[0][1];
-      C[5]=A[0][2];      
-      C[6]=A[2][2];
-      C[7]=A[1][1];
-      C[8]=A[0][0];
-      
-      /*plc_tuning *= 2;*/
-      if (plc_tuning<2)
-         plc_tuning=2;
-      if (plc_tuning>30)
-         plc_tuning=30;
-#ifdef FIXED_POINT
-      C[0] = SHL32(C[0],1);
-      C[1] = SHL32(C[1],1);
-      C[2] = SHL32(C[2],1);
-      C[3] = SHL32(C[3],1);
-      C[4] = SHL32(C[4],1);
-      C[5] = SHL32(C[5],1);
-      C[6] = MAC16_32_Q15(C[6],MULT16_16_16(plc_tuning,655),C[6]);
-      C[7] = MAC16_32_Q15(C[7],MULT16_16_16(plc_tuning,655),C[7]);
-      C[8] = MAC16_32_Q15(C[8],MULT16_16_16(plc_tuning,655),C[8]);
-      normalize16(C, C16, 32767, 9);
-#else
-      C[6]*=.5*(1+.02*plc_tuning);
-      C[7]*=.5*(1+.02*plc_tuning);
-      C[8]*=.5*(1+.02*plc_tuning);
-#endif
-
-      best_cdbk = pitch_gain_search_3tap_vq(gain_cdbk, gain_cdbk_size, C16, max_gain);
-
-#ifdef FIXED_POINT
-      gain[0] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*4]);
-      gain[1] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*4+1]);
-      gain[2] = ADD16(32,(spx_word16_t)gain_cdbk[best_cdbk*4+2]);
-      /*printf ("%d %d %d %d\n",gain[0],gain[1],gain[2], best_cdbk);*/
-#else
-      gain[0] = 0.015625*gain_cdbk[best_cdbk*4]  + .5;
-      gain[1] = 0.015625*gain_cdbk[best_cdbk*4+1]+ .5;
-      gain[2] = 0.015625*gain_cdbk[best_cdbk*4+2]+ .5;
-#endif
-      *cdbk_index=best_cdbk;
-   }
-
-   SPEEX_MEMSET(exc, 0, nsf);
-   for (i=0;i<3;i++)
-   {
-      int j;
-      int tmp1, tmp3;
-      int pp=pitch+1-i;
-      tmp1=nsf;
-      if (tmp1>pp)
-         tmp1=pp;
-      for (j=0;j<tmp1;j++)
-         exc[j]=MAC16_16(exc[j],SHL16(gain[2-i],7),exc2[j-pp]);
-      tmp3=nsf;
-      if (tmp3>pp+pitch)
-         tmp3=pp+pitch;
-      for (j=tmp1;j<tmp3;j++)
-         exc[j]=MAC16_16(exc[j],SHL16(gain[2-i],7),exc2[j-pp-pitch]);
-   }
-   for (i=0;i<nsf;i++)
-   {
-      spx_word32_t tmp = ADD32(ADD32(MULT16_16(gain[0],x[2][i]),MULT16_16(gain[1],x[1][i])),
-                            MULT16_16(gain[2],x[0][i]));
-      new_target[i] = SUB16(new_target[i], EXTRACT16(PSHR32(tmp,6)));
-   }
-   err = inner_prod(new_target, new_target, nsf);
-
-   return err;
-}
-
-/** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
-int pitch_search_3tap(
-spx_word16_t target[],                 /* Target vector */
-spx_word16_t *sw,
-spx_coef_t ak[],                     /* LPCs for this subframe */
-spx_coef_t awk1[],                   /* Weighted LPCs #1 for this subframe */
-spx_coef_t awk2[],                   /* Weighted LPCs #2 for this subframe */
-spx_sig_t exc[],                    /* Excitation */
-const void *par,
-int   start,                    /* Smallest pitch value allowed */
-int   end,                      /* Largest pitch value allowed */
-spx_word16_t pitch_coef,               /* Voicing (pitch) coefficient */
-int   p,                        /* Number of LPC coeffs */
-int   nsf,                      /* Number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-spx_word16_t *exc2,
-spx_word16_t *r,
-int complexity,
-int cdbk_offset,
-int plc_tuning,
-spx_word32_t *cumul_gain
-)
-{
-   int i;
-   int cdbk_index, pitch=0, best_gain_index=0;
-   VARDECL(spx_sig_t *best_exc);
-   VARDECL(spx_word16_t *new_target);
-   VARDECL(spx_word16_t *best_target);
-   int best_pitch=0;
-   spx_word32_t err, best_err=-1;
-   int N;
-   const ltp_params *params;
-   const signed char *gain_cdbk;
-   int   gain_cdbk_size;
-   int scaledown=0;
-         
-   VARDECL(int *nbest);
-   
-   params = (const ltp_params*) par;
-   gain_cdbk_size = 1<<params->gain_bits;
-   gain_cdbk = params->gain_cdbk + 4*gain_cdbk_size*cdbk_offset;
-   
-   N=complexity;
-   if (N>10)
-      N=10;
-   if (N<1)
-      N=1;
-
-   ALLOC(nbest, N, int);
-   params = (const ltp_params*) par;
-
-   if (end<start)
-   {
-      speex_bits_pack(bits, 0, params->pitch_bits);
-      speex_bits_pack(bits, 0, params->gain_bits);
-      SPEEX_MEMSET(exc, 0, nsf);
-      return start;
-   }
-   
-#ifdef FIXED_POINT
-   /* Check if we need to scale everything down in the pitch search to avoid overflows */
-   for (i=0;i<nsf;i++)
-   {
-      if (ABS16(target[i])>16383)
-      {
-         scaledown=1;
-         break;
-      }
-   }
-   for (i=-end;i<0;i++)
-   {
-      if (ABS16(exc2[i])>16383)
-      {
-         scaledown=1;
-         break;
-      }
-   }
-#endif
-   if (N>end-start+1)
-      N=end-start+1;
-   if (end != start)
-      open_loop_nbest_pitch(sw, start, end, nsf, nbest, NULL, N, stack);
-   else
-      nbest[0] = start;
-   
-   ALLOC(best_exc, nsf, spx_sig_t);
-   ALLOC(new_target, nsf, spx_word16_t);
-   ALLOC(best_target, nsf, spx_word16_t);
-   
-   for (i=0;i<N;i++)
-   {
-      pitch=nbest[i];
-      SPEEX_MEMSET(exc, 0, nsf);
-      err=pitch_gain_search_3tap(target, ak, awk1, awk2, exc, gain_cdbk, gain_cdbk_size, pitch, p, nsf,
-                                 bits, stack, exc2, r, new_target, &cdbk_index, plc_tuning, *cumul_gain, scaledown);
-      if (err<best_err || best_err<0)
-      {
-         SPEEX_COPY(best_exc, exc, nsf);
-         SPEEX_COPY(best_target, new_target, nsf);
-         best_err=err;
-         best_pitch=pitch;
-         best_gain_index=cdbk_index;
-      }
-   }
-   /*printf ("pitch: %d %d\n", best_pitch, best_gain_index);*/
-   speex_bits_pack(bits, best_pitch-start, params->pitch_bits);
-   speex_bits_pack(bits, best_gain_index, params->gain_bits);
-#ifdef FIXED_POINT
-   *cumul_gain = MULT16_32_Q13(SHL16(params->gain_cdbk[4*best_gain_index+3],8), MAX32(1024,*cumul_gain));
-#else
-   *cumul_gain = 0.03125*MAX32(1024,*cumul_gain)*params->gain_cdbk[4*best_gain_index+3];
-#endif
-   /*printf ("%f\n", cumul_gain);*/
-   /*printf ("encode pitch: %d %d\n", best_pitch, best_gain_index);*/
-   SPEEX_COPY(exc, best_exc, nsf);
-   SPEEX_COPY(target, best_target, nsf);
-#ifdef FIXED_POINT
-   /* Scale target back up if needed */
-   if (scaledown)
-   {
-      for (i=0;i<nsf;i++)
-         target[i]=SHL16(target[i],1);
-   }
-#endif
-   return pitch;
-}
-#endif /* DISABLE_ENCODER */
-
-#ifndef DISABLE_DECODER
-void pitch_unquant_3tap(
-spx_word16_t exc[],             /* Input excitation */
-spx_word32_t exc_out[],         /* Output excitation */
-int   start,                    /* Smallest pitch value allowed */
-int   end,                      /* Largest pitch value allowed */
-spx_word16_t pitch_coef,        /* Voicing (pitch) coefficient */
-const void *par,
-int   nsf,                      /* Number of samples in subframe */
-int *pitch_val,
-spx_word16_t *gain_val,
-SpeexBits *bits,
-char *stack,
-int count_lost,
-int subframe_offset,
-spx_word16_t last_pitch_gain,
-int cdbk_offset
-)
-{
-   int i;
-   int pitch;
-   int gain_index;
-   spx_word16_t gain[3];
-   const signed char *gain_cdbk;
-   int gain_cdbk_size;
-   const ltp_params *params;
-
-   params = (const ltp_params*) par;
-   gain_cdbk_size = 1<<params->gain_bits;
-   gain_cdbk = params->gain_cdbk + 4*gain_cdbk_size*cdbk_offset;
-
-   pitch = speex_bits_unpack_unsigned(bits, params->pitch_bits);
-   pitch += start;
-   gain_index = speex_bits_unpack_unsigned(bits, params->gain_bits);
-   /*printf ("decode pitch: %d %d\n", pitch, gain_index);*/
-#ifdef FIXED_POINT
-   gain[0] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*4]);
-   gain[1] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*4+1]);
-   gain[2] = ADD16(32,(spx_word16_t)gain_cdbk[gain_index*4+2]);
-#else
-   gain[0] = 0.015625*gain_cdbk[gain_index*4]+.5;
-   gain[1] = 0.015625*gain_cdbk[gain_index*4+1]+.5;
-   gain[2] = 0.015625*gain_cdbk[gain_index*4+2]+.5;
-#endif
-
-   if (count_lost && pitch > subframe_offset)
-   {
-      spx_word16_t gain_sum;
-      if (1) {
-#ifdef FIXED_POINT
-         spx_word16_t tmp = count_lost < 4 ? last_pitch_gain : SHR16(last_pitch_gain,1);
-         if (tmp>62)
-            tmp=62;
-#else
-         spx_word16_t tmp = count_lost < 4 ? last_pitch_gain : 0.5 * last_pitch_gain;
-         if (tmp>.95)
-            tmp=.95;
-#endif
-         gain_sum = gain_3tap_to_1tap(gain);
-
-         if (gain_sum > tmp)
-         {
-            spx_word16_t fact = DIV32_16(SHL32(EXTEND32(tmp),14),gain_sum);
-            for (i=0;i<3;i++)
-               gain[i]=MULT16_16_Q14(fact,gain[i]);
-         }
-
-      }
-
-   }
-
-   *pitch_val = pitch;
-   gain_val[0]=gain[0];
-   gain_val[1]=gain[1];
-   gain_val[2]=gain[2];
-   gain[0] = SHL16(gain[0],7);
-   gain[1] = SHL16(gain[1],7);
-   gain[2] = SHL16(gain[2],7);
-   SPEEX_MEMSET(exc_out, 0, nsf);
-   for (i=0;i<3;i++)
-   {
-      int j;
-      int tmp1, tmp3;
-      int pp=pitch+1-i;
-      tmp1=nsf;
-      if (tmp1>pp)
-         tmp1=pp;
-      for (j=0;j<tmp1;j++)
-         exc_out[j]=MAC16_16(exc_out[j],gain[2-i],exc[j-pp]);
-      tmp3=nsf;
-      if (tmp3>pp+pitch)
-         tmp3=pp+pitch;
-      for (j=tmp1;j<tmp3;j++)
-         exc_out[j]=MAC16_16(exc_out[j],gain[2-i],exc[j-pp-pitch]);
-   }
-   /*for (i=0;i<nsf;i++)
-   exc[i]=PSHR32(exc32[i],13);*/
-}
-#endif /* DISABLE_DECODER */
-
-#ifndef DISABLE_ENCODER
-/** Forced pitch delay and gain */
-int forced_pitch_quant(
-spx_word16_t target[],                 /* Target vector */
-spx_word16_t *sw,
-spx_coef_t ak[],                     /* LPCs for this subframe */
-spx_coef_t awk1[],                   /* Weighted LPCs #1 for this subframe */
-spx_coef_t awk2[],                   /* Weighted LPCs #2 for this subframe */
-spx_sig_t exc[],                    /* Excitation */
-const void *par,
-int   start,                    /* Smallest pitch value allowed */
-int   end,                      /* Largest pitch value allowed */
-spx_word16_t pitch_coef,               /* Voicing (pitch) coefficient */
-int   p,                        /* Number of LPC coeffs */
-int   nsf,                      /* Number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-spx_word16_t *exc2,
-spx_word16_t *r,
-int complexity,
-int cdbk_offset,
-int plc_tuning,
-spx_word32_t *cumul_gain
-)
-{
-   int i;
-   VARDECL(spx_word16_t *res);
-   ALLOC(res, nsf, spx_word16_t);
-#ifdef FIXED_POINT
-   if (pitch_coef>63)
-      pitch_coef=63;
-#else
-   if (pitch_coef>.99)
-      pitch_coef=.99;
-#endif
-   for (i=0;i<nsf&&i<start;i++)
-   {
-      exc[i]=MULT16_16(SHL16(pitch_coef, 7),exc2[i-start]);
-   }
-   for (;i<nsf;i++)
-   {
-      exc[i]=MULT16_32_Q15(SHL16(pitch_coef, 9),exc[i-start]);
-   }
-   for (i=0;i<nsf;i++)
-      res[i] = EXTRACT16(PSHR32(exc[i], SIG_SHIFT-1));
-   syn_percep_zero16(res, ak, awk1, awk2, res, nsf, p, stack);
-   for (i=0;i<nsf;i++)
-      target[i]=EXTRACT16(SATURATE(SUB32(EXTEND32(target[i]),EXTEND32(res[i])),32700));
-   return start;
-}
-#endif /* DISABLE_ENCODER */
-
-#ifndef DISABLE_DECODER
-/** Unquantize forced pitch delay and gain */
-void forced_pitch_unquant(
-spx_word16_t exc[],             /* Input excitation */
-spx_word32_t exc_out[],         /* Output excitation */
-int   start,                    /* Smallest pitch value allowed */
-int   end,                      /* Largest pitch value allowed */
-spx_word16_t pitch_coef,        /* Voicing (pitch) coefficient */
-const void *par,
-int   nsf,                      /* Number of samples in subframe */
-int *pitch_val,
-spx_word16_t *gain_val,
-SpeexBits *bits,
-char *stack,
-int count_lost,
-int subframe_offset,
-spx_word16_t last_pitch_gain,
-int cdbk_offset
-)
-{
-   int i;
-#ifdef FIXED_POINT
-   if (pitch_coef>63)
-      pitch_coef=63;
-#else
-   if (pitch_coef>.99)
-      pitch_coef=.99;
-#endif
-   for (i=0;i<nsf;i++)
-   {
-      exc_out[i]=MULT16_16(exc[i-start],SHL16(pitch_coef,7));
-      exc[i] = EXTRACT16(PSHR32(exc_out[i],13));
-   }
-   *pitch_val = start;
-   gain_val[0]=gain_val[2]=0;
-   gain_val[1] = pitch_coef;
-}
-#endif /* DISABLE_DECODER */
diff --git a/libspeexdsp/ltp.h b/libspeexdsp/ltp.h
deleted file mode 100644 (file)
index 7218ffe..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin */
-/**
-   @file ltp.h
-   @brief Long-Term Prediction functions
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef LTP_H
-#define LTP_H
-
-#include "../include/speex/speex_bits.h"
-#include "arch.h"
-
-/** LTP parameters. */
-typedef struct {
-   const signed char *gain_cdbk;
-   int     gain_bits;
-   int     pitch_bits;
-} ltp_params;
-
-#ifdef FIXED_POINT
-#define gain_3tap_to_1tap(g) (ABS(g[1]) + (g[0]>0 ? g[0] : -SHR16(g[0],1)) + (g[2]>0 ? g[2] : -SHR16(g[2],1)))
-#else
-#define gain_3tap_to_1tap(g) (ABS(g[1]) + (g[0]>0 ? g[0] : -.5*g[0]) + (g[2]>0 ? g[2] : -.5*g[2]))
-#endif
-
-spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len);
-
-void open_loop_nbest_pitch(spx_word16_t *sw, int start, int end, int len, int *pitch, spx_word16_t *gain, int N, char *stack);
-
-
-/** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
-int pitch_search_3tap(
-spx_word16_t target[],                 /* Target vector */
-spx_word16_t *sw,
-spx_coef_t ak[],                     /* LPCs for this subframe */
-spx_coef_t awk1[],                   /* Weighted LPCs #1 for this subframe */
-spx_coef_t awk2[],                   /* Weighted LPCs #2 for this subframe */
-spx_sig_t exc[],                    /* Overlapping codebook */
-const void *par,
-int   start,                    /* Smallest pitch value allowed */
-int   end,                      /* Largest pitch value allowed */
-spx_word16_t pitch_coef,               /* Voicing (pitch) coefficient */
-int   p,                        /* Number of LPC coeffs */
-int   nsf,                      /* Number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-spx_word16_t *exc2,
-spx_word16_t *r,
-int   complexity,
-int   cdbk_offset,
-int plc_tuning,
-spx_word32_t *cumul_gain
-);
-
-/*Unquantize adaptive codebook and update pitch contribution*/
-void pitch_unquant_3tap(
-spx_word16_t exc[],             /* Input excitation */
-spx_word32_t exc_out[],         /* Output excitation */
-int   start,                    /* Smallest pitch value allowed */
-int   end,                      /* Largest pitch value allowed */
-spx_word16_t pitch_coef,        /* Voicing (pitch) coefficient */
-const void *par,
-int   nsf,                      /* Number of samples in subframe */
-int *pitch_val,
-spx_word16_t *gain_val,
-SpeexBits *bits,
-char *stack,
-int lost,
-int subframe_offset,
-spx_word16_t last_pitch_gain,
-int cdbk_offset
-);
-
-/** Forced pitch delay and gain */
-int forced_pitch_quant(
-spx_word16_t target[],                 /* Target vector */
-spx_word16_t *sw,
-spx_coef_t ak[],                     /* LPCs for this subframe */
-spx_coef_t awk1[],                   /* Weighted LPCs #1 for this subframe */
-spx_coef_t awk2[],                   /* Weighted LPCs #2 for this subframe */
-spx_sig_t exc[],                    /* Excitation */
-const void *par,
-int   start,                    /* Smallest pitch value allowed */
-int   end,                      /* Largest pitch value allowed */
-spx_word16_t pitch_coef,               /* Voicing (pitch) coefficient */
-int   p,                        /* Number of LPC coeffs */
-int   nsf,                      /* Number of samples in subframe */
-SpeexBits *bits,
-char *stack,
-spx_word16_t *exc2,
-spx_word16_t *r,
-int complexity,
-int cdbk_offset,
-int plc_tuning,
-spx_word32_t *cumul_gain
-);
-
-/** Unquantize forced pitch delay and gain */
-void forced_pitch_unquant(
-spx_word16_t exc[],             /* Input excitation */
-spx_word32_t exc_out[],         /* Output excitation */
-int   start,                    /* Smallest pitch value allowed */
-int   end,                      /* Largest pitch value allowed */
-spx_word16_t pitch_coef,        /* Voicing (pitch) coefficient */
-const void *par,
-int   nsf,                      /* Number of samples in subframe */
-int *pitch_val,
-spx_word16_t *gain_val,
-SpeexBits *bits,
-char *stack,
-int lost,
-int subframe_offset,
-spx_word16_t last_pitch_gain,
-int cdbk_offset
-);
-
-#endif /* LTP_H */
diff --git a/libspeexdsp/ltp_arm4.h b/libspeexdsp/ltp_arm4.h
deleted file mode 100644 (file)
index cdb94e6..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/* Copyright (C) 2004 Jean-Marc Valin */
-/**
-   @file ltp_arm4.h
-   @brief Long-Term Prediction functions (ARM4 version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#define OVERRIDE_INNER_PROD
-spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len)
-{
-   spx_word32_t sum1=0,sum2=0;
-   spx_word16_t *deadx, *deady;
-   int deadlen, dead1, dead2, dead3, dead4, dead5, dead6;
-   __asm__ __volatile__ (
-         "\tldrsh %5, [%0], #2 \n"
-         "\tldrsh %6, [%1], #2 \n"
-         ".inner_prod_loop%=:\n"
-         "\tsub %7, %7, %7\n"
-         "\tsub %10, %10, %10\n"
-
-         "\tldrsh %8, [%0], #2 \n"
-         "\tldrsh %9, [%1], #2 \n"
-         "\tmla %7, %5, %6, %7\n"
-         "\tldrsh %5, [%0], #2 \n"
-         "\tldrsh %6, [%1], #2 \n"
-         "\tmla %10, %8, %9, %10\n"
-         "\tldrsh %8, [%0], #2 \n"
-         "\tldrsh %9, [%1], #2 \n"
-         "\tmla %7, %5, %6, %7\n"
-         "\tldrsh %5, [%0], #2 \n"
-         "\tldrsh %6, [%1], #2 \n"
-         "\tmla %10, %8, %9, %10\n"
-
-         "\tldrsh %8, [%0], #2 \n"
-         "\tldrsh %9, [%1], #2 \n"
-         "\tmla %7, %5, %6, %7\n"
-         "\tldrsh %5, [%0], #2 \n"
-         "\tldrsh %6, [%1], #2 \n"
-         "\tmla %10, %8, %9, %10\n"
-         "\tldrsh %8, [%0], #2 \n"
-         "\tldrsh %9, [%1], #2 \n"
-         "\tmla %7, %5, %6, %7\n"
-         "\tldrsh %5, [%0], #2 \n"
-         "\tldrsh %6, [%1], #2 \n"
-         "\tmla %10, %8, %9, %10\n"
-
-         "\tsubs %4, %4, #1\n"
-         "\tadd %2, %2, %7, asr #5\n"
-         "\tadd %3, %3, %10, asr #5\n"
-         "\tbne .inner_prod_loop%=\n"
-   : "=r" (deadx), "=r" (deady), "+r" (sum1),  "+r" (sum2),
-     "=r" (deadlen), "=r" (dead1), "=r" (dead2), "=r" (dead3),
-     "=r" (dead4), "=r" (dead5), "=r" (dead6)
-   : "0" (x), "1" (y), "4" (len>>3)
-   : "cc"
-                        );
-   return (sum1+sum2)>>1;
-}
-
-#define OVERRIDE_PITCH_XCORR
-void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack)
-{
-   int i,j;
-   for (i=0;i<nb_pitch;i+=4)
-   {
-      /* Compute correlation*/
-      //corr[nb_pitch-1-i]=inner_prod(x, _y+i, len);
-      spx_word32_t sum1=0;
-      spx_word32_t sum2=0;
-      spx_word32_t sum3=0;
-      spx_word32_t sum4=0;
-      const spx_word16_t *y = _y+i;
-      const spx_word16_t *x = _x;
-      spx_word32_t y0, y1, y2, y3;
-      y0=*y++;
-      y1=*y++;
-      y2=*y++;
-      y3=*y++;
-      for (j=0;j<len;j+=4)
-      {
-         spx_word32_t part1, part2, part3, part4, x0;
-         spx_word32_t dead1;
-         __asm__ __volatile__ (
-#ifdef SHORTCUTS
-               "\tldrsh %10, [%8], #4 \n"
-               "\tmul %4, %10, %0 \n"
-               "\tldrsh %15, [%8], #4 \n"
-               "\tmul %5, %10, %1 \n"
-               "\tldrsh %0, [%9], #2 \n"
-               "\tmul %6, %10, %2 \n"
-               "\tldrsh %1, [%9], #2 \n"
-               "\tmul %7, %10, %3 \n"
-               
-               
-               "\tmla %4, %15, %2, %4 \n"
-               "\tldrsh %2, [%9], #2 \n"
-               "\tmla %5, %15, %3, %5 \n"
-               "\tldrsh %3, [%9], #2 \n"
-               "\tmla %6, %15, %0, %6 \n"
-               "\tmla %7, %15, %1, %7 \n"
-
-#else
-               "\tldrsh %10, [%8], #2 \n"
-               "\tmul %4, %10, %0 \n"
-               "\tmul %5, %10, %1 \n"
-               "\tmul %6, %10, %2 \n"
-               "\tmul %7, %10, %3 \n"
-
-               "\tldrsh %10, [%8], #2 \n"
-               "\tldrsh %0, [%9], #2 \n"
-               "\tmla %4, %10, %1, %4 \n"
-               "\tmla %5, %10, %2, %5 \n"
-               "\tmla %6, %10, %3, %6 \n"
-               "\tmla %7, %10, %0, %7 \n"
-
-               "\tldrsh %10, [%8], #2 \n"
-               "\tldrsh %1, [%9], #2 \n"
-               "\tmla %4, %10, %2, %4 \n"
-               "\tmla %5, %10, %3, %5 \n"
-               "\tmla %6, %10, %0, %6 \n"
-               "\tmla %7, %10, %1, %7 \n"
-
-               "\tldrsh %10, [%8], #2 \n"
-               "\tldrsh %2, [%9], #2 \n"
-               "\tmla %4, %10, %3, %4 \n"
-               "\tmla %5, %10, %0, %5 \n"
-               "\tmla %6, %10, %1, %6 \n"
-               "\tmla %7, %10, %2, %7 \n"
-
-               "\tldrsh %3, [%9], #2 \n"
-#endif
-
-               "\tldr %10, %11 \n"
-               "\tldr %15, %12 \n"
-               "\tadd %4, %10, %4, asr #6 \n"
-               "\tstr %4, %11 \n"
-               "\tldr %10, %13 \n"
-               "\tadd %5, %15, %5, asr #6 \n"
-               "\tstr %5, %12 \n"
-               "\tldr %15, %14 \n"
-               "\tadd %6, %10, %6, asr #6 \n"
-               "\tadd %7, %15, %7, asr #6 \n"
-               "\tstr %6, %13 \n"
-               "\tstr %7, %14 \n"
-
-            : "+r" (y0), "+r" (y1), "+r" (y2), "+r" (y3),
-         "=r" (part1),  "=r" (part2),  "=r" (part3),  "=r" (part4),
-              "+r" (x), "+r" (y), "=r" (x0), "+m" (sum1),
-              "+m" (sum2), "+m" (sum3), "+m" (sum4), "=r" (dead1)
-            :
-            : "cc", "memory"
-                              );
-      }
-      corr[nb_pitch-1-i]=sum1;
-      corr[nb_pitch-2-i]=sum2;
-      corr[nb_pitch-3-i]=sum3;
-      corr[nb_pitch-4-i]=sum4;
-   }
-
-}
diff --git a/libspeexdsp/ltp_bfin.h b/libspeexdsp/ltp_bfin.h
deleted file mode 100644 (file)
index b7edd37..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-/* Copyright (C) 2005 Analog Devices */
-/**
-   @file ltp_bfin.h
-   @author Jean-Marc Valin
-   @brief Long-Term Prediction functions (Blackfin version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "bfin.h"
-
-#define OVERRIDE_INNER_PROD
-spx_word32_t inner_prod(const spx_word16_t *x, const spx_word16_t *y, int len)
-{
-   spx_word32_t sum=0;
-   __asm__ __volatile__ (
-      "P0 = %3;\n\t"
-      "P1 = %1;\n\t"
-      "P2 = %2;\n\t"
-      "I0 = P1;\n\t"
-      "I1 = P2;\n\t"
-      "L0 = 0;\n\t"
-      "L1 = 0;\n\t"
-      "A0 = 0;\n\t"
-      "R0.L = W[I0++] || R1.L = W[I1++];\n\t"
-      "LOOP inner%= LC0 = P0;\n\t"
-      "LOOP_BEGIN inner%=;\n\t"
-         "A0 += R0.L*R1.L (IS) || R0.L = W[I0++] || R1.L = W[I1++];\n\t"
-      "LOOP_END inner%=;\n\t"
-      "A0 += R0.L*R1.L (IS);\n\t"
-      "A0 = A0 >>> 6;\n\t"
-      "R0 = A0;\n\t"
-      "%0 = R0;\n\t"
-   : "=m" (sum)
-   : "m" (x), "m" (y), "d" (len-1)
-   : "P0", "P1", "P2", "R0", "R1", "A0", "I0", "I1", "L0", "L1", "R3", "ASTAT" BFIN_HWLOOP0_REGS
-   );
-   return sum;
-}
-
-#define OVERRIDE_PITCH_XCORR
-void pitch_xcorr(const spx_word16_t *_x, const spx_word16_t *_y, spx_word32_t *corr, int len, int nb_pitch, char *stack)
-{
-   corr += nb_pitch - 1;
-   __asm__ __volatile__ (
-      "P2 = %0;\n\t"
-      "I0 = P2;\n\t" /* x in I0 */
-      "B0 = P2;\n\t" /* x in B0 */
-      "R0 = %3;\n\t" /* len in R0 */
-      "P3 = %3;\n\t"
-      "P3 += -2;\n\t" /* len in R0 */
-      "P4 = %4;\n\t" /* nb_pitch in R0 */
-      "R1 = R0 << 1;\n\t" /* number of bytes in x */
-      "L0 = R1;\n\t"
-      "P0 = %1;\n\t"
-
-      "P1 = %2;\n\t"
-      "B1 = P1;\n\t"
-      "L1 = 0;\n\t" /*Disable looping on I1*/
-
-      "r0 = [I0++];\n\t"
-      "LOOP pitch%= LC0 = P4 >> 1;\n\t"
-      "LOOP_BEGIN pitch%=;\n\t"
-         "I1 = P0;\n\t"
-         "A1 = A0 = 0;\n\t"
-         "R1 = [I1++];\n\t"
-         "LOOP inner_prod%= LC1 = P3 >> 1;\n\t"
-         "LOOP_BEGIN inner_prod%=;\n\t"
-            "A1 += R0.L*R1.H, A0 += R0.L*R1.L (IS) || R1.L = W[I1++];\n\t"
-            "A1 += R0.H*R1.L, A0 += R0.H*R1.H (IS) || R1.H = W[I1++] || R0 = [I0++];\n\t"
-         "LOOP_END inner_prod%=;\n\t"
-         "A1 += R0.L*R1.H, A0 += R0.L*R1.L (IS) || R1.L = W[I1++];\n\t"
-         "A1 += R0.H*R1.L, A0 += R0.H*R1.H (IS) || R0 = [I0++];\n\t"
-         "A0 = A0 >>> 6;\n\t"
-         "A1 = A1 >>> 6;\n\t"
-         "R2 = A0, R3 = A1;\n\t"
-         "[P1--] = r2;\n\t"
-         "[P1--] = r3;\n\t"
-         "P0 += 4;\n\t"
-      "LOOP_END pitch%=;\n\t"
-      "L0 = 0;\n\t"
-   : : "m" (_x), "m" (_y), "m" (corr), "m" (len), "m" (nb_pitch)
-   : "A0", "A1", "P0", "P1", "P2", "P3", "P4", "R0", "R1", "R2", "R3", "I0", "I1", "L0", "L1", "B0", "B1", "memory",
-     "ASTAT" BFIN_HWLOOP0_REGS BFIN_HWLOOP1_REGS
-   );
-}
-
-#define OVERRIDE_COMPUTE_PITCH_ERROR
-static inline spx_word32_t compute_pitch_error(spx_word16_t *C, spx_word16_t *g, spx_word16_t pitch_control)
-{
-   spx_word32_t sum;
-   __asm__ __volatile__
-         (
-         "A0 = 0;\n\t"
-         
-         "R0 = W[%1++];\n\t"
-         "R1.L = %2.L*%5.L (IS);\n\t"
-         "A0 += R1.L*R0.L (IS) || R0 = W[%1++];\n\t"
-         
-         "R1.L = %3.L*%5.L (IS);\n\t"
-         "A0 += R1.L*R0.L (IS) || R0 = W[%1++];\n\t"
-         
-         "R1.L = %4.L*%5.L (IS);\n\t"
-         "A0 += R1.L*R0.L (IS) || R0 = W[%1++];\n\t"
-         
-         "R1.L = %2.L*%3.L (IS);\n\t"
-         "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t"
-
-         "R1.L = %4.L*%3.L (IS);\n\t"
-         "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t"
-         
-         "R1.L = %4.L*%2.L (IS);\n\t"
-         "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t"
-         
-         "R1.L = %2.L*%2.L (IS);\n\t"
-         "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t"
-
-         "R1.L = %3.L*%3.L (IS);\n\t"
-         "A0 -= R1.L*R0.L (IS) || R0 = W[%1++];\n\t"
-         
-         "R1.L = %4.L*%4.L (IS);\n\t"
-         "A0 -= R1.L*R0.L (IS);\n\t"
-         
-         "%0 = A0;\n\t"
-   : "=&D" (sum), "=a" (C)
-   : "d" (g[0]), "d" (g[1]), "d" (g[2]), "d" (pitch_control), "1" (C)
-   : "R0", "R1", "R2", "A0", "ASTAT"
-         );
-   return sum;
-}
-
-#define OVERRIDE_OPEN_LOOP_NBEST_PITCH
-#ifdef OVERRIDE_OPEN_LOOP_NBEST_PITCH
-void open_loop_nbest_pitch(spx_word16_t *sw, int start, int end, int len, int *pitch, spx_word16_t *gain, int N, char *stack)
-{
-   int i,j,k;
-   VARDECL(spx_word32_t *best_score);
-   VARDECL(spx_word32_t *best_ener);
-   spx_word32_t e0;
-   VARDECL(spx_word32_t *corr);
-   VARDECL(spx_word32_t *energy);
-
-   ALLOC(best_score, N, spx_word32_t);
-   ALLOC(best_ener, N, spx_word32_t);
-   ALLOC(corr, end-start+1, spx_word32_t);
-   ALLOC(energy, end-start+2, spx_word32_t);
-
-   for (i=0;i<N;i++)
-   {
-        best_score[i]=-1;
-        best_ener[i]=0;
-        pitch[i]=start;
-   }
-
-   energy[0]=inner_prod(sw-start, sw-start, len);
-   e0=inner_prod(sw, sw, len);
-
-   /* energy update -------------------------------------*/
-
-      __asm__ __volatile__
-      (
-"        P0 = %0;\n\t"
-"        I1 = %1;\n\t"
-"        L1 = 0;\n\t"
-"        I2 = %2;\n\t"
-"        L2 = 0;\n\t"
-"        R2 = [P0++];\n\t"
-"        R3 = 0;\n\t"
-"        LSETUP (eu1, eu2) LC1 = %3;\n\t"
-"eu1:      R1.L = W [I1--] || R0.L = W [I2--] ;\n\t"
-"          R1 = R1.L * R1.L (IS);\n\t"
-"          R0 = R0.L * R0.L (IS);\n\t"
-"          R1 >>>= 6;\n\t"
-"          R1 = R1 + R2;\n\t"
-"          R0 >>>= 6;\n\t"
-"          R1 = R1 - R0;\n\t"
-"          R2 = MAX(R1,R3);\n\t"
-"eu2:      [P0++] = R2;\n\t"
-       : : "d" (energy), "d" (&sw[-start-1]), "d" (&sw[-start+len-1]),
-           "a" (end-start)  
-       : "P0", "I1", "I2", "R0", "R1", "R2", "R3", "ASTAT" BFIN_HWLOOP1_REGS
-       );
-
-   pitch_xcorr(sw, sw-end, corr, len, end-start+1, stack);
-
-   /* FIXME: Fixed-point and floating-point code should be merged */
-   {
-      VARDECL(spx_word16_t *corr16);
-      VARDECL(spx_word16_t *ener16);
-      ALLOC(corr16, end-start+1, spx_word16_t);
-      ALLOC(ener16, end-start+1, spx_word16_t);
-      /* Normalize to 180 so we can square it and it still fits in 16 bits */
-      normalize16(corr, corr16, 180, end-start+1);
-      normalize16(energy, ener16, 180, end-start+1);
-
-      if (N == 1) {
-       /* optimised asm to handle N==1 case */
-      __asm__ __volatile__
-      (
-"        I0 = %1;\n\t"                     /* I0: corr16[]    */
-"        L0 = 0;\n\t"
-"        I1 = %2;\n\t"                     /* I1: energy      */
-"        L1 = 0;\n\t"
-"        R2 = -1;\n\t"                     /* R2: best score  */
-"        R3 = 0;\n\t"                      /* R3: best energy */
-"        P0 = %4;\n\t"                     /* P0: best pitch  */
-"        P1 = %4;\n\t"                     /* P1: counter     */
-"        LSETUP (sl1, sl2) LC1 = %3;\n\t"
-"sl1:      R0.L = W [I0++] || R1.L = W [I1++];\n\t"         
-"          R0 = R0.L * R0.L (IS);\n\t"
-"          R1   += 1;\n\t"
-"          R4   = R0.L * R3.L;\n\t"
-"          R5   = R2.L * R1.L;\n\t"
-"          cc   = R5 < R4;\n\t"
-"          if cc R2 = R0;\n\t"
-"          if cc R3 = R1;\n\t"
-"          if cc P0 = P1;\n\t"
-"sl2:      P1 += 1;\n\t"
-"        %0 = P0;\n\t"
-       : "=&d" (pitch[0])
-       : "a" (corr16), "a" (ener16), "a" (end+1-start), "d" (start) 
-       : "P0", "P1", "I0", "I1", "R0", "R1", "R2", "R3", "R4", "R5",
-         "ASTAT", "CC" BFIN_HWLOOP1_REGS
-       );
-
-      }
-      else {
-       for (i=start;i<=end;i++)
-         {
-           spx_word16_t tmp = MULT16_16_16(corr16[i-start],corr16[i-start]);
-           /* Instead of dividing the tmp by the energy, we multiply on the other side */
-           if (MULT16_16(tmp,best_ener[N-1])>MULT16_16(best_score[N-1],ADD16(1,ener16[i-start])))
-             {
-               /* We can safely put it last and then check */
-               best_score[N-1]=tmp;
-               best_ener[N-1]=ener16[i-start]+1;
-               pitch[N-1]=i;
-               /* Check if it comes in front of others */
-               for (j=0;j<N-1;j++)
-                 {
-                   if (MULT16_16(tmp,best_ener[j])>MULT16_16(best_score[j],ADD16(1,ener16[i-start])))
-                     {
-                       for (k=N-1;k>j;k--)
-                         {
-                           best_score[k]=best_score[k-1];
-                           best_ener[k]=best_ener[k-1];
-                           pitch[k]=pitch[k-1];
-                         }
-                       best_score[j]=tmp;
-                       best_ener[j]=ener16[i-start]+1;
-                       pitch[j]=i;
-                       break;
-                     }
-                 }
-             }
-         }
-      }
-   }
-
-   /* Compute open-loop gain */
-   if (gain)
-   {
-       for (j=0;j<N;j++)
-       {
-          spx_word16_t g;
-          i=pitch[j];
-          g = DIV32(corr[i-start], 10+SHR32(MULT16_16(spx_sqrt(e0),spx_sqrt(energy[i-start])),6));
-          /* FIXME: g = max(g,corr/energy) */
-                   if (g<0)
-                   g = 0;
-             gain[j]=g;
-       }
-   }
-}
-#endif
-
-#define OVERRIDE_PITCH_GAIN_SEARCH_3TAP_VQ
-#ifdef OVERRIDE_PITCH_GAIN_SEARCH_3TAP_VQ
-static int pitch_gain_search_3tap_vq(
-  const signed char *gain_cdbk,
-  int                gain_cdbk_size,
-  spx_word16_t      *C16,
-  spx_word16_t       max_gain
-)
-{
-  const signed char *ptr=gain_cdbk;
-  int                best_cdbk=0;
-  spx_word32_t       best_sum=-VERY_LARGE32;
-  spx_word32_t       sum=0;
-  spx_word16_t       g[3];
-  spx_word16_t       pitch_control=64;
-  spx_word16_t       gain_sum;
-  int                i;
-
-      /* fast asm version of VQ codebook search */
-
-      __asm__ __volatile__
-      (
-
-"        P0 = %2;\n\t"                     /* P0: ptr to gain_cdbk */
-"        L1 = 0;\n\t"                      /* no circ addr for L1  */
-"        %0 = 0;\n\t"                      /* %0: best_sum         */
-"        %1 = 0;\n\t"                      /* %1: best_cbdk        */
-"        P1 = 0;\n\t"                      /* P1: loop counter     */
-
-"        LSETUP (pgs1, pgs2) LC1 = %4;\n\t"
-"pgs1:     R2  = B [P0++] (X);\n\t"        /* R2: g[0]             */
-"          R3  = B [P0++] (X);\n\t"        /* R3: g[1]             */
-"          R4  = B [P0++] (X);\n\t"        /* R4: g[2]             */
-"          R2 += 32;\n\t"
-"          R3 += 32;\n\t"
-"          R4 += 32;\n\t"
-"          R4.H = 64;\n\t"                 /* R4.H: pitch_control    */
-
-"          R0  = B [P0++] (X);\n\t"              
-"          B0  = R0;\n\t"                  /* BO: gain_sum         */
-          
-           /* compute_pitch_error() -------------------------------*/
-
-"          I1 = %3;\n\t"                   /* I1: ptr to C         */
-"          A0 = 0;\n\t"
-         
-"          R0.L = W[I1++];\n\t"
-"          R1.L = R2.L*R4.H (IS);\n\t"
-"          A0 += R1.L*R0.L (IS) || R0.L = W[I1++];\n\t"
-         
-"          R1.L = R3.L*R4.H (IS);\n\t"
-"          A0 += R1.L*R0.L (IS) || R0.L = W[I1++];\n\t"
-         
-"          R1.L = R4.L*R4.H (IS);\n\t"
-"          A0 += R1.L*R0.L (IS) || R0.L = W[I1++];\n\t"
-         
-"          R1.L = R2.L*R3.L (IS);\n\t"
-"          A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t"
-
-"          R1.L = R4.L*R3.L (IS);\n\t"
-"          A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t"
-         
-"          R1.L = R4.L*R2.L (IS);\n\t"
-"          A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t"
-         
-"          R1.L = R2.L*R2.L (IS);\n\t"
-"          A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t"
-
-"          R1.L = R3.L*R3.L (IS);\n\t"
-"          A0 -= R1.L*R0.L (IS) || R0.L = W[I1++];\n\t"
-         
-"          R1.L = R4.L*R4.L (IS);\n\t"
-"          R0 = (A0 -= R1.L*R0.L) (IS);\n\t"
-
-/*
-    Re-arrange the if-then to code efficiently on the Blackfin:
-
-      if (sum>best_sum && gain_sum<=max_gain)   ------ (1)
-
-      if (sum>best_sum && !(gain_sum>max_gain)) ------ (2)
-
-      if (max_gain<=gain_sum) {                 ------ (3)
-      sum = -VERY_LARGE32;
-      }
-      if (best_sum<=sum)
-
-    The blackin cc instructions are all of the form:
-
-      cc = x < y (or cc = x <= y)
-*/
-"          R1 = B0\n\t"
-"          R2 = %5\n\t"
-"          R3 = %6\n\t"
-"          cc = R2 <= R1;\n\t" 
-"          if cc R0 = R3;\n\t"
-"          cc = %0 <= R0;\n\t"
-"          if cc %0 = R0;\n\t"
-"          if cc %1 = P1;\n\t"
-
-"pgs2:     P1 += 1;\n\t"
-   
-       : "=&d" (best_sum), "=&d" (best_cdbk) 
-       : "a" (gain_cdbk), "a" (C16), "a" (gain_cdbk_size), "a" (max_gain),
-         "b" (-VERY_LARGE32)
-       : "R0", "R1", "R2", "R3", "R4", "P0", 
-         "P1", "I1", "L1", "A0", "B0", "CC", "ASTAT" BFIN_HWLOOP1_REGS
-       );
-
-  return best_cdbk;
-}
-#endif
-
diff --git a/libspeexdsp/ltp_sse.h b/libspeexdsp/ltp_sse.h
deleted file mode 100644 (file)
index bed6eaa..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (C) 2002 Jean-Marc Valin */
-/**
-   @file ltp_sse.h
-   @brief Long-Term Prediction functions (SSE version)
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <xmmintrin.h>
-
-#define OVERRIDE_INNER_PROD
-float inner_prod(const float *a, const float *b, int len)
-{
-   int i;
-   float ret;
-   __m128 sum = _mm_setzero_ps();
-   for (i=0;i<(len>>2);i+=2)
-   {
-      sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+0), _mm_loadu_ps(b+0)));
-      sum = _mm_add_ps(sum, _mm_mul_ps(_mm_loadu_ps(a+4), _mm_loadu_ps(b+4)));
-      a += 8;
-      b += 8;
-   }
-   sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum));
-   sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55));
-   _mm_store_ss(&ret, sum);
-   return ret;
-}
-
-#define OVERRIDE_PITCH_XCORR
-void pitch_xcorr(const float *_x, const float *_y, float *corr, int len, int nb_pitch, char *stack)
-{
-   int i, offset;
-   VARDECL(__m128 *x);
-   VARDECL(__m128 *y);
-   int N, L;
-   N = len>>2;
-   L = nb_pitch>>2;
-   ALLOC(x, N, __m128);
-   ALLOC(y, N+L, __m128);
-   for (i=0;i<N;i++)
-      x[i] = _mm_loadu_ps(_x+(i<<2));
-   for (offset=0;offset<4;offset++)
-   {
-      for (i=0;i<N+L;i++)
-         y[i] = _mm_loadu_ps(_y+(i<<2)+offset);
-      for (i=0;i<L;i++)
-      {
-         int j;
-         __m128 sum, *xx, *yy;
-         sum = _mm_setzero_ps();
-         yy = y+i;
-         xx = x;
-         for (j=0;j<N;j+=2)
-         {
-            sum = _mm_add_ps(sum, _mm_mul_ps(xx[0], yy[0]));
-            sum = _mm_add_ps(sum, _mm_mul_ps(xx[1], yy[1]));
-            xx += 2;
-            yy += 2;
-         }
-         sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum));
-         sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55));
-         _mm_store_ss(corr+nb_pitch-1-(i<<2)-offset, sum);
-      }
-   }
-}
diff --git a/libspeexdsp/modes.c b/libspeexdsp/modes.c
deleted file mode 100644 (file)
index 5883a4a..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-/* Copyright (C) 2002-2006 Jean-Marc Valin 
-   File: modes.c
-
-   Describes the different modes of the codec
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "modes.h"
-#include "ltp.h"
-#include "quant_lsp.h"
-#include "cb_search.h"
-#include "sb_celp.h"
-#include "nb_celp.h"
-#include "vbr.h"
-#include "arch.h"
-#include <math.h>
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifdef DISABLE_ENCODER
-#define nb_encoder_init NULL
-#define nb_encoder_destroy NULL
-#define nb_encode NULL
-#define nb_encoder_ctl NULL
-
-#define split_cb_search_shape_sign NULL
-#define noise_codebook_quant NULL
-#define pitch_search_3tap NULL
-#define forced_pitch_quant NULL
-#define lsp_quant_nb NULL
-#define lsp_quant_lbr NULL
-#endif /* DISABLE_ENCODER */
-
-#ifdef DISABLE_DECODER
-#define nb_decoder_init NULL
-#define nb_decoder_destroy NULL
-#define nb_decode NULL
-#define nb_decoder_ctl NULL
-
-#define noise_codebook_unquant NULL
-#define split_cb_shape_sign_unquant NULL
-#define lsp_unquant_nb NULL
-#define lsp_unquant_lbr NULL
-#define pitch_unquant_3tap NULL
-#define forced_pitch_unquant NULL
-#endif /* DISABLE_DECODER */
-
-/* Extern declarations for all codebooks we use here */
-extern const signed char gain_cdbk_nb[];
-extern const signed char gain_cdbk_lbr[];
-extern const signed char exc_5_256_table[];
-extern const signed char exc_5_64_table[];
-extern const signed char exc_8_128_table[];
-extern const signed char exc_10_32_table[];
-extern const signed char exc_10_16_table[];
-extern const signed char exc_20_32_table[];
-
-
-/* Parameters for Long-Term Prediction (LTP)*/
-static const ltp_params ltp_params_nb = {
-   gain_cdbk_nb,
-   7,
-   7
-};
-
-/* Parameters for Long-Term Prediction (LTP)*/
-static const ltp_params ltp_params_vlbr = {
-   gain_cdbk_lbr,
-   5,
-   0
-};
-
-/* Parameters for Long-Term Prediction (LTP)*/
-static const ltp_params ltp_params_lbr = {
-   gain_cdbk_lbr,
-   5,
-   7
-};
-
-/* Parameters for Long-Term Prediction (LTP)*/
-static const ltp_params ltp_params_med = {
-   gain_cdbk_lbr,
-   5,
-   7
-};
-
-/* Split-VQ innovation parameters for very low bit-rate narrowband */
-static const split_cb_params split_cb_nb_vlbr = {
-   10,               /*subvect_size*/
-   4,               /*nb_subvect*/
-   exc_10_16_table, /*shape_cb*/
-   4,               /*shape_bits*/
-   0,
-};
-
-/* Split-VQ innovation parameters for very low bit-rate narrowband */
-static const split_cb_params split_cb_nb_ulbr = {
-   20,               /*subvect_size*/
-   2,               /*nb_subvect*/
-   exc_20_32_table, /*shape_cb*/
-   5,               /*shape_bits*/
-   0,
-};
-
-/* Split-VQ innovation parameters for low bit-rate narrowband */
-static const split_cb_params split_cb_nb_lbr = {
-   10,              /*subvect_size*/
-   4,               /*nb_subvect*/
-   exc_10_32_table, /*shape_cb*/
-   5,               /*shape_bits*/
-   0,
-};
-
-
-/* Split-VQ innovation parameters narrowband */
-static const split_cb_params split_cb_nb = {
-   5,               /*subvect_size*/
-   8,               /*nb_subvect*/
-   exc_5_64_table, /*shape_cb*/
-   6,               /*shape_bits*/
-   0,
-};
-
-/* Split-VQ innovation parameters narrowband */
-static const split_cb_params split_cb_nb_med = {
-   8,               /*subvect_size*/
-   5,               /*nb_subvect*/
-   exc_8_128_table, /*shape_cb*/
-   7,               /*shape_bits*/
-   0,
-};
-
-/* Split-VQ innovation for low-band wideband */
-static const split_cb_params split_cb_sb = {
-   5,               /*subvect_size*/
-   8,              /*nb_subvect*/
-   exc_5_256_table,    /*shape_cb*/
-   8,               /*shape_bits*/
-   0,
-};
-
-
-
-/* 2150 bps "vocoder-like" mode for comfort noise */
-static const SpeexSubmode nb_submode1 = {
-   0,
-   1,
-   0,
-   0,
-   /* LSP quantization */
-   lsp_quant_lbr,
-   lsp_unquant_lbr,
-   /* No pitch quantization */
-   forced_pitch_quant,
-   forced_pitch_unquant,
-   NULL,
-   /* No innovation quantization (noise only) */
-   noise_codebook_quant,
-   noise_codebook_unquant,
-   NULL,
-   -1,
-   43
-};
-
-/* 3.95 kbps very low bit-rate mode */
-static const SpeexSubmode nb_submode8 = {
-   0,
-   1,
-   0,
-   0,
-   /*LSP quantization*/
-   lsp_quant_lbr,
-   lsp_unquant_lbr,
-   /*No pitch quantization*/
-   forced_pitch_quant,
-   forced_pitch_unquant,
-   NULL,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-   &split_cb_nb_ulbr,
-   QCONST16(.5,15),
-   79
-};
-
-/* 5.95 kbps very low bit-rate mode */
-static const SpeexSubmode nb_submode2 = {
-   0,
-   0,
-   0,
-   0,
-   /*LSP quantization*/
-   lsp_quant_lbr,
-   lsp_unquant_lbr,
-   /*No pitch quantization*/
-   pitch_search_3tap,
-   pitch_unquant_3tap,
-   &ltp_params_vlbr,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-   &split_cb_nb_vlbr,
-   QCONST16(.6,15),
-   119
-};
-
-/* 8 kbps low bit-rate mode */
-static const SpeexSubmode nb_submode3 = {
-   -1,
-   0,
-   1,
-   0,
-   /*LSP quantization*/
-   lsp_quant_lbr,
-   lsp_unquant_lbr,
-   /*Pitch quantization*/
-   pitch_search_3tap,
-   pitch_unquant_3tap,
-   &ltp_params_lbr,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-   &split_cb_nb_lbr,
-   QCONST16(.55,15),
-   160
-};
-
-/* 11 kbps medium bit-rate mode */
-static const SpeexSubmode nb_submode4 = {
-   -1,
-   0,
-   1,
-   0,
-   /*LSP quantization*/
-   lsp_quant_lbr,
-   lsp_unquant_lbr,
-   /*Pitch quantization*/
-   pitch_search_3tap,
-   pitch_unquant_3tap,
-   &ltp_params_med,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-   &split_cb_nb_med,
-   QCONST16(.45,15),
-   220
-};
-
-/* 15 kbps high bit-rate mode */
-static const SpeexSubmode nb_submode5 = {
-   -1,
-   0,
-   3,
-   0,
-   /*LSP quantization*/
-   lsp_quant_nb,
-   lsp_unquant_nb,
-   /*Pitch quantization*/
-   pitch_search_3tap,
-   pitch_unquant_3tap,
-   &ltp_params_nb,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-   &split_cb_nb,
-   QCONST16(.25,15),
-   300
-};
-
-/* 18.2 high bit-rate mode */
-static const SpeexSubmode nb_submode6 = {
-   -1,
-   0,
-   3,
-   0,
-   /*LSP quantization*/
-   lsp_quant_nb,
-   lsp_unquant_nb,
-   /*Pitch quantization*/
-   pitch_search_3tap,
-   pitch_unquant_3tap,
-   &ltp_params_nb,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-   &split_cb_sb,
-   QCONST16(.15,15),
-   364
-};
-
-/* 24.6 kbps high bit-rate mode */
-static const SpeexSubmode nb_submode7 = {
-   -1,
-   0,
-   3,
-   1,
-   /*LSP quantization*/
-   lsp_quant_nb,
-   lsp_unquant_nb,
-   /*Pitch quantization*/
-   pitch_search_3tap,
-   pitch_unquant_3tap,
-   &ltp_params_nb,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-   &split_cb_nb,
-   QCONST16(.05,15),
-   492
-};
-
-
-/* Default mode for narrowband */
-static const SpeexNBMode nb_mode = {
-   NB_FRAME_SIZE,    /*frameSize*/
-   NB_SUBFRAME_SIZE, /*subframeSize*/
-   NB_ORDER,         /*lpcSize*/
-   NB_PITCH_START,               /*pitchStart*/
-   NB_PITCH_END,              /*pitchEnd*/
-   QCONST16(0.92,15),  /* gamma1 */
-   QCONST16(0.6,15),   /* gamma2 */
-   QCONST16(.0002,15), /*lpc_floor*/
-   {NULL, &nb_submode1, &nb_submode2, &nb_submode3, &nb_submode4, &nb_submode5, &nb_submode6, &nb_submode7,
-   &nb_submode8, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
-   5,
-   {1, 8, 2, 3, 3, 4, 4, 5, 5, 6, 7}
-};
-
-
-/* Default mode for narrowband */
-EXPORT const SpeexMode speex_nb_mode = {
-   &nb_mode,
-   nb_mode_query,
-   "narrowband",
-   0,
-   4,
-   nb_encoder_init,
-   nb_encoder_destroy,
-   nb_encode,
-   nb_decoder_init,
-   nb_decoder_destroy,
-   nb_decode,
-   nb_encoder_ctl,
-   nb_decoder_ctl,
-};
-
-
-
-EXPORT int speex_mode_query(const SpeexMode *mode, int request, void *ptr)
-{
-   return mode->query(mode->mode, request, ptr);
-}
-
-#ifdef FIXED_DEBUG
-long long spx_mips=0;
-#endif
-
diff --git a/libspeexdsp/modes.h b/libspeexdsp/modes.h
deleted file mode 100644 (file)
index cc4d064..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Copyright (C) 2002-2006 Jean-Marc Valin */
-/**
-   @file modes.h
-   @brief Describes the different modes of the codec
-*/
-/*
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#ifndef MODES_H
-#define MODES_H
-
-#include "../include/speex/speex.h"
-#include "../include/speex/speex_bits.h"
-#include "arch.h"
-
-#define NB_SUBMODES 16
-#define NB_SUBMODE_BITS 4
-
-#define SB_SUBMODES 8
-#define SB_SUBMODE_BITS 3
-
-/* Used internally, NOT TO BE USED in applications */
-/** Used internally*/
-#define SPEEX_GET_PI_GAIN 100
-/** Used internally*/
-#define SPEEX_GET_EXC     101
-/** Used internally*/
-#define SPEEX_GET_INNOV   102
-/** Used internally*/
-#define SPEEX_GET_DTX_STATUS   103
-/** Used internally*/
-#define SPEEX_SET_INNOVATION_SAVE   104
-/** Used internally*/
-#define SPEEX_SET_WIDEBAND   105
-
-/** Used internally*/
-#define SPEEX_GET_STACK   106
-
-
-/** Quantizes LSPs */
-typedef void (*lsp_quant_func)(spx_lsp_t *, spx_lsp_t *, int, SpeexBits *);
-
-/** Decodes quantized LSPs */
-typedef void (*lsp_unquant_func)(spx_lsp_t *, int, SpeexBits *);
-
-
-/** Long-term predictor quantization */
-typedef int (*ltp_quant_func)(spx_word16_t *, spx_word16_t *, spx_coef_t *, spx_coef_t *, 
-                              spx_coef_t *, spx_sig_t *, const void *, int, int, spx_word16_t, 
-                              int, int, SpeexBits*, char *, spx_word16_t *, spx_word16_t *, int, int, int, spx_word32_t *);
-
-/** Long-term un-quantize */
-typedef void (*ltp_unquant_func)(spx_word16_t *, spx_word32_t *, int, int, spx_word16_t, const void *, int, int *,
-                                 spx_word16_t *, SpeexBits*, char*, int, int, spx_word16_t, int);
-
-
-/** Innovation quantization function */
-typedef void (*innovation_quant_func)(spx_word16_t *, spx_coef_t *, spx_coef_t *, spx_coef_t *, const void *, int, int, 
-                                      spx_sig_t *, spx_word16_t *, SpeexBits *, char *, int, int);
-
-/** Innovation unquantization function */
-typedef void (*innovation_unquant_func)(spx_sig_t *, const void *, int, SpeexBits*, char *, spx_int32_t *);
-
-/** Description of a Speex sub-mode (wither narrowband or wideband */
-typedef struct SpeexSubmode {
-   int     lbr_pitch;          /**< Set to -1 for "normal" modes, otherwise encode pitch using a global pitch and allowing a +- lbr_pitch variation (for low not-rates)*/
-   int     forced_pitch_gain;  /**< Use the same (forced) pitch gain for all sub-frames */
-   int     have_subframe_gain; /**< Number of bits to use as sub-frame innovation gain */
-   int     double_codebook;    /**< Apply innovation quantization twice for higher quality (and higher bit-rate)*/
-   /*LSP functions*/
-   lsp_quant_func    lsp_quant; /**< LSP quantization function */
-   lsp_unquant_func  lsp_unquant; /**< LSP unquantization function */
-
-   /*Long-term predictor functions*/
-   ltp_quant_func    ltp_quant; /**< Long-term predictor (pitch) quantizer */
-   ltp_unquant_func  ltp_unquant; /**< Long-term predictor (pitch) un-quantizer */
-   const void       *ltp_params; /**< Pitch parameters (options) */
-
-   /*Quantization of innovation*/
-   innovation_quant_func innovation_quant; /**< Innovation quantization */
-   innovation_unquant_func innovation_unquant; /**< Innovation un-quantization */
-   const void             *innovation_params; /**< Innovation quantization parameters*/
-
-   spx_word16_t      comb_gain;  /**< Gain of enhancer comb filter */
-
-   int               bits_per_frame; /**< Number of bits per frame after encoding*/
-} SpeexSubmode;
-
-/** Struct defining the encoding/decoding mode*/
-typedef struct SpeexNBMode {
-   int     frameSize;      /**< Size of frames used for encoding */
-   int     subframeSize;   /**< Size of sub-frames used for encoding */
-   int     lpcSize;        /**< Order of LPC filter */
-   int     pitchStart;     /**< Smallest pitch value allowed */
-   int     pitchEnd;       /**< Largest pitch value allowed */
-
-   spx_word16_t gamma1;    /**< Perceptual filter parameter #1 */
-   spx_word16_t gamma2;    /**< Perceptual filter parameter #2 */
-   spx_word16_t   lpc_floor;      /**< Noise floor for LPC analysis */
-
-   const SpeexSubmode *submodes[NB_SUBMODES]; /**< Sub-mode data for the mode */
-   int     defaultSubmode; /**< Default sub-mode to use when encoding */
-   int     quality_map[11]; /**< Mode corresponding to each quality setting */
-} SpeexNBMode;
-
-
-/** Struct defining the encoding/decoding mode for SB-CELP (wideband) */
-typedef struct SpeexSBMode {
-   const SpeexMode *nb_mode;    /**< Embedded narrowband mode */
-   int     frameSize;     /**< Size of frames used for encoding */
-   int     subframeSize;  /**< Size of sub-frames used for encoding */
-   int     lpcSize;       /**< Order of LPC filter */
-   spx_word16_t gamma1;   /**< Perceptual filter parameter #1 */
-   spx_word16_t gamma2;   /**< Perceptual filter parameter #1 */
-   spx_word16_t   lpc_floor;     /**< Noise floor for LPC analysis */
-   spx_word16_t   folding_gain;
-
-   const SpeexSubmode *submodes[SB_SUBMODES]; /**< Sub-mode data for the mode */
-   int     defaultSubmode; /**< Default sub-mode to use when encoding */
-   int     low_quality_map[11]; /**< Mode corresponding to each quality setting */
-   int     quality_map[11]; /**< Mode corresponding to each quality setting */
-#ifndef DISABLE_VBR
-   const float (*vbr_thresh)[11];
-#endif
-   int     nb_modes;
-} SpeexSBMode;
-
-int speex_encode_native(void *state, spx_word16_t *in, SpeexBits *bits);
-int speex_decode_native(void *state, SpeexBits *bits, spx_word16_t *out);
-
-int nb_mode_query(const void *mode, int request, void *ptr);
-int wb_mode_query(const void *mode, int request, void *ptr);
-
-#endif
diff --git a/libspeexdsp/modes_wb.c b/libspeexdsp/modes_wb.c
deleted file mode 100644 (file)
index cfbcdf6..0000000
+++ /dev/null
@@ -1,322 +0,0 @@
-/* Copyright (C) 2002-2007 Jean-Marc Valin 
-   File: modes.c
-
-   Describes the wideband modes of the codec
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "modes.h"
-#include "ltp.h"
-#include "quant_lsp.h"
-#include "cb_search.h"
-#include "sb_celp.h"
-#include "nb_celp.h"
-#include "vbr.h"
-#include "arch.h"
-#include <math.h>
-#include "os_support.h"
-
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#if defined(DISABLE_ENCODER) || defined(DISABLE_WIDEBAND)
-#define split_cb_search_shape_sign NULL
-#define noise_codebook_quant NULL
-#define pitch_search_3tap NULL
-#define forced_pitch_quant NULL
-#define sb_encoder_init NULL
-#define sb_encoder_destroy NULL
-#define sb_encode NULL
-#define sb_encoder_ctl NULL
-#define lsp_quant_high NULL
-#endif /* DISABLE_ENCODER */
-
-#if defined(DISABLE_DECODER) || defined(DISABLE_WIDEBAND)
-#define noise_codebook_unquant NULL
-#define split_cb_shape_sign_unquant NULL
-#define lsp_unquant_high NULL
-#define sb_decoder_init NULL
-#define sb_decoder_destroy NULL
-#define sb_decode NULL
-#define sb_decoder_ctl NULL
-#endif /* DISABLE_DECODER */
-
-EXPORT const SpeexMode * const speex_mode_list[SPEEX_NB_MODES] = {&speex_nb_mode, &speex_wb_mode, &speex_uwb_mode};
-
-extern const signed char hexc_table[];
-extern const signed char hexc_10_32_table[];
-
-#ifndef DISABLE_WIDEBAND
-
-/* Split-VQ innovation for high-band wideband */
-static const split_cb_params split_cb_high = {
-   8,               /*subvect_size*/
-   5,               /*nb_subvect*/
-   hexc_table,       /*shape_cb*/
-   7,               /*shape_bits*/
-   1,
-};
-
-
-/* Split-VQ innovation for high-band wideband */
-static const split_cb_params split_cb_high_lbr = {
-   10,               /*subvect_size*/
-   4,               /*nb_subvect*/
-   hexc_10_32_table,       /*shape_cb*/
-   5,               /*shape_bits*/
-   0,
-};
-
-#endif
-
-
-static const SpeexSubmode wb_submode1 = {
-   0,
-   0,
-   1,
-   0,
-   /*LSP quantization*/
-   lsp_quant_high,
-   lsp_unquant_high,
-   /*Pitch quantization*/
-   NULL,
-   NULL,
-   NULL,
-   /*No innovation quantization*/
-   NULL,
-   NULL,
-   NULL,
-   -1,
-   36
-};
-
-
-static const SpeexSubmode wb_submode2 = {
-   0,
-   0,
-   1,
-   0,
-   /*LSP quantization*/
-   lsp_quant_high,
-   lsp_unquant_high,
-   /*Pitch quantization*/
-   NULL,
-   NULL,
-   NULL,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-#ifdef DISABLE_WIDEBAND
-   NULL,
-#else
-   &split_cb_high_lbr,
-#endif
-   -1,
-   112
-};
-
-
-static const SpeexSubmode wb_submode3 = {
-   0,
-   0,
-   1,
-   0,
-   /*LSP quantization*/
-   lsp_quant_high,
-   lsp_unquant_high,
-   /*Pitch quantization*/
-   NULL,
-   NULL,
-   NULL,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-#ifdef DISABLE_WIDEBAND
-   NULL,
-#else
-   &split_cb_high,
-#endif
-   -1,
-   192
-};
-
-static const SpeexSubmode wb_submode4 = {
-   0,
-   0,
-   1,
-   1,
-   /*LSP quantization*/
-   lsp_quant_high,
-   lsp_unquant_high,
-   /*Pitch quantization*/
-   NULL,
-   NULL,
-   NULL,
-   /*Innovation quantization*/
-   split_cb_search_shape_sign,
-   split_cb_shape_sign_unquant,
-#ifdef DISABLE_WIDEBAND
-   NULL,
-#else
-   &split_cb_high,
-#endif
-   -1,
-   352
-};
-
-
-/* Split-band wideband CELP mode*/
-static const SpeexSBMode sb_wb_mode = {
-   &speex_nb_mode,
-   160,    /*frameSize*/
-   40,     /*subframeSize*/
-   8,     /*lpcSize*/
-#ifdef FIXED_POINT
-   29491, 19661, /* gamma1, gamma2 */
-#else
-   0.9, 0.6, /* gamma1, gamma2 */
-#endif
-   QCONST16(.0002,15), /*lpc_floor*/
-   QCONST16(0.9f,15),
-   {NULL, &wb_submode1, &wb_submode2, &wb_submode3, &wb_submode4, NULL, NULL, NULL},
-   3,
-   {1, 8, 2, 3, 4, 5, 5, 6, 6, 7, 7},
-   {1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4},
-#ifndef DISABLE_VBR
-   vbr_hb_thresh,
-#endif
-   5
-};
-
-
-EXPORT const SpeexMode speex_wb_mode = {
-   &sb_wb_mode,
-   wb_mode_query,
-   "wideband (sub-band CELP)",
-   1,
-   4,
-   sb_encoder_init,
-   sb_encoder_destroy,
-   sb_encode,
-   sb_decoder_init,
-   sb_decoder_destroy,
-   sb_decode,
-   sb_encoder_ctl,
-   sb_decoder_ctl,
-};
-
-
-
-/* "Ultra-wideband" mode stuff */
-
-
-
-/* Split-band "ultra-wideband" (32 kbps) CELP mode*/
-static const SpeexSBMode sb_uwb_mode = {
-   &speex_wb_mode,
-   320,    /*frameSize*/
-   80,     /*subframeSize*/
-   8,     /*lpcSize*/
-#ifdef FIXED_POINT
-   29491, 19661, /* gamma1, gamma2 */
-#else
-   0.9, 0.6, /* gamma1, gamma2 */
-#endif
-   QCONST16(.0002,15), /*lpc_floor*/
-   QCONST16(0.7f,15),
-   {NULL, &wb_submode1, NULL, NULL, NULL, NULL, NULL, NULL},
-   1,
-   {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
-   {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
-#ifndef DISABLE_VBR
-   vbr_uhb_thresh,
-#endif
-   2
-};
-
-int wb_mode_query(const void *mode, int request, void *ptr)
-{
-   const SpeexSBMode *m = (const SpeexSBMode*)mode;
-
-   switch (request)
-   {
-      case SPEEX_MODE_FRAME_SIZE:
-         *((int*)ptr)=2*m->frameSize;
-         break;
-      case SPEEX_SUBMODE_BITS_PER_FRAME:
-         if (*((int*)ptr)==0)
-            *((int*)ptr) = SB_SUBMODE_BITS+1;
-         else if (m->submodes[*((int*)ptr)]==NULL)
-            *((int*)ptr) = -1;
-         else
-            *((int*)ptr) = m->submodes[*((int*)ptr)]->bits_per_frame;
-         break;
-      default:
-         speex_warning_int("Unknown wb_mode_query request: ", request);
-         return -1;
-   }
-   return 0;
-}
-
-
-EXPORT const SpeexMode speex_uwb_mode = {
-   &sb_uwb_mode,
-   wb_mode_query,
-   "ultra-wideband (sub-band CELP)",
-   2,
-   4,
-   sb_encoder_init,
-   sb_encoder_destroy,
-   sb_encode,
-   sb_decoder_init,
-   sb_decoder_destroy,
-   sb_decode,
-   sb_encoder_ctl,
-   sb_decoder_ctl,
-};
-
-/* We have defined speex_lib_get_mode() as a macro in speex.h */
-#undef speex_lib_get_mode
-
-EXPORT const SpeexMode * speex_lib_get_mode (int mode)
-{
-   if (mode < 0 || mode >= SPEEX_NB_MODES) return NULL;
-
-   return speex_mode_list[mode];
-}
-
-
-
diff --git a/libspeexdsp/nb_celp.c b/libspeexdsp/nb_celp.c
deleted file mode 100644 (file)
index ab2511d..0000000
+++ /dev/null
@@ -1,1827 +0,0 @@
-/* Copyright (C) 2002-2006 Jean-Marc Valin 
-   File: nb_celp.c
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-   
-   - Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-   
-   - Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-   
-   - Neither the name of the Xiph.org Foundation nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-   
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-#include "nb_celp.h"
-#include "lpc.h"
-#include "lsp.h"
-#include "ltp.h"
-#include "quant_lsp.h"
-#include "cb_search.h"
-#include "filters.h"
-#include "stack_alloc.h"
-#include "vq.h"
-#include "../include/speex/speex_bits.h"
-#include "vbr.h"
-#include "arch.h"
-#include "math_approx.h"
-#include "os_support.h"
-#include "../include/speex/speex_callbacks.h"
-
-#ifdef VORBIS_PSYCHO
-#include "vorbis_psy.h"
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#define SUBMODE(x) st->submodes[st->submodeID]->x
-
-/* Default size for the encoder and decoder stack (can be changed at compile time).
-   This does not apply when using variable-size arrays or alloca. */
-#ifndef NB_ENC_STACK
-#define NB_ENC_STACK (8000*sizeof(spx_sig_t))
-#endif
-
-#ifndef NB_DEC_STACK
-#define NB_DEC_STACK (4000*sizeof(spx_sig_t))
-#endif
-
-
-#ifdef FIXED_POINT
-static const spx_word32_t ol_gain_table[32]={18900, 25150, 33468, 44536, 59265, 78865, 104946, 139653, 185838, 247297, 329081, 437913, 582736, 775454, 1031906, 1373169, 1827293, 2431601, 3235761, 4305867, 5729870, 7624808, 10146425, 13501971, 17967238, 23909222, 31816294, 42338330, 56340132, 74972501, 99766822, 132760927};
-static const spx_word16_t exc_gain_quant_scal3_bound[7]={1841, 3883, 6051, 8062, 10444, 13580, 18560};
-static const spx_word16_t exc_gain_quant_scal3[8]={1002, 2680, 5086, 7016, 9108, 11781, 15380, 21740};
-static const spx_word16_t exc_gain_quant_scal1_bound[1]={14385};
-static const spx_word16_t exc_gain_quant_scal1[2]={11546, 17224};
-
-#define LSP_MARGIN 16
-#define LSP_DELTA1 6553
-#define LSP_DELTA2 1638
-
-#else
-
-static const float exc_gain_quant_scal3_bound[7]={0.112338f, 0.236980f, 0.369316f, 0.492054f, 0.637471f, 0.828874f, 1.132784f};
-static const float exc_gain_quant_scal3[8]={0.061130f, 0.163546f, 0.310413f, 0.428220f, 0.555887f, 0.719055f, 0.938694f, 1.326874f};
-static const float exc_gain_quant_scal1_bound[1]={0.87798f};
-static const float exc_gain_quant_scal1[2]={0.70469f, 1.05127f};
-
-#define LSP_MARGIN .002f
-#define LSP_DELTA1 .2f
-#define LSP_DELTA2 .05f
-
-#endif
-
-#ifdef VORBIS_PSYCHO
-#define EXTRA_BUFFER 100
-#else
-#define EXTRA_BUFFER 0
-#endif
-
-
-extern const spx_word16_t lag_window[];
-extern const spx_word16_t lpc_window[];
-
-#ifndef DISABLE_ENCODER
-void *nb_encoder_init(const SpeexMode *m)
-{
-   EncState *st;
-   const SpeexNBMode *mode;
-   int i;
-
-   mode=(const SpeexNBMode *)m->mode;
-   st = (EncState*)speex_alloc(sizeof(EncState));
-   if (!st)
-      return NULL;
-#if defined(VAR_ARRAYS) || defined (USE_ALLOCA)
-   st->stack = NULL;
-#else
-   st->stack = (char*)speex_alloc_scratch(NB_ENC_STACK);
-#endif
-   
-   st->mode=m;
-
-   st->gamma1=mode->gamma1;
-   st->gamma2=mode->gamma2;
-   st->lpc_floor = mode->lpc_floor;
-  
-   st->submodes=mode->submodes;
-   st->submodeID=st->submodeSelect=mode->defaultSubmode;
-   st->bounded_pitch = 1;
-
-   st->encode_submode = 1;
-
-#ifdef VORBIS_PSYCHO
-   st->psy = vorbis_psy_init(8000, 256);
-   st->curve = (float*)speex_alloc(128*sizeof(float));
-   st->old_curve = (float*)speex_alloc(128*sizeof(float));
-   st->psy_window = (float*)speex_alloc(256*sizeof(float));
-#endif
-
-   st->cumul_gain = 1024;
-
-   st->window= lpc_window;
-   
-   /* Create the window for autocorrelation (lag-windowing) */
-   st->lagWindow = lag_window;
-
-   st->first = 1;
-   for (i=0;i<NB_ORDER;i++)
-      st->old_lsp[i]= DIV32(MULT16_16(QCONST16(3.1415927f, LSP_SHIFT), i+1), NB_ORDER+1);
-
-   st->innov_rms_save = NULL;
-   
-#ifndef DISABLE_VBR
-   vbr_init(&st->vbr);
-   st->vbr_quality = 8;
-   st->vbr_enabled = 0;
-   st->vbr_max = 0;
-   st->vad_enabled = 0;
-   st->dtx_enabled = 0;
-   st->dtx_count=0;
-   st->abr_enabled = 0;
-   st->abr_drift = 0;
-   st->abr_drift2 = 0;
-#endif /* #ifndef DISABLE_VBR */
-
-   st->plc_tuning = 2;
-   st->complexity=2;
-   st->sampling_rate=8000;
-   st->isWideband = 0;
-   st->highpass_enabled = 1;
-   
-#ifdef ENABLE_VALGRIND
-   VALGRIND_MAKE_READABLE(st, NB_ENC_STACK);
-#endif
-   return st;
-}
-
-void nb_encoder_destroy(void *state)
-{
-   EncState *st=(EncState *)state;
-   /* Free all allocated memory */
-#if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA))
-   speex_free_scratch(st->stack);
-#endif
-
-#ifndef DISABLE_VBR
-   vbr_destroy(&st->vbr);
-#endif /* #ifndef DISABLE_VBR */
-
-#ifdef VORBIS_PSYCHO
-   vorbis_psy_destroy(st->psy);
-   speex_free (st->curve);
-   speex_free (st->old_curve);
-   speex_free (st->psy_window);
-#endif
-
-   /*Free state memory... should be last*/
-   speex_free(st);
-}
-
-
-int nb_encoder_ctl(void *state, int request, void *ptr)
-{
-   EncState *st;
-   st=(EncState*)state;     
-   switch(request)
-   {
-   case SPEEX_GET_FRAME_SIZE:
-      (*(spx_int32_t*)ptr) = NB_FRAME_SIZE;
-      break;
-   case SPEEX_SET_LOW_MODE:
-   case SPEEX_SET_MODE:
-      st->submodeSelect = st->submodeID = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_LOW_MODE:
-   case SPEEX_GET_MODE:
-      (*(spx_int32_t*)ptr) = st->submodeID;
-      break;
-#ifndef DISABLE_VBR
-      case SPEEX_SET_VBR:
-      st->vbr_enabled = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_VBR:
-      (*(spx_int32_t*)ptr) = st->vbr_enabled;
-      break;
-   case SPEEX_SET_VAD:
-      st->vad_enabled = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_VAD:
-      (*(spx_int32_t*)ptr) = st->vad_enabled;
-      break;
-   case SPEEX_SET_DTX:
-      st->dtx_enabled = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_DTX:
-      (*(spx_int32_t*)ptr) = st->dtx_enabled;
-      break;
-   case SPEEX_SET_ABR:
-      st->abr_enabled = (*(spx_int32_t*)ptr);
-      st->vbr_enabled = st->abr_enabled!=0;
-      if (st->vbr_enabled) 
-      {
-         spx_int32_t i=10;
-         spx_int32_t rate, target;
-         float vbr_qual;
-         target = (*(spx_int32_t*)ptr);
-         while (i>=0)
-         {
-            speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i);
-            speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate);
-            if (rate <= target)
-               break;
-            i--;
-         }
-         vbr_qual=i;
-         if (vbr_qual<0)
-            vbr_qual=0;
-         speex_encoder_ctl(st, SPEEX_SET_VBR_QUALITY, &vbr_qual);
-         st->abr_count=0;
-         st->abr_drift=0;
-         st->abr_drift2=0;
-      }
-      
-      break;
-   case SPEEX_GET_ABR:
-      (*(spx_int32_t*)ptr) = st->abr_enabled;
-      break;
-#endif /* #ifndef DISABLE_VBR */
-#if !defined(DISABLE_VBR) && !defined(DISABLE_FLOAT_API)
-   case SPEEX_SET_VBR_QUALITY:
-      st->vbr_quality = (*(float*)ptr);
-      break;
-   case SPEEX_GET_VBR_QUALITY:
-      (*(float*)ptr) = st->vbr_quality;
-      break;
-#endif /* !defined(DISABLE_VBR) && !defined(DISABLE_FLOAT_API) */
-   case SPEEX_SET_QUALITY:
-      {
-         int quality = (*(spx_int32_t*)ptr);
-         if (quality < 0)
-            quality = 0;
-         if (quality > 10)
-            quality = 10;
-         st->submodeSelect = st->submodeID = ((const SpeexNBMode*)(st->mode->mode))->quality_map[quality];
-      }
-      break;
-   case SPEEX_SET_COMPLEXITY:
-      st->complexity = (*(spx_int32_t*)ptr);
-      if (st->complexity<0)
-         st->complexity=0;
-      break;
-   case SPEEX_GET_COMPLEXITY:
-      (*(spx_int32_t*)ptr) = st->complexity;
-      break;
-   case SPEEX_SET_BITRATE:
-      {
-         spx_int32_t i=10;
-         spx_int32_t rate, target;
-         target = (*(spx_int32_t*)ptr);
-         while (i>=0)
-         {
-            speex_encoder_ctl(st, SPEEX_SET_QUALITY, &i);
-            speex_encoder_ctl(st, SPEEX_GET_BITRATE, &rate);
-            if (rate <= target)
-               break;
-            i--;
-         }
-      }
-      break;
-   case SPEEX_GET_BITRATE:
-      if (st->submodes[st->submodeID])
-         (*(spx_int32_t*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/NB_FRAME_SIZE;
-      else
-         (*(spx_int32_t*)ptr) = st->sampling_rate*(NB_SUBMODE_BITS+1)/NB_FRAME_SIZE;
-      break;
-   case SPEEX_SET_SAMPLING_RATE:
-      st->sampling_rate = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_SAMPLING_RATE:
-      (*(spx_int32_t*)ptr)=st->sampling_rate;
-      break;
-   case SPEEX_RESET_STATE:
-      {
-         int i;
-         st->bounded_pitch = 1;
-         st->first = 1;
-         for (i=0;i<NB_ORDER;i++)
-            st->old_lsp[i]= DIV32(MULT16_16(QCONST16(3.1415927f, LSP_SHIFT), i+1), NB_ORDER+1);
-         for (i=0;i<NB_ORDER;i++)
-            st->mem_sw[i]=st->mem_sw_whole[i]=st->mem_sp[i]=st->mem_exc[i]=0;
-         for (i=0;i<NB_FRAME_SIZE+NB_PITCH_END+1;i++)
-            st->excBuf[i]=st->swBuf[i]=0;
-         for (i=0;i<NB_WINDOW_SIZE-NB_FRAME_SIZE;i++)
-            st->winBuf[i]=0;
-      }
-      break;
-   case SPEEX_SET_SUBMODE_ENCODING:
-      st->encode_submode = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_SUBMODE_ENCODING:
-      (*(spx_int32_t*)ptr) = st->encode_submode;
-      break;
-   case SPEEX_GET_LOOKAHEAD:
-      (*(spx_int32_t*)ptr)=(NB_WINDOW_SIZE-NB_FRAME_SIZE);
-      break;
-   case SPEEX_SET_PLC_TUNING:
-      st->plc_tuning = (*(spx_int32_t*)ptr);
-      if (st->plc_tuning>100)
-         st->plc_tuning=100;
-      break;
-   case SPEEX_GET_PLC_TUNING:
-      (*(spx_int32_t*)ptr)=(st->plc_tuning);
-      break;
-#ifndef DISABLE_VBR
-   case SPEEX_SET_VBR_MAX_BITRATE:
-      st->vbr_max = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_VBR_MAX_BITRATE:
-      (*(spx_int32_t*)ptr) = st->vbr_max;
-      break;
-#endif /* #ifndef DISABLE_VBR */
-   case SPEEX_SET_HIGHPASS:
-      st->highpass_enabled = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_HIGHPASS:
-      (*(spx_int32_t*)ptr) = st->highpass_enabled;
-      break;
-
-   /* This is all internal stuff past this point */
-   case SPEEX_GET_PI_GAIN:
-      {
-         int i;
-         spx_word32_t *g = (spx_word32_t*)ptr;
-         for (i=0;i<NB_NB_SUBFRAMES;i++)
-            g[i]=st->pi_gain[i];
-      }
-      break;
-   case SPEEX_GET_EXC:
-      {
-         int i;
-         for (i=0;i<NB_NB_SUBFRAMES;i++)
-            ((spx_word16_t*)ptr)[i] = compute_rms16(st->exc+i*NB_SUBFRAME_SIZE, NB_SUBFRAME_SIZE);
-      }
-      break;
-#ifndef DISABLE_VBR
-   case SPEEX_GET_RELATIVE_QUALITY:
-      (*(float*)ptr)=st->relative_quality;
-      break;
-#endif /* #ifndef DISABLE_VBR */
-   case SPEEX_SET_INNOVATION_SAVE:
-      st->innov_rms_save = (spx_word16_t*)ptr;
-      break;
-   case SPEEX_SET_WIDEBAND:
-      st->isWideband = *((spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_STACK:
-      *((char**)ptr) = st->stack;
-      break;
-   default:
-      speex_warning_int("Unknown nb_ctl request: ", request);
-      return -1;
-   }
-   return 0;
-}
-
-
-int nb_encode(void *state, void *vin, SpeexBits *bits)
-{
-   EncState *st;
-   int i, sub, roots;
-   int ol_pitch;
-   spx_word16_t ol_pitch_coef;
-   spx_word32_t ol_gain;
-   VARDECL(spx_word16_t *target);
-   VARDECL(spx_sig_t *innov);
-   VARDECL(spx_word32_t *exc32);
-   VARDECL(spx_mem_t *mem);
-   VARDECL(spx_coef_t *bw_lpc1);
-   VARDECL(spx_coef_t *bw_lpc2);
-   VARDECL(spx_coef_t *lpc);
-   VARDECL(spx_lsp_t *lsp);
-   VARDECL(spx_lsp_t *qlsp);
-   VARDECL(spx_lsp_t *interp_lsp);
-   VARDECL(spx_lsp_t *interp_qlsp);
-   VARDECL(spx_coef_t *interp_lpc);
-   VARDECL(spx_coef_t *interp_qlpc);
-   char *stack;
-   VARDECL(spx_word16_t *syn_resp);
-   
-   spx_word32_t ener=0;
-   spx_word16_t fine_gain;
-   spx_word16_t *in = (spx_word16_t*)vin;
-
-   st=(EncState *)state;
-   stack=st->stack;
-
-   ALLOC(lpc, NB_ORDER, spx_coef_t);
-   ALLOC(bw_lpc1, NB_ORDER, spx_coef_t);
-   ALLOC(bw_lpc2, NB_ORDER, spx_coef_t);
-   ALLOC(lsp, NB_ORDER, spx_lsp_t);
-   ALLOC(qlsp, NB_ORDER, spx_lsp_t);
-   ALLOC(interp_lsp, NB_ORDER, spx_lsp_t);
-   ALLOC(interp_qlsp, NB_ORDER, spx_lsp_t);
-   ALLOC(interp_lpc, NB_ORDER, spx_coef_t);
-   ALLOC(interp_qlpc, NB_ORDER, spx_coef_t);
-
-   st->exc = st->excBuf + NB_PITCH_END + 2;
-   st->sw = st->swBuf + NB_PITCH_END + 2;
-   /* Move signals 1 frame towards the past */
-   SPEEX_MOVE(st->excBuf, st->excBuf+NB_FRAME_SIZE, NB_PITCH_END+2);
-   SPEEX_MOVE(st->swBuf, st->swBuf+NB_FRAME_SIZE, NB_PITCH_END+2);
-
-   if (st->highpass_enabled)
-      highpass(in, in, NB_FRAME_SIZE, (st->isWideband?HIGHPASS_WIDEBAND:HIGHPASS_NARROWBAND)|HIGHPASS_INPUT, st->mem_hp);
-   
-   {
-      VARDECL(spx_word16_t *w_sig);
-      VARDECL(spx_word16_t *autocorr);
-      ALLOC(w_sig, NB_WINDOW_SIZE, spx_word16_t);
-      ALLOC(autocorr, NB_ORDER+1, spx_word16_t);
-      /* Window for analysis */
-      for (i=0;i<NB_WINDOW_SIZE-NB_FRAME_SIZE;i++)
-         w_sig[i] = MULT16_16_Q15(st->winBuf[i],st->window[i]);
-      for (;i<NB_WINDOW_SIZE;i++)
-         w_sig[i] = MULT16_16_Q15(in[i-NB_WINDOW_SIZE+NB_FRAME_SIZE],st->window[i]);
-      /* Compute auto-correlation */
-      _spx_autocorr(w_sig, autocorr, NB_ORDER+1, NB_WINDOW_SIZE);
-      autocorr[0] = ADD16(autocorr[0],MULT16_16_Q15(autocorr[0],st->lpc_floor)); /* Noise floor in auto-correlation domain */
-
-      /* Lag windowing: equivalent to filtering in the power-spectrum domain */
-      for (i=0;i<NB_ORDER+1;i++)
-         autocorr[i] = MULT16_16_Q15(autocorr[i],st->lagWindow[i]);
-      autocorr[0] = ADD16(autocorr[0],1);
-
-      /* Levinson-Durbin */
-      _spx_lpc(lpc, autocorr, NB_ORDER);
-      /* LPC to LSPs (x-domain) transform */
-      roots=lpc_to_lsp (lpc, NB_ORDER, lsp, 10, LSP_DELTA1, stack);
-      /* Check if we found all the roots */
-      if (roots!=NB_ORDER)
-      {
-         /*If we can't find all LSP's, do some damage control and use previous filter*/
-         for (i=0;i<NB_ORDER;i++)
-         {
-            lsp[i]=st->old_lsp[i];
-         }
-      }
-   }
-
-
-
-
-   /* Whole frame analysis (open-loop estimation of pitch and excitation gain) */
-   {
-      int diff = NB_WINDOW_SIZE-NB_FRAME_SIZE;
-      if (st->first)
-         for (i=0;i<NB_ORDER;i++)
-            interp_lsp[i] = lsp[i];
-      else
-         lsp_interpolate(st->old_lsp, lsp, interp_lsp, NB_ORDER, NB_NB_SUBFRAMES, NB_NB_SUBFRAMES<<1, LSP_MARGIN);
-
-      /* Compute interpolated LPCs (unquantized) for whole frame*/
-      lsp_to_lpc(interp_lsp, interp_lpc, NB_ORDER,stack);
-
-
-      /*Open-loop pitch*/
-      if (!st->submodes[st->submodeID] || (st->complexity>2 && SUBMODE(have_subframe_gain)<3) || SUBMODE(forced_pitch_gain) || SUBMODE(lbr_pitch) != -1 
-#ifndef DISABLE_VBR
-           || st->vbr_enabled || st->vad_enabled
-#endif
-                  )
-      {
-         int nol_pitch[6];
-         spx_word16_t nol_pitch_coef[6];
-         
-         bw_lpc(0.9, interp_lpc, bw_lpc1, NB_ORDER);
-         bw_lpc(0.55, interp_lpc, bw_lpc2, NB_ORDER);
-
-         SPEEX_COPY(st->sw, st->winBuf, diff);
-         SPEEX_COPY(st->sw+diff, in, NB_FRAME_SIZE-diff);
-         filter10(st->sw, bw_lpc1, bw_lpc2, st->sw, NB_FRAME_SIZE, st->mem_sw_whole, stack);
-
-         open_loop_nbest_pitch(st->sw, NB_PITCH_START, NB_PITCH_END, NB_FRAME_SIZE, 
-                               nol_pitch, nol_pitch_coef, 6, stack);
-         ol_pitch=nol_pitch[0];
-         ol_pitch_coef = nol_pitch_coef[0];
-         /*Try to remove pitch multiples*/
-         for (i=1;i<6;i++)
-         {
-#ifdef FIXED_POINT
-            if ((nol_pitch_coef[i]>MULT16_16_Q15(nol_pitch_coef[0],27853)) && 
-#else
-            if ((nol_pitch_coef[i]>.85*nol_pitch_coef[0]) && 
-#endif
-                (ABS(2*nol_pitch[i]-ol_pitch)<=2 || ABS(3*nol_pitch[i]-ol_pitch)<=3 || 
-                 ABS(4*nol_pitch[i]-ol_pitch)<=4 || ABS(5*nol_pitch[i]-ol_pitch)<=5))
-            {
-               /*ol_pitch_coef=nol_pitch_coef[i];*/
-               ol_pitch = nol_pitch[i];
-            }
-         }
-         /*if (ol_pitch>50)
-           ol_pitch/=2;*/
-         /*ol_pitch_coef = sqrt(ol_pitch_coef);*/
-
-      } else {
-         ol_pitch=0;
-         ol_pitch_coef=0;
-      }
-      
-      /*Compute "real" excitation*/
-      /*SPEEX_COPY(st->exc, st->winBuf, diff);
-      SPEEX_COPY(st->exc+diff, in, NB_FRAME_SIZE-diff);*/
-      fir_mem16(st->winBuf, interp_lpc, st->exc, diff, NB_ORDER, st->mem_exc, stack);
-      fir_mem16(in, interp_lpc, st->exc+diff, NB_FRAME_SIZE-diff, NB_ORDER, st->mem_exc, stack);
-
-      /* Compute open-loop excitation gain */
-      {
-         spx_word16_t g = compute_rms16(st->exc, NB_FRAME_SIZE);
-         if (st->submodeID!=1 && ol_pitch>0)
-            ol_gain = MULT16_16(g, MULT16_16_Q14(QCONST16(1.1,14),
-                                spx_sqrt(QCONST32(1.,28)-MULT16_32_Q15(QCONST16(.8,15),SHL32(MULT16_16(ol_pitch_coef,ol_pitch_coef),16)))));
-         else
-            ol_gain = SHL32(EXTEND32(g),SIG_SHIFT);
-      }
-   }
-
-#ifdef VORBIS_PSYCHO
-   SPEEX_MOVE(st->psy_window, st->psy_window+NB_FRAME_SIZE, 256-NB_FRAME_SIZE);
-   SPEEX_COPY(&st->psy_window[256-NB_FRAME_SIZE], in, NB_FRAME_SIZE);
-   compute_curve(st->psy, st->psy_window, st->curve);
-   /*print_vec(st->curve, 128, "curve");*/
-   if (st->first)
-      SPEEX_COPY(st->old_curve, st->curve, 128);
-#endif
-
-   /*VBR stuff*/
-#ifndef DISABLE_VBR
-   if (st->vbr_enabled||st->vad_enabled)
-   {
-      float lsp_dist=0;
-      for (i=0;i<NB_ORDER;i++)
-         lsp_dist += (st->old_lsp[i] - lsp[i])*(st->old_lsp[i] - lsp[i]);
-      lsp_dist /= LSP_SCALING*LSP_SCALING;
-      
-      if (st->abr_enabled)
-      {
-         float qual_change=0;
-         if (st->abr_drift2 * st->abr_drift > 0)
-         {
-            /* Only adapt if long-term and short-term drift are the same sign */
-            qual_change = -.00001*st->abr_drift/(1+st->abr_count);
-            if (qual_change>.05)
-               qual_change=.05;
-            if (qual_change<-.05)
-               qual_change=-.05;
-         }
-         st->vbr_quality += qual_change;
-         if (st->vbr_quality>10)
-            st->vbr_quality=10;
-         if (st->vbr_quality<0)
-            st->vbr_quality=0;
-      }
-
-      st->relative_quality = vbr_analysis(&st->vbr, in, NB_FRAME_SIZE, ol_pitch, GAIN_SCALING_1*ol_pitch_coef);
-      /*if (delta_qual<0)*/
-      /*  delta_qual*=.1*(3+st->vbr_quality);*/
-      if (st->vbr_enabled) 
-      {
-         spx_int32_t mode;
-         int choice=0;
-         float min_diff=100;
-         mode = 8;
-         while (mode)
-         {
-            int v1;
-            float thresh;
-            v1=(int)floor(st->vbr_quality);
-            if (v1==10)
-               thresh = vbr_nb_thresh[mode][v1];
-            else
-               thresh = (st->vbr_quality-v1)*vbr_nb_thresh[mode][v1+1] + (1+v1-st->vbr_quality)*vbr_nb_thresh[mode][v1];
-            if (st->relative_quality > thresh && 
-                st->relative_quality-thresh<min_diff)
-            {
-               choice = mode;
-               min_diff = st->relative_quality-thresh;
-            }
-            mode--;
-         }
-         mode=choice;
-         if (mode==0)
-         {
-            if (st->dtx_count==0 || lsp_dist>.05 || !st->dtx_enabled || st->dtx_count>20)
-            {
-               mode=1;
-               st->dtx_count=1;
-            } else {
-               mode=0;
-               st->dtx_count++;
-            }
-         } else {
-            st->dtx_count=0;
-         }
-
-         speex_encoder_ctl(state, SPEEX_SET_MODE, &mode);
-         if (st->vbr_max>0)
-         {
-            spx_int32_t rate;
-            speex_encoder_ctl(state, SPEEX_GET_BITRATE, &rate);
-            if (rate > st->vbr_max)
-            {
-               rate = st->vbr_max;
-               speex_encoder_ctl(state, SPEEX_SET_BITRATE, &rate);
-            }
-         }
-         
-         if (st->abr_enabled)
-         {
-            spx_int32_t bitrate;
-            speex_encoder_ctl(state, SPEEX_GET_BITRATE, &bitrate);
-            st->abr_drift+=(bitrate-st->abr_enabled);
-            st->abr_drift2 = .95*st->abr_drift2 + .05*(bitrate-st->abr_enabled);
-            st->abr_count += 1.0;
-         }
-
-      } else {
-         /*VAD only case*/
-         int mode;
-         if (st->relative_quality<2)
-         {
-            if (st->dtx_count==0 || lsp_dist>.05 || !st->dtx_enabled || st->dtx_count>20)
-            {
-               st->dtx_count=1;
-               mode=1;
-            } else {
-               mode=0;
-               st->dtx_count++;
-            }
-         } else {
-            st->dtx_count = 0;
-            mode=st->submodeSelect;
-         }
-         /*speex_encoder_ctl(state, SPEEX_SET_MODE, &mode);*/
-         st->submodeID=mode;
-      } 
-   } else {
-      st->relative_quality = -1;
-   }
-#endif /* #ifndef DISABLE_VBR */
-
-   if (st->encode_submode)
-   {
-      /* First, transmit a zero for narrowband */
-      speex_bits_pack(bits, 0, 1);
-
-      /* Transmit the sub-mode we use for this frame */
-      speex_bits_pack(bits, st->submodeID, NB_SUBMODE_BITS);
-
-   }
-
-   /* If null mode (no transmission), just set a couple things to zero*/
-   if (st->submodes[st->submodeID] == NULL)
-   {
-      for (i=0;i<NB_FRAME_SIZE;i++)
-         st->exc[i]=st->sw[i]=VERY_SMALL;
-
-      for (i=0;i<NB_ORDER;i++)
-         st->mem_sw[i]=0;
-      st->first=1;
-      st->bounded_pitch = 1;
-
-      SPEEX_COPY(st->winBuf, in+2*NB_FRAME_SIZE-NB_WINDOW_SIZE, NB_WINDOW_SIZE-NB_FRAME_SIZE);
-
-      /* Clear memory (no need to really compute it) */
-      for (i=0;i<NB_ORDER;i++)
-         st->mem_sp[i] = 0;
-      return 0;
-
-   }
-
-   /* LSP Quantization */
-   if (st->first)
-   {
-      for (i=0;i<NB_ORDER;i++)
-         st->old_lsp[i] = lsp[i];
-   }
-
-
-   /*Quantize LSPs*/
-#if 1 /*0 for unquantized*/
-   SUBMODE(lsp_quant)(lsp, qlsp, NB_ORDER, bits);
-#else
-   for (i=0;i<NB_ORDER;i++)
-     qlsp[i]=lsp[i];
-#endif
-
-   /*If we use low bit-rate pitch mode, transmit open-loop pitch*/
-   if (SUBMODE(lbr_pitch)!=-1)
-   {
-      speex_bits_pack(bits, ol_pitch-NB_PITCH_START, 7);
-   } 
-
-   if (SUBMODE(forced_pitch_gain))
-   {
-      int quant;
-      /* This just damps the pitch a bit, because it tends to be too aggressive when forced */
-      ol_pitch_coef = MULT16_16_Q15(QCONST16(.9,15), ol_pitch_coef);
-#ifdef FIXED_POINT
-      quant = PSHR16(MULT16_16_16(15, ol_pitch_coef),GAIN_SHIFT);
-#else
-      quant = (int)floor(.5+15*ol_pitch_coef*GAIN_SCALING_1);
-#endif
-      if (quant>15)
-         quant=15;
-      if (quant<0)
-         quant=0;
-      speex_bits_pack(bits, quant, 4);
-      ol_pitch_coef=MULT16_16_P15(QCONST16(0.066667,15),SHL16(quant,GAIN_SHIFT));
-   }
-   
-   
-   /*Quantize and transmit open-loop excitation gain*/
-#ifdef FIXED_POINT
-   {
-      int qe = scal_quant32(ol_gain, ol_gain_table, 32);
-      /*ol_gain = exp(qe/3.5)*SIG_SCALING;*/
-      ol_gain = MULT16_32_Q15(28406,ol_gain_table[qe]);
-      speex_bits_pack(bits, qe, 5);
-   }
-#else
-   {
-      int qe = (int)(floor(.5+3.5*log(ol_gain*1.0/SIG_SCALING)));
-      if (qe<0)
-         qe=0;
-      if (qe>31)
-         qe=31;
-      ol_gain = exp(qe/3.5)*SIG_SCALING;
-      speex_bits_pack(bits, qe, 5);
-   }
-#endif
-
-
-
-   /* Special case for first frame */
-   if (st->first)
-   {
-      for (i=0;i<NB_ORDER;i++)
-         st->old_qlsp[i] = qlsp[i];
-   }
-
-   /* Target signal */
-   ALLOC(target, NB_SUBFRAME_SIZE, spx_word16_t);
-   ALLOC(innov, NB_SUBFRAME_SIZE, spx_sig_t);
-   ALLOC(exc32, NB_SUBFRAME_SIZE, spx_word32_t);
-   ALLOC(syn_resp, NB_SUBFRAME_SIZE, spx_word16_t);
-   ALLOC(mem, NB_ORDER, spx_mem_t);
-
-   /* Loop on sub-frames */
-   for (sub=0;sub<NB_NB_SUBFRAMES;sub++)
-   {
-      int   offset;
-      spx_word16_t *sw;
-      spx_word16_t *exc, *inBuf;
-      int pitch;
-      int response_bound = NB_SUBFRAME_SIZE;
-
-      /* Offset relative to start of frame */
-      offset = NB_SUBFRAME_SIZE*sub;
-      /* Excitation */
-      exc=st->exc+offset;
-      /* Weighted signal */
-      sw=st->sw+offset;
-      
-      /* LSP interpolation (quantized and unquantized) */
-      lsp_interpolate(st->old_lsp, lsp, interp_lsp, NB_ORDER, sub, NB_NB_SUBFRAMES, LSP_MARGIN);
-      lsp_interpolate(st->old_qlsp, qlsp, interp_qlsp, NB_ORDER, sub, NB_NB_SUBFRAMES, LSP_MARGIN);
-
-      /* Compute interpolated LPCs (quantized and unquantized) */
-      lsp_to_lpc(interp_lsp, interp_lpc, NB_ORDER,stack);
-
-      lsp_to_lpc(interp_qlsp, interp_qlpc, NB_ORDER, stack);
-
-      /* Compute analysis filter gain at w=pi (for use in SB-CELP) */
-      {
-         spx_word32_t pi_g=LPC_SCALING;
-         for (i=0;i<NB_ORDER;i+=2)
-         {
-            /*pi_g += -st->interp_qlpc[i] +  st->interp_qlpc[i+1];*/
-            pi_g = ADD32(pi_g, SUB32(EXTEND32(interp_qlpc[i+1]),EXTEND32(interp_qlpc[i])));
-         }
-         st->pi_gain[sub] = pi_g;
-      }
-
-#ifdef VORBIS_PSYCHO
-      {
-         float curr_curve[128];
-         float fact = ((float)sub+1.0f)/NB_NB_SUBFRAMES;
-         for (i=0;i<128;i++)
-            curr_curve[i] = (1.0f-fact)*st->old_curve[i] + fact*st->curve[i];
-         curve_to_lpc(st->psy, curr_curve, bw_lpc1, bw_lpc2, 10);
-      }
-#else
-      /* Compute bandwidth-expanded (unquantized) LPCs for perceptual weighting */
-      bw_lpc(st->gamma1, interp_lpc, bw_lpc1, NB_ORDER);
-      bw_lpc(st->gamma2, interp_lpc, bw_lpc2, NB_ORDER);
-      /*print_vec(st->bw_lpc1, 10, "bw_lpc");*/
-#endif
-
-      /*FIXME: This will break if we change the window size */
-      speex_assert(NB_WINDOW_SIZE-NB_FRAME_SIZE == NB_SUBFRAME_SIZE);
-      if (sub==0)
-         inBuf = st->winBuf;
-      else
-         inBuf = &in[((sub-1)*NB_SUBFRAME_SIZE)];
-      for (i=0;i<NB_SUBFRAME_SIZE;i++)
-         sw[i] = inBuf[i];
-      
-      if (st->complexity==0)
-         response_bound >>= 1;
-      compute_impulse_response(interp_qlpc, bw_lpc1, bw_lpc2, syn_resp, response_bound, NB_ORDER, stack);
-      for (i=response_bound;i<NB_SUBFRAME_SIZE;i++)
-         syn_resp[i]=VERY_SMALL;
-      
-      /* Compute zero response of A(z/g1) / ( A(z/g2) * A(z) ) */
-      for (i=0;i<NB_ORDER;i++)
-         mem[i]=SHL32(st->mem_sp[i],1);
-      for (i=0;i<NB_SUBFRAME_SIZE;i++)
-         exc[i] = VERY_SMALL;
-#ifdef SHORTCUTS2
-      iir_mem16(exc, interp_qlpc, exc, response_bound, NB_ORDER, mem, stack);
-      for (i=0;i<NB_ORDER;i++)
-         mem[i]=SHL32(st->mem_sw[i],1);
-      filter10(exc, st->bw_lpc1, st->bw_lpc2, exc, response_bound, mem, stack);
-      SPEEX_MEMSET(&exc[response_bound], 0, NB_SUBFRAME_SIZE-response_bound);
-#else
-      iir_mem16(exc, interp_qlpc, exc, NB_SUBFRAME_SIZE, NB_ORDER, mem, stack);
-      for (i=0;i<NB_ORDER;i++)
-         mem[i]=SHL32(st->mem_sw[i],1);
-      filter10(exc, bw_lpc1, bw_lpc2, exc, NB_SUBFRAME_SIZE, mem, stack);
-#endif
-      
-      /* Compute weighted signal */
-      for (i=0;i<NB_ORDER;i++)
-         mem[i]=st->mem_sw[i];
-      filter10(sw, bw_lpc1, bw_lpc2, sw, NB_SUBFRAME_SIZE, mem, stack);
-      
-      if (st->complexity==0)
-         for (i=0;i<NB_ORDER;i++)
-            st->mem_sw[i]=mem[i];
-      
-      /* Compute target signal (saturation prevents overflows on clipped input speech) */
-      for (i=0;i<NB_SUBFRAME_SIZE;i++)
-         target[i]=EXTRACT16(SATURATE(SUB32(sw[i],PSHR32(exc[i],1)),32767));
-
-      for (i=0;i<NB_SUBFRAME_SIZE;i++)
-         exc[i] = inBuf[i];
-      fir_mem16(exc, interp_qlpc, exc, NB_SUBFRAME_SIZE, NB_ORDER, st->mem_exc2, stack);
-      /* If we have a long-term predictor (otherwise, something's wrong) */
-      speex_assert (SUBMODE(ltp_quant));
-      {
-         int pit_min, pit_max;
-         /* Long-term prediction */
-         if (SUBMODE(lbr_pitch) != -1)
-         {
-            /* Low bit-rate pitch handling */
-            int margin;
-            margin = SUBMODE(lbr_pitch);
-            if (margin)
-            {
-               if (ol_pitch < NB_PITCH_START+margin-1)
-                  ol_pitch=NB_PITCH_START+margin-1;
-               if (ol_pitch > NB_PITCH_END-margin)
-                  ol_pitch=NB_PITCH_END-margin;
-               pit_min = ol_pitch-margin+1;
-               pit_max = ol_pitch+margin;
-            } else {
-               pit_min=pit_max=ol_pitch;
-            }
-         } else {
-            pit_min = NB_PITCH_START;
-            pit_max = NB_PITCH_END;
-         }
-         
-         /* Force pitch to use only the current frame if needed */
-         if (st->bounded_pitch && pit_max>offset)
-            pit_max=offset;
-
-         /* Perform pitch search */
-         pitch = SUBMODE(ltp_quant)(target, sw, interp_qlpc, bw_lpc1, bw_lpc2,
-                                    exc32, SUBMODE(ltp_params), pit_min, pit_max, ol_pitch_coef,
-                                    NB_ORDER, NB_SUBFRAME_SIZE, bits, stack, 
-                                    exc, syn_resp, st->complexity, 0, st->plc_tuning, &st->cumul_gain);
-
-         st->pitch[sub]=pitch;
-      }
-      /* Quantization of innovation */
-      SPEEX_MEMSET(innov, 0, NB_SUBFRAME_SIZE);
-      
-      /* FIXME: Make sure this is safe from overflows (so far so good) */
-      for (i=0;i<NB_SUBFRAME_SIZE;i++)
-         exc[i] = EXTRACT16(SUB32(EXTEND32(exc[i]), PSHR32(exc32[i],SIG_SHIFT-1)));
-      
-      ener = SHL32(EXTEND32(compute_rms16(exc, NB_SUBFRAME_SIZE)),SIG_SHIFT);
-      
-      /*FIXME: Should use DIV32_16 and make sure result fits in 16 bits */
-#ifdef FIXED_POINT
-      {
-         spx_word32_t f = PDIV32(ener,PSHR32(ol_gain,SIG_SHIFT));
-         if (f<=32767)
-            fine_gain = f;
-         else
-            fine_gain = 32767;
-      }
-#else
-      fine_gain = PDIV32_16(ener,PSHR32(ol_gain,SIG_SHIFT));
-#endif
-      /* Calculate gain correction for the sub-frame (if any) */
-      if (SUBMODE(have_subframe_gain)) 
-      {
-         int qe;
-         if (SUBMODE(have_subframe_gain)==3)
-         {
-            qe = scal_quant(fine_gain, exc_gain_quant_scal3_bound, 8);
-            speex_bits_pack(bits, qe, 3);
-            ener=MULT16_32_Q14(exc_gain_quant_scal3[qe],ol_gain);
-         } else {
-            qe = scal_quant(fine_gain, exc_gain_quant_scal1_bound, 2);
-            speex_bits_pack(bits, qe, 1);
-            ener=MULT16_32_Q14(exc_gain_quant_scal1[qe],ol_gain);
-         }
-      } else {
-         ener=ol_gain;
-      }
-      
-      /*printf ("%f %f\n", ener, ol_gain);*/
-      
-      /* Normalize innovation */
-      signal_div(target, target, ener, NB_SUBFRAME_SIZE);
-      
-      /* Quantize innovation */
-      speex_assert (SUBMODE(innovation_quant));
-      {
-         /* Codebook search */
-         SUBMODE(innovation_quant)(target, interp_qlpc, bw_lpc1, bw_lpc2, 
-                  SUBMODE(innovation_params), NB_ORDER, NB_SUBFRAME_SIZE, 
-                  innov, syn_resp, bits, stack, st->complexity, SUBMODE(double_codebook));
-         
-         /* De-normalize innovation and update excitation */
-         signal_mul(innov, innov, ener, NB_SUBFRAME_SIZE);
-         
-         /* In some (rare) modes, we do a second search (more bits) to reduce noise even more */
-         if (SUBMODE(double_codebook)) {
-            char *tmp_stack=stack;
-            VARDECL(spx_sig_t *innov2);
-            ALLOC(innov2, NB_SUBFRAME_SIZE, spx_sig_t);
-            SPEEX_MEMSET(innov2, 0, NB_SUBFRAME_SIZE);
-            for (i=0;i<NB_SUBFRAME_SIZE;i++)
-               target[i]=MULT16_16_P13(QCONST16(2.2f,13), target[i]);
-            SUBMODE(innovation_quant)(target, interp_qlpc, bw_lpc1, bw_lpc2, 
-                                      SUBMODE(innovation_params), NB_ORDER, NB_SUBFRAME_SIZE, 
-                                      innov2, syn_resp, bits, stack, st->complexity, 0);
-            signal_mul(innov2, innov2, MULT16_32_Q15(QCONST16(0.454545f,15),ener), NB_SUBFRAME_SIZE);
-            for (i=0;i<NB_SUBFRAME_SIZE;i++)
-               innov[i] = ADD32(innov[i],innov2[i]);
-            stack = tmp_stack;
-         }
-         for (i=0;i<NB_SUBFRAME_SIZE;i++)
-            exc[i] = EXTRACT16(SATURATE32(PSHR32(ADD32(SHL32(exc32[i],1),innov[i]),SIG_SHIFT),32767));
-         if (st->innov_rms_save)
-            st->innov_rms_save[sub] = compute_rms(innov, NB_SUBFRAME_SIZE);
-      }
-
-      /* Final signal synthesis from excitation */
-      iir_mem16(exc, interp_qlpc, sw, NB_SUBFRAME_SIZE, NB_ORDER, st->mem_sp, stack);
-
-      /* Compute weighted signal again, from synthesized speech (not sure it's the right thing) */
-      if (st->complexity!=0)
-         filter10(sw, bw_lpc1, bw_lpc2, sw, NB_SUBFRAME_SIZE, st->mem_sw, stack);
-      
-   }
-
-   /* Store the LSPs for interpolation in the next frame */
-   if (st->submodeID>=1)
-   {
-      for (i=0;i<NB_ORDER;i++)
-         st->old_lsp[i] = lsp[i];
-      for (i=0;i<NB_ORDER;i++)
-         st->old_qlsp[i] = qlsp[i];
-   }
-
-#ifdef VORBIS_PSYCHO
-   if (st->submodeID>=1)
-      SPEEX_COPY(st->old_curve, st->curve, 128);
-#endif
-
-   if (st->submodeID==1)
-   {
-#ifndef DISABLE_VBR
-      if (st->dtx_count)
-         speex_bits_pack(bits, 15, 4);
-      else
-#endif
-         speex_bits_pack(bits, 0, 4);
-   }
-
-   /* The next frame will not be the first (Duh!) */
-   st->first = 0;
-   SPEEX_COPY(st->winBuf, in+2*NB_FRAME_SIZE-NB_WINDOW_SIZE, NB_WINDOW_SIZE-NB_FRAME_SIZE);
-
-   if (SUBMODE(innovation_quant) == noise_codebook_quant || st->submodeID==0)
-      st->bounded_pitch = 1;
-   else
-      st->bounded_pitch = 0;
-
-   return 1;
-}
-#endif /* DISABLE_ENCODER */
-
-
-#ifndef DISABLE_DECODER
-void *nb_decoder_init(const SpeexMode *m)
-{
-   DecState *st;
-   const SpeexNBMode *mode;
-   int i;
-
-   mode=(const SpeexNBMode*)m->mode;
-   st = (DecState *)speex_alloc(sizeof(DecState));
-   if (!st)
-      return NULL;
-#if defined(VAR_ARRAYS) || defined (USE_ALLOCA)
-   st->stack = NULL;
-#else
-   st->stack = (char*)speex_alloc_scratch(NB_DEC_STACK);
-#endif
-
-   st->mode=m;
-
-
-   st->encode_submode = 1;
-
-   st->first=1;
-   /* Codec parameters, should eventually have several "modes"*/
-
-   st->submodes=mode->submodes;
-   st->submodeID=mode->defaultSubmode;
-
-   st->lpc_enh_enabled=1;
-
-   SPEEX_MEMSET(st->excBuf, 0, NB_FRAME_SIZE + NB_PITCH_END);
-
-   st->last_pitch = 40;
-   st->count_lost=0;
-   st->pitch_gain_buf[0] = st->pitch_gain_buf[1] = st->pitch_gain_buf[2] = 0;
-   st->pitch_gain_buf_idx = 0;
-   st->seed = 1000;
-   
-   st->sampling_rate=8000;
-   st->last_ol_gain = 0;
-
-   st->user_callback.func = &speex_default_user_handler;
-   st->user_callback.data = NULL;
-   for (i=0;i<16;i++)
-      st->speex_callbacks[i].func = NULL;
-
-   st->voc_m1=st->voc_m2=st->voc_mean=0;
-   st->voc_offset=0;
-   st->dtx_enabled=0;
-   st->isWideband = 0;
-   st->highpass_enabled = 1;
-
-#ifdef ENABLE_VALGRIND
-   VALGRIND_MAKE_READABLE(st, NB_DEC_STACK);
-#endif
-   return st;
-}
-
-void nb_decoder_destroy(void *state)
-{
-   DecState *st;
-   st=(DecState*)state;
-   
-#if !(defined(VAR_ARRAYS) || defined (USE_ALLOCA))
-   speex_free_scratch(st->stack);
-#endif
-
-   speex_free(state);
-}
-
-int nb_decoder_ctl(void *state, int request, void *ptr)
-{
-   DecState *st;
-   st=(DecState*)state;
-   switch(request)
-   {
-   case SPEEX_SET_LOW_MODE:
-   case SPEEX_SET_MODE:
-      st->submodeID = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_LOW_MODE:
-   case SPEEX_GET_MODE:
-      (*(spx_int32_t*)ptr) = st->submodeID;
-      break;
-   case SPEEX_SET_ENH:
-      st->lpc_enh_enabled = *((spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_ENH:
-      *((spx_int32_t*)ptr) = st->lpc_enh_enabled;
-      break;
-   case SPEEX_GET_FRAME_SIZE:
-      (*(spx_int32_t*)ptr) = NB_FRAME_SIZE;
-      break;
-   case SPEEX_GET_BITRATE:
-      if (st->submodes[st->submodeID])
-         (*(spx_int32_t*)ptr) = st->sampling_rate*SUBMODE(bits_per_frame)/NB_FRAME_SIZE;
-      else
-         (*(spx_int32_t*)ptr) = st->sampling_rate*(NB_SUBMODE_BITS+1)/NB_FRAME_SIZE;
-      break;
-   case SPEEX_SET_SAMPLING_RATE:
-      st->sampling_rate = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_SAMPLING_RATE:
-      (*(spx_int32_t*)ptr)=st->sampling_rate;
-      break;
-   case SPEEX_SET_HANDLER:
-      {
-         SpeexCallback *c = (SpeexCallback*)ptr;
-         st->speex_callbacks[c->callback_id].func=c->func;
-         st->speex_callbacks[c->callback_id].data=c->data;
-         st->speex_callbacks[c->callback_id].callback_id=c->callback_id;
-      }
-      break;
-   case SPEEX_SET_USER_HANDLER:
-      {
-         SpeexCallback *c = (SpeexCallback*)ptr;
-         st->user_callback.func=c->func;
-         st->user_callback.data=c->data;
-         st->user_callback.callback_id=c->callback_id;
-      }
-      break;
-   case SPEEX_RESET_STATE:
-      {
-         int i;
-         for (i=0;i<NB_ORDER;i++)
-            st->mem_sp[i]=0;
-         for (i=0;i<NB_FRAME_SIZE + NB_PITCH_END + 1;i++)
-            st->excBuf[i]=0;
-      }
-      break;
-   case SPEEX_SET_SUBMODE_ENCODING:
-      st->encode_submode = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_SUBMODE_ENCODING:
-      (*(spx_int32_t*)ptr) = st->encode_submode;
-      break;
-   case SPEEX_GET_LOOKAHEAD:
-      (*(spx_int32_t*)ptr)=NB_SUBFRAME_SIZE;
-      break;
-   case SPEEX_SET_HIGHPASS:
-      st->highpass_enabled = (*(spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_HIGHPASS:
-      (*(spx_int32_t*)ptr) = st->highpass_enabled;
-      break;
-      /* FIXME: Convert to fixed-point and re-enable even when float API is disabled */
-#ifndef DISABLE_FLOAT_API
-   case SPEEX_GET_ACTIVITY:
-   {
-      float ret;
-      ret = log(st->level/st->min_level)/log(st->max_level/st->min_level);
-      if (ret>1)
-         ret = 1;
-      /* Done in a strange way to catch NaNs as well */
-      if (!(ret > 0))
-         ret = 0;
-      /*printf ("%f %f %f %f\n", st->level, st->min_level, st->max_level, ret);*/
-      (*(spx_int32_t*)ptr) = (int)(100*ret);
-   }
-   break;
-#endif
-   case SPEEX_GET_PI_GAIN:
-      {
-         int i;
-         spx_word32_t *g = (spx_word32_t*)ptr;
-         for (i=0;i<NB_NB_SUBFRAMES;i++)
-            g[i]=st->pi_gain[i];
-      }
-      break;
-   case SPEEX_GET_EXC:
-      {
-         int i;
-         for (i=0;i<NB_NB_SUBFRAMES;i++)
-            ((spx_word16_t*)ptr)[i] = compute_rms16(st->exc+i*NB_SUBFRAME_SIZE, NB_SUBFRAME_SIZE);
-      }
-      break;
-   case SPEEX_GET_DTX_STATUS:
-      *((spx_int32_t*)ptr) = st->dtx_enabled;
-      break;
-   case SPEEX_SET_INNOVATION_SAVE:
-      st->innov_save = (spx_word16_t*)ptr;
-      break;
-   case SPEEX_SET_WIDEBAND:
-      st->isWideband = *((spx_int32_t*)ptr);
-      break;
-   case SPEEX_GET_STACK:
-      *((char**)ptr) = st->stack;
-      break;
-   default:
-      speex_warning_int("Unknown nb_ctl request: ", request);
-      return -1;
-   }
-   return 0;
-}
-
-
-#define median3(a, b, c)       ((a) < (b) ? ((b) < (c) ? (b) : ((a) < (c) ? (c) : (a))) : ((c) < (b) ? (b) : ((c) < (a) ? (c) : (a))))
-
-#ifdef FIXED_POINT
-const spx_word16_t attenuation[10] = {32767, 31483, 27923, 22861, 17278, 12055, 7764, 4616, 2533, 1283};
-#else
-const spx_word16_t attenuation[10] = {1., 0.961, 0.852, 0.698, 0.527, 0.368, 0.237, 0.141, 0.077, 0.039};
-
-#endif
-
-static void nb_decode_lost(DecState *st, spx_word16_t *out, char *stack)
-{
-   int i;
-   int pitch_val;
-   spx_word16_t pitch_gain;
-   spx_word16_t fact;
-   spx_word16_t gain_med;
-   spx_word16_t innov_gain;
-   spx_word16_t noise_gain;
-
-   st->exc = st->excBuf + 2*NB_PITCH_END + NB_SUBFRAME_SIZE + 6;
-
-   if (st->count_lost<10)
-      fact = attenuation[st->count_lost];
-   else
-      fact = 0;
-
-   gain_med = median3(st->pitch_gain_buf[0], st->pitch_gain_buf[1], st->pitch_gain_buf[2]);
-   if (gain_med < st->last_pitch_gain)
-      st->last_pitch_gain = gain_med;
-   
-#ifdef FIXED_POINT
-   pitch_gain = st->last_pitch_gain;
-   if (pitch_gain>54)
-      pitch_gain = 54;
-   pitch_gain = SHL16(pitch_gain, 9);
-#else   
-   pitch_gain = GAIN_SCALING_1*st->last_pitch_gain;
-   if (pitch_gain>.85)
-      pitch_gain=.85;
-#endif
-   pitch_gain = MULT16_16_Q15(fact,pitch_gain) + VERY_SMALL;
-   /* FIXME: This was rms of innovation (not exc) */
-   innov_gain = compute_rms16(st->exc, NB_FRAME_SIZE);
-   noise_gain = MULT16_16_Q15(innov_gain, MULT16_16_Q15(fact, SUB16(Q15ONE,MULT16_16_Q15(pitch_gain,pitch_gain))));
-   /* Shift all buffers by one frame */
-   SPEEX_MOVE(st->excBuf, st->excBuf+NB_FRAME_SIZE, 2*NB_PITCH_END + NB_SUBFRAME_SIZE + 12);
-   
-
-   pitch_val = st->last_pitch + SHR32((spx_int32_t)speex_rand(1+st->count_lost, &st->seed),SIG_SHIFT);
-   if (pitch_val > NB_PITCH_END)
-      pitch_val = NB_PITCH_END;
-   if (pitch_val < NB_PITCH_START)
-      pitch_val = NB_PITCH_START;
-   for (i=0;i<NB_FRAME_SIZE;i++)
-   {
-      st->exc[i]= MULT16_16_Q15(pitch_gain, (st->exc[i-pitch_val]+VERY_SMALL)) + 
-            speex_rand(noise_gain, &st->seed);
-   }
-
-   bw_lpc(QCONST16(.98,15), st->interp_qlpc, st->interp_qlpc, NB_ORDER);
-   iir_mem16(&st->exc[-NB_SUBFRAME_SIZE], st->interp_qlpc, out, NB_FRAME_SIZE,
-             NB_ORDER, st->mem_sp, stack);
-   highpass(out, out, NB_FRAME_SIZE, HIGHPASS_NARROWBAND|HIGHPASS_OUTPUT, st->mem_hp);
-   
-   st->first = 0;
-   st->count_lost++;
-   st->pitch_gain_buf[st->pitch_gain_buf_idx++] = PSHR16(pitch_gain,9);
-   if (st->pitch_gain_buf_idx > 2) /* rollover */
-      st->pitch_gain_buf_idx = 0;
-}
-
-/* Just so we don't need to carry the complete wideband mode information */
-static const int wb_skip_table[8] = {0, 36, 112, 192, 352, 0, 0, 0};
-   
-int nb_decode(void *state, SpeexBits *bits, void *vout)
-{
-   DecState *st;
-   int i, sub;
-   int pitch;
-   spx_word16_t pitch_gain[3];
-   spx_word32_t ol_gain=0;
-   int ol_pitch=0;
-   spx_word16_t ol_pitch_coef=0;
-   int best_pitch=40;
-   spx_word16_t best_pitch_gain=0;
-   int wideband;
-   int m;
-   char *stack;
-   VARDECL(spx_sig_t *innov);
-   VARDECL(spx_word32_t *exc32);
-   VARDECL(spx_coef_t *ak);
-   VARDECL(spx_lsp_t *qlsp);
-   spx_word16_t pitch_average=0;
-   
-   spx_word16_t *out = (spx_word16_t*)vout;
-   VARDECL(spx_lsp_t *interp_qlsp);
-
-   st=(DecState*)state;
-   stack=st->stack;
-
-   st->exc = st->excBuf + 2*NB_PITCH_END + NB_SUBFRAME_SIZE + 6;
-
-   /* Check if we're in DTX mode*/
-   if (!bits && st->dtx_enabled)
-   {
-      st->submodeID=0;
-   } else 
-   {
-      /* If bits is NULL, consider the packet to be lost (what could we do anyway) */
-      if (!bits)
-      {
-         nb_decode_lost(st, out, stack);
-         return 0;
-      }
-
-      if (st->encode_submode)
-      {
-
-      /* Search for next narrowband block (handle requests, skip wideband blocks) */
-      do {
-         if (speex_bits_remaining(bits)<5)
-            return -1;
-         wideband = speex_bits_unpack_unsigned(bits, 1);
-         if (wideband) /* Skip wideband block (for compatibility) */
-         {
-            int submode;
-            int advance;
-            advance = submode = speex_bits_unpack_unsigned(bits, SB_SUBMODE_BITS);
-            /*speex_mode_query(&speex_wb_mode, SPEEX_SUBMODE_BITS_PER_FRAME, &advance);*/
-            advance = wb_skip_table[submode];
-            if (advance < 0)
-            {
-               speex_notify("Invalid mode encountered. The stream is corrupted.");
-               return -2;
-            } 
-            advance -= (SB_SUBMODE_BITS+1);
-            speex_bits_advance(bits, advance);
-            
-            if (speex_bits_remaining(bits)<5)
-               return -1;
-            wideband = speex_bits_unpack_unsigned(bi