From 579c9d6b0ec2e96d47c9c5245f4b1eb2cc45ada9 Mon Sep 17 00:00:00 2001
From: Jean-Marc Valin <jmvalin@amazon.com>
Date: Tue, 20 Dec 2022 22:04:15 -0500
Subject: [PATCH] Clear FEC buffer on new dred packet

Fixes "FEC buffer full" issue
---
 lpcnet             | 2 +-
 src/opus_decoder.c | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/lpcnet b/lpcnet
index dc30fbef3..0ac0d1df9 160000
--- a/lpcnet
+++ b/lpcnet
@@ -1 +1 @@
-Subproject commit dc30fbef3fe48fa9e5d87860c6b21efb02db5f45
+Subproject commit 0ac0d1df9a586db99b7ee00b69b3542d701c220e
diff --git a/src/opus_decoder.c b/src/opus_decoder.c
index f8de4e490..4c238a8ac 100644
--- a/src/opus_decoder.c
+++ b/src/opus_decoder.c
@@ -1118,10 +1118,13 @@ int opus_decoder_dred_input(OpusDecoder *st, const unsigned char *data,
    if (payload != NULL)
    {
       int min_feature_frames;
+      silk_decoder_state *silk_dec;
+      silk_dec = (silk_decoder_state*)((char*)st+st->silk_dec_offset);
       /*printf("Found: %p of size %d\n", payload, payload_len);*/
       min_feature_frames = IMIN(2 + offset, 2*DRED_NUM_REDUNDANCY_FRAMES);
       st->nb_fec_frames = dred_decode_redundancy_package(&st->dred_decoder, st->fec_features, payload, payload_len, min_feature_frames);
-      return 1;
+      lpcnet_plc_fec_clear(silk_dec->sPLC.lpcnet);
+      return st->nb_fec_frames;
    }
    return 0;
 }
-- 
GitLab