shithub: opus

Download patch

ref: 7b73c9bc7ff8e54bb6b72aad500bdab5d031aee0
parent: 19dd96b3fa02b7f9d0817770c4b42879d23d048d
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Tue Jan 23 14:22:05 EST 2024

More DRED tuning

--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -597,9 +597,15 @@
       dred_frac = MIN16(.7f, 3.f*st->silk_mode.packetLossPercentage/100.f);
       bitrate_offset = 20000;
    } else {
-      dred_frac = MIN16(.8f, 4.f*st->silk_mode.packetLossPercentage/100.f);
+      if (st->silk_mode.packetLossPercentage > 5) {
+         dred_frac = MIN16(.8f, .55f + st->silk_mode.packetLossPercentage/100.f);
+      } else {
+         dred_frac = 12*st->silk_mode.packetLossPercentage/100.f;
+      }
       bitrate_offset = 12000;
    }
+   /* Account for the fact that longer packets require less redundancy. */
+   dred_frac = dred_frac/(dred_frac + (1-dred_frac)*(frame_size*50.f)/st->Fs);
    /* Approximate fit based on a few experiments. Could probably be improved. */
    q0 = IMIN(15, IMAX(4, 51 - 3*EC_ILOG(IMAX(1, bitrate_bps-bitrate_offset))));
    dQ = bitrate_bps-bitrate_offset > 36000 ? 3 : 5;
--