shithub: opus

Download patch

ref: 28503d92e8a44b4ad0313de8e3320a806e7683ce
parent: 0f7085439681d3709a2dc447cf2b3db14bf154e6
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Mon Jun 5 14:05:33 EDT 2023

Fix units for dred_offset in API

--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -669,7 +669,7 @@
       /* if blend==0, the last PLC call was "update" and we need to feed two extra 10-ms frames. */
       if (st->lpcnet.blend == 0) needed_feature_frames+=2;
       for (i=0;i<needed_feature_frames;i++) {
-         int feature_offset = (needed_feature_frames-i-1 + (dred_offset/(st->Fs/100)-1)*features_per_frame);
+         int feature_offset = (needed_feature_frames-i-1 + (dred_offset/(st->Fs/100)-2));
          if (feature_offset <= 4*dred->nb_latents-1) {
            lpcnet_plc_fec_add(&st->lpcnet, dred->fec_features+feature_offset*DRED_NUM_FEATURES);
          } else {
--- a/src/opus_demo.c
+++ b/src/opus_demo.c
@@ -854,9 +854,9 @@
                 opus_int32 output_samples=0;
                 int dred_input;
                 opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&output_samples));
-                dred_input = lost_count*output_samples*100/sampling_rate;
+                dred_input = lost_count*output_samples;
                 /* Only decode the amount we need to fill in the gap. */
-                opus_dred_parse(dred_dec, dred, data, len, IMIN(100, IMAX(0, dred_input))*480, 48000, 0);
+                opus_dred_parse(dred_dec, dred, data, len, IMIN(48000, IMAX(0, dred_input)), sampling_rate, 0);
             }
             /* FIXME: Figure out how to trigger the decoder when the last packet of the file is lost. */
             for (fr=0;fr<run_decoder;fr++) {
@@ -866,7 +866,7 @@
                    output_samples = opus_decode(dec, data, len, out, output_samples, 1);
                 } else if (fr < lost_count) {
                    opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&output_samples));
-                   output_samples = opus_decoder_dred_decode(dec, dred, (lost_count-fr)*sampling_rate/100, out, output_samples);
+                   output_samples = opus_decoder_dred_decode(dec, dred, (lost_count-fr)*output_samples, out, output_samples);
                 } else {
                    output_samples = max_frame_size;
                    output_samples = opus_decode(dec, data, len, out, output_samples, 0);
--