shithub: opus

Download patch

ref: 095abafcb7b7e64a7a9fe58e789aa9f03ceeb669
parent: 83c26e713c004fea99eaa98a8062ac5a86817eb9
author: Jean-Marc Valin <[email protected]>
date: Sun Jun 14 05:29:51 EDT 2009

Simplifying the stereo energy quantisation functions now that energy is
de-interleaved

--- a/libcelt/quant_bands.c
+++ b/libcelt/quant_bands.c
@@ -294,152 +294,62 @@
 
 unsigned quant_coarse_energy(const CELTMode *m, celt_word16_t *eBands, celt_word16_t *oldEBands, int budget, int intra, int *prob, celt_word16_t *error, ec_enc *enc)
 {
-   int C;
+   int C, c;
+   unsigned maxBudget=0;
+   
    C = m->nbChannels;
 
-   if (C==1)
+   for (c=0;c<C;c++)
    {
-      return quant_coarse_energy_mono(m, eBands, oldEBands, budget, intra, prob, error, enc);
-   } else {
-      int c;
-      unsigned maxBudget=0;
-      for (c=0;c<C;c++)
-      {
-         int i;
-         unsigned coarse_needed;
-         VARDECL(celt_word16_t, E);
-         SAVE_STACK;
-         ALLOC(E, m->nbEBands, celt_word16_t);
-         for (i=0;i<m->nbEBands;i++)
-            E[i] = eBands[i+c*m->nbEBands];
-         coarse_needed=quant_coarse_energy_mono(m, E, oldEBands+c*m->nbEBands, budget/C, intra, prob, error+c*m->nbEBands, enc);
-         maxBudget=IMAX(maxBudget,coarse_needed);
-         RESTORE_STACK;
-      }
-      return maxBudget*C;
+      unsigned coarse_needed;
+      coarse_needed=quant_coarse_energy_mono(m, eBands+c*m->nbEBands, oldEBands+c*m->nbEBands, budget/C, intra, prob, error+c*m->nbEBands, enc);
+      maxBudget=IMAX(maxBudget,coarse_needed);
    }
+   return maxBudget*C;
 }
 
 void quant_fine_energy(const CELTMode *m, celt_ener_t *eBands, celt_word16_t *oldEBands, celt_word16_t *error, int *fine_quant, ec_enc *enc)
 {
-   int C;
+   int C, c;
    C = m->nbChannels;
 
-   if (C==1)
-   {
-      quant_fine_energy_mono(m, eBands, oldEBands, error, fine_quant, enc);
-
-   } else {
-      int c;
-      VARDECL(celt_ener_t, E);
-      ALLOC(E, m->nbEBands, celt_ener_t);
-      for (c=0;c<C;c++)
-      {
-         int i;
-         SAVE_STACK;
-         quant_fine_energy_mono(m, E, oldEBands+c*m->nbEBands, error+c*m->nbEBands, fine_quant, enc);
-         for (i=0;i<m->nbEBands;i++)
-            eBands[i+c*m->nbEBands] = E[i];
-         RESTORE_STACK;
-      }
-   }
+   for (c=0;c<C;c++)
+      quant_fine_energy_mono(m, eBands+c*m->nbEBands, oldEBands+c*m->nbEBands, error+c*m->nbEBands, fine_quant, enc);
 }
 
 void quant_energy_finalise(const CELTMode *m, celt_ener_t *eBands, celt_word16_t *oldEBands, celt_word16_t *error, int *fine_quant, int *fine_priority, int bits_left, ec_enc *enc)
 {
-   int C;
+   int C, c;
    C = m->nbChannels;
 
-   if (C==1)
-   {
-      quant_energy_finalise_mono(m, eBands, oldEBands, error, fine_quant, fine_priority, bits_left, enc);
-
-   } else {
-      int c;
-      VARDECL(celt_ener_t, E);
-      ALLOC(E, m->nbEBands, celt_ener_t);
-      for (c=0;c<C;c++)
-      {
-         int i;
-         SAVE_STACK;
-         quant_energy_finalise_mono(m, E, oldEBands+c*m->nbEBands, error+c*m->nbEBands, fine_quant, fine_priority, bits_left/C, enc);
-         for (i=0;i<m->nbEBands;i++)
-            eBands[i+c*m->nbEBands] = E[i];
-         RESTORE_STACK;
-      }
-   }
+   for (c=0;c<C;c++)
+      quant_energy_finalise_mono(m, eBands+c*m->nbEBands, oldEBands+c*m->nbEBands, error+c*m->nbEBands, fine_quant, fine_priority, bits_left/C, enc);
 }
 
 void unquant_coarse_energy(const CELTMode *m, celt_ener_t *eBands, celt_word16_t *oldEBands, int budget, int intra, int *prob, ec_dec *dec)
 {
-   int C;   
+   int C, c;
 
    C = m->nbChannels;
-   if (C==1)
-   {
-      unquant_coarse_energy_mono(m, eBands, oldEBands, budget, intra, prob, dec);
-   }
-   else {
-      int c;
-      VARDECL(celt_ener_t, E);
-      SAVE_STACK;
-      ALLOC(E, m->nbEBands, celt_ener_t);
-      for (c=0;c<C;c++)
-      {
-         unquant_coarse_energy_mono(m, E, oldEBands+c*m->nbEBands, budget/C, intra, prob, dec);
-      }
-      RESTORE_STACK;
-   }
+   for (c=0;c<C;c++)
+      unquant_coarse_energy_mono(m, eBands+c*m->nbEBands, oldEBands+c*m->nbEBands, budget/C, intra, prob, dec);
 }
 
 void unquant_fine_energy(const CELTMode *m, celt_ener_t *eBands, celt_word16_t *oldEBands, int *fine_quant, ec_dec *dec)
 {
-   int C;   
-
+   int C, c;
    C = m->nbChannels;
 
-   if (C==1)
-   {
-      unquant_fine_energy_mono(m, eBands, oldEBands, fine_quant, dec);
-   }
-   else {
-      int c;
-      VARDECL(celt_ener_t, E);
-      SAVE_STACK;
-      ALLOC(E, m->nbEBands, celt_ener_t);
-      for (c=0;c<C;c++)
-      {
-         int i;
-         unquant_fine_energy_mono(m, E, oldEBands+c*m->nbEBands, fine_quant, dec);
-         for (i=0;i<m->nbEBands;i++)
-            eBands[i+c*m->nbEBands] = E[i];
-      }
-      RESTORE_STACK;
-   }
+   for (c=0;c<C;c++)
+      unquant_fine_energy_mono(m, eBands+c*m->nbEBands, oldEBands+c*m->nbEBands, fine_quant, dec);
 }
 
 void unquant_energy_finalise(const CELTMode *m, celt_ener_t *eBands, celt_word16_t *oldEBands, int *fine_quant, int *fine_priority, int bits_left, ec_dec *dec)
 {
-   int C;
+   int C, c;
 
    C = m->nbChannels;
 
-   if (C==1)
-   {
-      unquant_energy_finalise_mono(m, eBands, oldEBands, fine_quant, fine_priority, bits_left, dec);
-   }
-   else {
-      int c;
-      VARDECL(celt_ener_t, E);
-      SAVE_STACK;
-      ALLOC(E, m->nbEBands, celt_ener_t);
-      for (c=0;c<C;c++)
-      {
-         int i;
-         unquant_energy_finalise_mono(m, E, oldEBands+c*m->nbEBands, fine_quant, fine_priority, bits_left/C, dec);
-         for (i=0;i<m->nbEBands;i++)
-            eBands[i+c*m->nbEBands] = E[i];
-      }
-      RESTORE_STACK;
-   }
+   for (c=0;c<C;c++)
+      unquant_energy_finalise_mono(m, eBands+c*m->nbEBands, oldEBands+c*m->nbEBands, fine_quant, fine_priority, bits_left/C, dec);
 }