Don't use too much temporal resolution on hybrid frames at low rate
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Mon, 6 Jun 2016 20:54:29 +0000 (16:54 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Tue, 19 Jul 2016 20:11:50 +0000 (16:11 -0400)
Otherwise, we risk having "temporal holes" in the HF that anti-collapse
can't always fill in.

celt/celt_encoder.c

index 98cf4a8..29f67c9 100644 (file)
@@ -1772,6 +1772,13 @@ int celt_encode_with_ec(CELTEncoder * OPUS_RESTRICT st, const opus_val16 * pcm,
       tf_select = tf_analysis(mode, effEnd, isTransient, tf_res, lambda, X, N, LM, &tf_sum, tf_estimate, tf_chan);
       for (i=effEnd;i<end;i++)
          tf_res[i] = tf_res[effEnd-1];
+   } else if (hybrid && effectiveBytes<15)
+   {
+      /* For low bitrate hybrid, we force temporal resolution to 5 ms rather than 2.5 ms. */
+      tf_sum = 0;
+      for (i=0;i<end;i++)
+         tf_res[i] = 0;
+      tf_select=isTransient;
    } else {
       tf_sum = 0;
       for (i=0;i<end;i++)