media/libspeex_resampler/hugemem.patch
author Nick Alexander <nalexander@mozilla.com>
Thu, 26 Oct 2017 15:49:41 -0700
changeset 389045 d4baaf271606ac5cbdbbd22495bf42ed73ac3d38
parent 347149 c8df499e005abc1438c394dfa72257e369097d7d
permissions -rw-r--r--
Bug 1411667 - Remove Spoon plugin references entirely. r=maliu Spoon and some Gradle work allowed to run certain JUnit 3 test suites locally. At the time, running the various test suites was diffficult. Fast forward, and it's easier to run these suites, and in general they are only run in Android Studio. This will only get better as we move the background services tests into a separate module (Bug 1229149). MozReview-Commit-ID: KZTWmkhwi96

diff --git a/media/libspeex_resampler/src/resample.c b/media/libspeex_resampler/src/resample.c
--- a/media/libspeex_resampler/src/resample.c
+++ b/media/libspeex_resampler/src/resample.c
@@ -56,16 +56,18 @@
    (e.g. 2/3), and get rid of the rounding operations in the inner loop.
    The latter both reduces CPU time and makes the algorithm more SIMD-friendly.
 */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
+#define RESAMPLE_HUGEMEM 1
+
 #ifdef OUTSIDE_SPEEX
 #include <stdlib.h>
 static void *speex_alloc (int size) {return calloc(size,1);}
 static void *speex_realloc (void *ptr, int size) {return realloc(ptr, size);}
 static void speex_free (void *ptr) {free(ptr);}
 #include "speex_resampler.h"
 #include "arch.h"
 #else /* OUTSIDE_SPEEX */
@@ -643,25 +645,26 @@ static int update_filter(SpeexResamplerS
          st->oversample >>= 1;
       if (st->oversample < 1)
          st->oversample = 1;
    } else {
       /* up-sampling */
       st->cutoff = quality_map[st->quality].upsample_bandwidth;
    }
 
-   /* Choose the resampling type that requires the least amount of memory */
-#ifdef RESAMPLE_FULL_SINC_TABLE
-   use_direct = 1;
-   if (INT_MAX/sizeof(spx_word16_t)/st->den_rate < st->filt_len)
-      goto fail;
+   use_direct =
+#ifdef RESAMPLE_HUGEMEM
+      /* Choose the direct resampler, even with higher initialization costs,
+         when resampling any multiple of 100 to 44100. */
+      st->den_rate <= 441
 #else
-   use_direct = st->filt_len*st->den_rate <= st->filt_len*st->oversample+8
+      /* Choose the resampling type that requires the least amount of memory */
+      st->filt_len*st->den_rate <= st->filt_len*st->oversample+8
+#endif
                 && INT_MAX/sizeof(spx_word16_t)/st->den_rate >= st->filt_len;
-#endif
    if (use_direct)
    {
       min_sinc_table_length = st->filt_len*st->den_rate;
    } else {
       if ((INT_MAX/sizeof(spx_word16_t)-8)/st->oversample < st->filt_len)
          goto fail;
 
       min_sinc_table_length = st->filt_len*st->oversample+8;