Making sure we can use up to 128 pulses.
authorJean-Marc Valin <jean-marc.valin@octasic.com>
Mon, 18 Oct 2010 20:20:00 +0000 (16:20 -0400)
committerJean-Marc Valin <jean-marc.valin@octasic.com>
Mon, 18 Oct 2010 20:20:00 +0000 (16:20 -0400)
Previous limit was effectively 120.

libcelt/rate.c
libcelt/rate.h

index d1163d5..e9b3afc 100644 (file)
@@ -81,6 +81,7 @@ void compute_pulse_cache(CELTMode *m, int LM)
    cindex = celt_alloc(sizeof(cache->index[0])*m->nbEBands*(LM+2));
    cache->index = cindex;
 
+   /* Scan for all unique band sizes */
    for (i=0;i<=LM+1;i++)
    {
       int j;
@@ -89,6 +90,7 @@ void compute_pulse_cache(CELTMode *m, int LM)
          int k;
          int N = (eBands[j+1]-eBands[j])<<i>>1;
          cindex[i*m->nbEBands+j] = -1;
+         /* Find other bands that have the same size */
          for (k=0;k<=i;k++)
          {
             int n;
@@ -106,7 +108,7 @@ void compute_pulse_cache(CELTMode *m, int LM)
             int K;
             entryN[nbEntries] = N;
             K = 0;
-            while (fits_in32(N,get_pulses(K+1)) && K<MAX_PSEUDO-1)
+            while (fits_in32(N,get_pulses(K+1)) && K<MAX_PSEUDO)
                K++;
             entryK[nbEntries] = K;
             cindex[i*m->nbEBands+j] = curr;
@@ -120,11 +122,12 @@ void compute_pulse_cache(CELTMode *m, int LM)
    bits = celt_alloc(sizeof(unsigned char)*curr);
    cache->bits = bits;
    cache->size = curr;
+   /* Compute the cache for all unique sizes */
    for (i=0;i<nbEntries;i++)
    {
       int j;
       unsigned char *ptr = bits+entryI[i];
-      celt_int16 tmp[MAX_PULSES];
+      celt_int16 tmp[MAX_PULSES+1];
       get_required_bits(tmp, entryN[i], get_pulses(entryK[i]), BITRES);
       for (j=1;j<=entryK[i];j++)
          ptr[j] = tmp[get_pulses(j)]-1;
index 7269633..0a53649 100644 (file)
@@ -36,8 +36,7 @@
 #define MAX_PSEUDO 40
 #define LOG_MAX_PSEUDO 6
 
-#define MAX_PULSES 256
-#define LOG_MAX_PULSES 7
+#define MAX_PULSES 128
 
 #define BITRES 3
 #define FINE_OFFSET 21
@@ -67,7 +66,6 @@ static inline int bits2pulses(const CELTMode *m, int band, int LM, int bits)
 
    lo = 0;
    hi = cache[0];
-   //for (i=0;i<=hi;i++) printf ("%d ", cache[i]); printf ("\n");
    for (i=0;i<LOG_MAX_PSEUDO;i++)
    {
       int mid = (lo+hi)>>1;