Don't call denormalise_bands() on silence
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Sun, 16 Jun 2013 19:40:10 +0000 (15:40 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Sun, 16 Jun 2013 19:40:10 +0000 (15:40 -0400)
celt/celt_decoder.c
celt/celt_encoder.c

index 4d1903a..1b243cd 100644 (file)
@@ -916,19 +916,18 @@ int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *dat
    ALLOC(bandE, nbEBands*C, celt_ener);
 
    log2Amp(mode, st->start, st->end, bandE, oldBandE, C);
+   ALLOC(freq, IMAX(CC,C)*N, celt_sig); /**< Interleaved signal MDCTs */
 
    if (silence)
    {
       for (i=0;i<C*nbEBands;i++)
-      {
-         bandE[i] = 0;
          oldBandE[i] = -QCONST16(28.f,DB_SHIFT);
-      }
+      for (i=0;i<C*N;i++)
+         freq[i] = 0;
+   } else {
+      /* Synthesis */
+      denormalise_bands(mode, X, freq, bandE, st->start, effEnd, C, M);
    }
-   ALLOC(freq, IMAX(CC,C)*N, celt_sig); /**< Interleaved signal MDCTs */
-   /* Synthesis */
-   denormalise_bands(mode, X, freq, bandE, st->start, effEnd, C, M);
-
    c=0; do {
       OPUS_MOVE(decode_mem[c], decode_mem[c]+N, DECODE_BUFFER_SIZE-N+overlap/2);
    } while (++c<CC);
index 7c12e8b..59b77f4 100644 (file)
@@ -1887,24 +1887,24 @@ int celt_encode_with_ec(CELTEncoder * OPUS_RESTRICT st, const opus_val16 * pcm,
    {
       celt_sig *out_mem[2];
 
-      log2Amp(mode, st->start, st->end, bandE, oldBandE, C);
-      if (silence)
-      {
-         for (i=0;i<C*nbEBands;i++)
-            bandE[i] = 0;
-      }
-
-#ifdef MEASURE_NORM_MSE
-      measure_norm_mse(mode, X, X0, bandE, bandE0, M, N, C);
-#endif
       if (anti_collapse_on)
       {
          anti_collapse(mode, X, collapse_masks, LM, C, N,
                st->start, st->end, oldBandE, oldLogE, oldLogE2, pulses, st->rng);
       }
 
-      /* Synthesis */
-      denormalise_bands(mode, X, freq, bandE, st->start, effEnd, C, M);
+      log2Amp(mode, st->start, st->end, bandE, oldBandE, C);
+      if (silence)
+      {
+         for (i=0;i<C*N;i++)
+            freq[i] = 0;
+      } else {
+#ifdef MEASURE_NORM_MSE
+         measure_norm_mse(mode, X, X0, bandE, bandE0, M, N, C);
+#endif
+         /* Synthesis */
+         denormalise_bands(mode, X, freq, bandE, st->start, effEnd, C, M);
+      }
 
       c=0; do {
          OPUS_MOVE(st->syn_mem[c], st->syn_mem[c]+N, 2*MAX_PERIOD-N+overlap/2);