Switch iteration over channels to the do{}while(); construct in order to inform the...
authorGregory Maxwell <greg@xiph.org>
Fri, 5 Nov 2010 00:45:09 +0000 (20:45 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Fri, 5 Nov 2010 03:52:43 +0000 (23:52 -0400)
libcelt/bands.c
libcelt/celt.c
libcelt/quant_bands.c

index 8c91889..8fd21d6 100644 (file)
@@ -70,8 +70,7 @@ void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bank
    const celt_int16 *eBands = m->eBands;
    const int C = CHANNELS(_C);
    N = M*m->shortMdctSize;
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       for (i=0;i<end;i++)
       {
          int j;
@@ -98,7 +97,7 @@ void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bank
          }
          /*printf ("%f ", bank[i+c*m->nbEBands]);*/
       }
-   }
+   } while (++c<C);
    /*printf ("\n");*/
 }
 
@@ -109,8 +108,7 @@ void normalise_bands(const CELTMode *m, const celt_sig * restrict freq, celt_nor
    const celt_int16 *eBands = m->eBands;
    const int C = CHANNELS(_C);
    N = M*m->shortMdctSize;
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       i=0; do {
          celt_word16 g;
          int j,shift;
@@ -122,7 +120,7 @@ void normalise_bands(const CELTMode *m, const celt_sig * restrict freq, celt_nor
             X[j+c*N] = MULT16_16_Q15(VSHR32(freq[j+c*N],shift-1),g);
          } while (++j<M*eBands[i+1]);
       } while (++i<end);
-   }
+   } while (++c<C);
 }
 
 #else /* FIXED_POINT */
@@ -133,8 +131,7 @@ void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bank
    const celt_int16 *eBands = m->eBands;
    const int C = CHANNELS(_C);
    N = M*m->shortMdctSize;
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       for (i=0;i<end;i++)
       {
          int j;
@@ -144,7 +141,7 @@ void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bank
          bank[i+c*m->nbEBands] = celt_sqrt(sum);
          /*printf ("%f ", bank[i+c*m->nbEBands]);*/
       }
-   }
+   } while (++c<C);
    /*printf ("\n");*/
 }
 
@@ -155,8 +152,7 @@ void normalise_bands(const CELTMode *m, const celt_sig * restrict freq, celt_nor
    const celt_int16 *eBands = m->eBands;
    const int C = CHANNELS(_C);
    N = M*m->shortMdctSize;
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       for (i=0;i<end;i++)
       {
          int j;
@@ -164,7 +160,7 @@ void normalise_bands(const CELTMode *m, const celt_sig * restrict freq, celt_nor
          for (j=M*eBands[i];j<M*eBands[i+1];j++)
             X[j+c*N] = freq[j+c*N]*g;
       }
-   }
+   } while (++c<C);
 }
 
 #endif /* FIXED_POINT */
@@ -177,8 +173,7 @@ void denormalise_bands(const CELTMode *m, const celt_norm * restrict X, celt_sig
    const int C = CHANNELS(_C);
    N = M*m->shortMdctSize;
    celt_assert2(C<=2, "denormalise_bands() not implemented for >2 channels");
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       celt_sig * restrict f;
       const celt_norm * restrict x;
       f = freq+c*N;
@@ -196,7 +191,7 @@ void denormalise_bands(const CELTMode *m, const celt_norm * restrict X, celt_sig
       }
       for (i=M*eBands[m->nbEBands];i<N;i++)
          *f++ = 0;
-   }
+   } while (++c<C);
 }
 
 static void intensity_stereo(const CELTMode *m, celt_norm *X, celt_norm *Y, const celt_ener *bank, int bandID, int N)
@@ -299,8 +294,7 @@ int folding_decision(const CELTMode *m, celt_norm *X, int *average, int *last_de
 
    if (M*(eBands[end]-eBands[end-1]) <= 8)
       return 0;
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       for (i=0;i<end;i++)
       {
          int j, N, tmp=0;
@@ -327,7 +321,7 @@ int folding_decision(const CELTMode *m, celt_norm *X, int *average, int *last_de
          sum += tmp*256;
          nbBands++;
       }
-   }
+   } while (++c<C);
    sum /= nbBands;
    /* Recursive averaging */
    sum = (sum+*average)>>1;
@@ -386,12 +380,11 @@ void measure_norm_mse(const CELTMode *m, float *X, float *X0, float *bandE, floa
       float g;
       if (bandE0[i]<10 || (C==2 && bandE0[i+m->nbEBands]<1))
          continue;
-      for (c=0;c<C;c++)
-      {
+      c=0; do {
          g = bandE[i+c*m->nbEBands]/(1e-15+bandE0[i+c*m->nbEBands]);
          for (j=M*m->eBands[i];j<M*m->eBands[i+1];j++)
             MSE[i] += (g*X[j+c*N]-X0[j+c*N])*(g*X[j+c*N]-X0[j+c*N]);
-      }
+      } while (++c<C);
       MSECount[i]+=C;
    }
    nbMSEBands = m->nbEBands;
@@ -509,8 +502,7 @@ static void quant_band(int encode, const CELTMode *m, int i, celt_norm *X, celt_
    {
       int c;
       celt_norm *x = X;
-      for (c=0;c<1+stereo;c++)
-      {
+      c=0; do {
          int sign=0;
          if (*remaining_bits>=1<<BITRES)
          {
@@ -527,7 +519,7 @@ static void quant_band(int encode, const CELTMode *m, int i, celt_norm *X, celt_
          if (resynth)
             x[0] = sign ? -NORM_SCALING : NORM_SCALING;
          x = Y;
-      }
+      } while (++c<1+stereo);
       if (lowband_out)
          lowband_out[0] = SHR16(X[0],4);
       return;
index e34a45f..404a770 100644 (file)
@@ -274,8 +274,7 @@ static void compute_mdcts(const CELTMode *mode, int shortBlocks, celt_sig * rest
          B = shortBlocks;
       }
       ALLOC(tmp, N, celt_word32);
-      for (c=0;c<C;c++)
-      {
+      c=0; do {
          for (b=0;b<B;b++)
          {
             int j;
@@ -284,7 +283,7 @@ static void compute_mdcts(const CELTMode *mode, int shortBlocks, celt_sig * rest
             for (j=0;j<N;j++)
                out[(j*B+b)+c*N*B] = tmp[j];
          }
-      }
+      } while (++c<C);
       RESTORE_STACK;
    }
 }
@@ -299,8 +298,7 @@ static void compute_inv_mdcts(const CELTMode *mode, int shortBlocks, celt_sig *X
    const int C = CHANNELS(_C);
    const int N = mode->shortMdctSize<<LM;
    const int overlap = OVERLAP(mode);
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       int j;
          VARDECL(celt_word32, x);
          VARDECL(celt_word32, tmp);
@@ -335,15 +333,14 @@ static void compute_inv_mdcts(const CELTMode *mode, int shortBlocks, celt_sig *X
          for (j=0;j<overlap;j++)
             overlap_mem[c][j] = x[N+j];
          RESTORE_STACK;
-   }
+   } while (++c<C);
 }
 
 static void deemphasis(celt_sig *in[], celt_word16 *pcm, int N, int _C, const celt_word16 *coef, celt_sig *mem)
 {
    const int C = CHANNELS(_C);
    int c;
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       int j;
       celt_sig * restrict x;
       celt_word16  * restrict y;
@@ -361,7 +358,7 @@ static void deemphasis(celt_sig *in[], celt_word16 *pcm, int N, int _C, const ce
          y+=C;
       }
       mem[c] = m;
-   }
+   } while (++c<C);
 }
 
 #ifdef ENABLE_POSTFILTER
@@ -629,13 +626,12 @@ static int alloc_trim_analysis(const CELTMode *m, const celt_norm *X,
 #if 0
    float diff=0;
    int c;
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       for (i=0;i<nbEBands-1;i++)
       {
          diff += bandLogE[i+c*nbEBands]*(i-.5*nbEBands);
       }
-   }
+   } while (++c<0);
    diff /= C*(nbEBands-1);
    /*printf("%f\n", diff);*/
    if (diff > 4)
@@ -737,8 +733,7 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
       pre[0] = _pre;
       pre[1] = _pre + (N+COMBFILTER_MAXPERIOD);
 
-      for (c=0;c<C;c++)
-      {
+      c=0; do {
          const celt_word16 * restrict pcmp = pcm+c;
          celt_sig * restrict inp = in+c*(N+st->overlap)+st->overlap;
 
@@ -754,7 +749,7 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
          }
          CELT_COPY(pre[c], prefilter_mem+c*COMBFILTER_MAXPERIOD, COMBFILTER_MAXPERIOD);
          CELT_COPY(pre[c]+COMBFILTER_MAXPERIOD, in+c*(N+st->overlap)+st->overlap, N);
-      }
+      } while (++c<C);
 
 #ifdef ENABLE_POSTFILTER
       {
@@ -804,8 +799,7 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
       ec_enc_bit_prob(enc, 0, 32768);
 #endif /* ENABLE_POSTFILTER */
 
-      for (c=0;c<C;c++)
-      {
+      c=0; do {
          CELT_COPY(in+c*(N+st->overlap), st->in_mem+c*(st->overlap), st->overlap);
 #ifdef ENABLE_POSTFILTER
          comb_filter(in+c*(N+st->overlap)+st->overlap, pre[c]+COMBFILTER_MAXPERIOD,
@@ -822,7 +816,7 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
             CELT_MOVE(prefilter_mem+c*COMBFILTER_MAXPERIOD+COMBFILTER_MAXPERIOD-N, pre[c]+COMBFILTER_MAXPERIOD, N);
          }
 #endif /* ENABLE_POSTFILTER */
-      }
+      } while (++c<C);
 
       RESTORE_STACK;
    }
@@ -1018,9 +1012,10 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
 #ifdef MEASURE_NORM_MSE
    float X0[3000];
    float bandE0[60];
-   for (c=0;c<C;c++)
+   c=0; do 
       for (i=0;i<N;i++)
          X0[i+c*N] = X[i+c*N];
+   while (++c<C);
    for (i=0;i<C*st->mode->nbEBands;i++)
       bandE0[i] = bandE[i];
 #endif
@@ -1050,30 +1045,32 @@ int celt_encode_with_ec_float(CELTEncoder * restrict st, const celt_sig * pcm, i
       if (C==2)
          CELT_MOVE(st->syn_mem[1], st->syn_mem[1]+N, MAX_PERIOD);
 
-      for (c=0;c<C;c++)
+      c=0; do
          for (i=0;i<M*st->mode->eBands[st->start];i++)
             freq[c*N+i] = 0;
-      for (c=0;c<C;c++)
+      while (++c<C);
+      c=0; do
          for (i=M*st->mode->eBands[st->end];i<N;i++)
             freq[c*N+i] = 0;
+      while (++c<C);
 
       out_mem[0] = st->syn_mem[0]+MAX_PERIOD;
       if (C==2)
          out_mem[1] = st->syn_mem[1]+MAX_PERIOD;
 
-      for (c=0;c<C;c++)
+      c=0; do
          overlap_mem[c] = _overlap_mem + c*st->overlap;
+      while (++c<C);
 
       compute_inv_mdcts(st->mode, shortBlocks, freq, out_mem, overlap_mem, C, LM);
 
 #ifdef ENABLE_POSTFILTER
-      for (c=0;c<C;c++)
-      {
+      c=0; do {
          comb_filter(out_mem[c], out_mem[c], st->prefilter_period, st->prefilter_period, st->overlap, C,
                st->prefilter_gain, st->prefilter_gain, NULL, 0);
          comb_filter(out_mem[c]+st->overlap, out_mem[c]+st->overlap, st->prefilter_period, pitch_index, N-st->overlap, C,
                st->prefilter_gain, gain1, st->mode->window, st->mode->overlap);
-      }
+      } while (++c<C);
 #endif /* ENABLE_POSTFILTER */
 
       deemphasis(out_mem, (celt_word16*)pcm, N, C, st->mode->preemph, st->preemph_memD);
@@ -1368,12 +1365,11 @@ static void celt_decode_lost(CELTDecoder * restrict st, celt_word16 * restrict p
    celt_word16 *lpc;
    SAVE_STACK;
    
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       decode_mem[c] = st->_decode_mem + c*(DECODE_BUFFER_SIZE+st->overlap);
       out_mem[c] = decode_mem[c]+DECODE_BUFFER_SIZE-MAX_PERIOD;
       overlap_mem[c] = decode_mem[c]+DECODE_BUFFER_SIZE;
-   }
+   } while (++c<C);
    lpc = (celt_word16*)(st->_decode_mem+(DECODE_BUFFER_SIZE+st->overlap)*C);
 
    len = N+st->mode->overlap;
@@ -1402,8 +1398,7 @@ static void celt_decode_lost(CELTDecoder * restrict st, celt_word16 * restrict p
          fade = 0;
    }
 
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       /* FIXME: This is more memory than necessary */
       celt_word32 e[2*MAX_PERIOD];
       celt_word16 exc[2*MAX_PERIOD];
@@ -1532,7 +1527,7 @@ static void celt_decode_lost(CELTDecoder * restrict st, celt_word16 * restrict p
 #endif /* ENABLE_POSTFILTER */
       for (i=0;i<overlap;i++)
          out_mem[c][MAX_PERIOD+i] = e[i];
-   }
+   } while (++c<C);
 
    {
       celt_word32 *out_syn[2];
@@ -1597,12 +1592,11 @@ int celt_decode_with_ec_float(CELTDecoder * restrict st, const unsigned char *da
       return CELT_BAD_ARG;
    M=1<<LM;
 
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       decode_mem[c] = st->_decode_mem + c*(DECODE_BUFFER_SIZE+st->overlap);
       out_mem[c] = decode_mem[c]+DECODE_BUFFER_SIZE-MAX_PERIOD;
       overlap_mem[c] = decode_mem[c]+DECODE_BUFFER_SIZE;
-   }
+   } while (++c<C);
    lpc = (celt_word16*)(st->_decode_mem+(DECODE_BUFFER_SIZE+st->overlap)*C);
    oldBandE = lpc+C*LPC_ORDER;
 
@@ -1615,12 +1609,14 @@ int celt_decode_with_ec_float(CELTDecoder * restrict st, const unsigned char *da
    ALLOC(freq, C*N, celt_sig); /**< Interleaved signal MDCTs */
    ALLOC(X, C*N, celt_norm);   /**< Interleaved normalised MDCTs */
    ALLOC(bandE, st->mode->nbEBands*C, celt_ener);
-   for (c=0;c<C;c++)
+   c=0; do
       for (i=0;i<M*st->mode->eBands[st->start];i++)
          X[c*N+i] = 0;
-   for (c=0;c<C;c++)
+   while (++c<C);
+   c=0; do   
       for (i=M*st->mode->eBands[effEnd];i<N;i++)
          X[c*N+i] = 0;
+   while (++c<C);
 
    if (data == NULL)
    {
@@ -1731,12 +1727,14 @@ int celt_decode_with_ec_float(CELTDecoder * restrict st, const unsigned char *da
    if (C==2)
       CELT_MOVE(decode_mem[1], decode_mem[1]+N, DECODE_BUFFER_SIZE-N);
 
-   for (c=0;c<C;c++)
+   c=0; do
       for (i=0;i<M*st->mode->eBands[st->start];i++)
          freq[c*N+i] = 0;
-   for (c=0;c<C;c++)
+   while (++c<C);
+   c=0; do
       for (i=M*st->mode->eBands[effEnd];i<N;i++)
          freq[c*N+i] = 0;
+   while (++c<C);
 
    out_syn[0] = out_mem[0]+MAX_PERIOD-N;
    if (C==2)
@@ -1746,13 +1744,12 @@ int celt_decode_with_ec_float(CELTDecoder * restrict st, const unsigned char *da
    compute_inv_mdcts(st->mode, shortBlocks, freq, out_syn, overlap_mem, C, LM);
 
 #ifdef ENABLE_POSTFILTER
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       comb_filter(out_syn[c], out_syn[c], st->postfilter_period, st->postfilter_period, st->overlap, C,
             st->postfilter_gain, st->postfilter_gain, NULL, 0);
       comb_filter(out_syn[c]+st->overlap, out_syn[c]+st->overlap, st->postfilter_period, postfilter_pitch, N-st->overlap, C,
             st->postfilter_gain, postfilter_gain, st->mode->window, st->mode->overlap);
-   }
+   } while (++c<C);
    st->postfilter_period = postfilter_pitch;
    st->postfilter_gain = postfilter_gain;
 #endif /* ENABLE_POSTFILTER */
index b493ab9..e3fbb61 100644 (file)
@@ -74,14 +74,13 @@ static int intra_decision(const celt_word16 *eBands, celt_word16 *oldEBands, int
 {
    int c, i;
    celt_word32 dist = 0;
-   for (c=0;c<C;c++)
-   {
+   c=0; do {
       for (i=start;i<end;i++)
       {
          celt_word16 d = SHR16(SUB16(eBands[i+c*len], oldEBands[i+c*len]),2);
          dist = MAC16_16(dist, d,d);
       }
-   }
+   } while (++c<C);
    return SHR32(dist,2*DB_SHIFT-4) > 2*C*(end-start);
 }