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);
--
⑨