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