Fixes issues when downmixing to mono or when encoding below fullband
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 12 Jan 2012 09:08:46 +0000 (04:08 -0500)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Fri, 13 Jul 2012 18:50:36 +0000 (14:50 -0400)
celt/celt.c

index a079702..3995c93 100644 (file)
@@ -1336,6 +1336,7 @@ int celt_encode_with_ec(CELTEncoder * restrict st, const opus_val16 * pcm, int f
    {
       for (i=0;i<N;i++)
          freq[i] = ADD32(HALF32(freq[i]), HALF32(freq[N+i]));
+      tf_chan = 0;
    }
    if (st->upsample != 1)
    {
@@ -1359,7 +1360,7 @@ int celt_encode_with_ec(CELTEncoder * restrict st, const opus_val16 * pcm, int f
    if (shortBlocks)
    {
       VARDECL(celt_sig, freq2);
-      ALLOC(freq2, C*N, celt_sig);
+      ALLOC(freq2, CC*N, celt_sig);
       compute_mdcts(st->mode, 0, in, freq2, CC, LM);
       if (CC==2&&C==1)
       {
@@ -1445,11 +1446,11 @@ int celt_encode_with_ec(CELTEncoder * restrict st, const opus_val16 * pcm, int f
       c=0;do
       {
          follower[c*st->mode->nbEBands] = bandLogE2[c*st->mode->nbEBands];
-         for (i=1;i<st->mode->nbEBands;i++)
+         for (i=1;i<st->end;i++)
             follower[c*st->mode->nbEBands+i] = MIN16(follower[c*st->mode->nbEBands+i-1]+QCONST16(1.5f,DB_SHIFT), bandLogE2[c*st->mode->nbEBands+i]);
-         for (i=st->end-2;i>=0;i--)
+         for (i=effEnd-2;i>=0;i--)
             follower[c*st->mode->nbEBands+i] = MIN16(follower[c*st->mode->nbEBands+i], MIN16(follower[c*st->mode->nbEBands+i+1]+QCONST16(2.f,DB_SHIFT), bandLogE2[c*st->mode->nbEBands+i]));
-      } while (++c<2);
+      } while (++c<C);
       if (C==2)
       {
          for (i=st->start;i<st->end;i++)