shithub: opus

Download patch

ref: c066af1bf155c5157aa67f355d808be119d79fd1
parent: 6f99a3382d241c83a53709ab9dd3308aa11efbb1
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Mon Nov 20 20:13:30 EST 2023

Use SILK VBR when using CBR with DRED

DRED will absorb the bitrate variation

--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -1844,7 +1844,14 @@
         }
         if (st->silk_mode.useCBR)
         {
+           /* When we're in CBR mode, but we have non-SILK data to encode, switch SILK to VBR with cap to
+              save on complexity. Any variations will be absorbed by CELT and/or DRED and we can still
+              produce a constant bitrate without wasting bits. */
+#ifdef ENABLE_DRED
+           if (st->mode == MODE_HYBRID || dred_bitrate_bps > 0)
+#else
            if (st->mode == MODE_HYBRID)
+#endif
            {
               /* Allow SILK to steal up to 25% of the remaining bits */
               opus_int16 other_bits = IMAX(0, st->silk_mode.maxBits - st->silk_mode.bitRate * frame_size / st->Fs);
--