resample: Calculate full sinc table (e.g. no sinc interpolation)
authorJyri Sarha <jsarha@ti.com>
Thu, 1 Sep 2011 12:30:27 +0000 (15:30 +0300)
committerTristan Matthews <le.businessman@gmail.com>
Wed, 2 Jul 2014 15:24:18 +0000 (11:24 -0400)
On many systems taking couple of kilo-bytes for full sinc table is not
a problem. With a straight filter table the number of MAC operations
needed drops to one quarter. Also the inner loop of the filter becomes
more simple and easier to optimize. So the full sinc table version
runs much faster in most cases. The trade off is some kilo-bytes
bigger memory usage and more CPU needed when initializing the
resampler.

configure.ac: Add --enable-resample-full-sinc-table conf flag

Use this flag to enable resampling with full sinc table.

configure.ac
libspeexdsp/resample.c

index 2ba0b13..9ce4f97 100644 (file)
@@ -168,6 +168,11 @@ AC_ARG_ENABLE(fixed-point-debug, [  --enable-fixed-point-debug  Debug fixed-poin
   AC_DEFINE([FIXED_DEBUG], , [Debug fixed-point implementation])
 fi])
 
+AC_ARG_ENABLE(resample-full-sinc-table, [  --enable-resample-full-sinc-table Resample full SINC table (no interpolation)],
+[if test "$enableval" = yes; then
+  AC_DEFINE([RESAMPLE_FULL_SINC_TABLE], , [Resample with full SINC table (no interpolation)])
+fi])
+
 AC_ARG_ENABLE(ti-c55x, [  --enable-ti-c55x        Enable support for TI C55X DSP],
 [if test "$enableval" = yes; then
   has_char16=yes;
index 2edb5b6..63346c2 100644 (file)
@@ -585,7 +585,11 @@ static void update_filter(SpeexResamplerState *st)
    }
    
    /* Choose the resampling type that requires the least amount of memory */
+#ifdef RESAMPLE_FULL_SINC_TABLE
+   if (1)
+#else
    if (st->filt_len*st->den_rate <= st->filt_len*st->oversample+8)
+#endif
    {
       spx_uint32_t i;
       if (!st->sinc_table)