Adjusting the allocation for stereo directly in the alloc function rather than
authorJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Wed, 14 Oct 2009 00:35:21 +0000 (20:35 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Wed, 14 Oct 2009 00:35:21 +0000 (20:35 -0400)
in the table.

libcelt/modes.c
libcelt/rate.c

index 032aafa..056d67a 100644 (file)
@@ -184,7 +184,6 @@ static void compute_allocation_table(CELTMode *mode, int res)
 {
    int i, j, nBark;
    celt_int16_t *allocVectors;
-   const int C = CHANNELS(mode);
 
    /* Find the number of critical bands supported by our sampling rate */
    for (nBark=1;nBark<BARK_BANDS;nBark++)
@@ -205,8 +204,7 @@ static void compute_allocation_table(CELTMode *mode, int res)
          int edge, low;
          celt_int32_t alloc;
          edge = mode->eBands[eband+1]*res;
-         alloc = band_allocation[i*BARK_BANDS+j];
-         alloc = alloc*C*mode->mdctSize;
+         alloc = mode->mdctSize*band_allocation[i*BARK_BANDS+j];
          if (edge < bark_freq[j+1])
          {
             int num, den;
index a275843..0b49a5a 100644 (file)
@@ -175,6 +175,7 @@ static void interp_bits2pulses(const CELTMode *m, int *bits1, int *bits2, int to
 void compute_allocation(const CELTMode *m, int *offsets, int total, int *pulses, int *ebits, int *fine_priority)
 {
    int lo, hi, len, j;
+   const int C = CHANNELS(m);
    VARDECL(int, bits1);
    VARDECL(int, bits2);
    SAVE_STACK;
@@ -191,7 +192,7 @@ void compute_allocation(const CELTMode *m, int *offsets, int total, int *pulses,
       int mid = (lo+hi) >> 1;
       for (j=0;j<len;j++)
       {
-         bits1[j] = (m->allocVectors[mid*len+j] + offsets[j])<<BITRES;
+         bits1[j] = (C*m->allocVectors[mid*len+j] + offsets[j])<<BITRES;
          if (bits1[j] < 0)
             bits1[j] = 0;
          psum += bits1[j];
@@ -207,8 +208,8 @@ void compute_allocation(const CELTMode *m, int *offsets, int total, int *pulses,
    /*printf ("interp between %d and %d\n", lo, hi);*/
    for (j=0;j<len;j++)
    {
-      bits1[j] = m->allocVectors[lo*len+j] + offsets[j];
-      bits2[j] = m->allocVectors[hi*len+j] + offsets[j];
+      bits1[j] = C*m->allocVectors[lo*len+j] + offsets[j];
+      bits2[j] = C*m->allocVectors[hi*len+j] + offsets[j];
       if (bits1[j] < 0)
          bits1[j] = 0;
       if (bits2[j] < 0)