From 74c67a8df5c588fd733820eb2f5f3ff59de0e4a3 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin Date: Mon, 30 Oct 2023 17:14:43 -0400 Subject: [PATCH] Fix CELT PLC for single packet between losses Avoids switching to CNG unless we just have a "refresh packet" --- celt/celt_decoder.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/celt/celt_decoder.c b/celt/celt_decoder.c index ac1b4fed..32e26f1b 100644 --- a/celt/celt_decoder.c +++ b/celt/celt_decoder.c @@ -708,6 +708,8 @@ static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, int N, int LM celt_synthesis(mode, X, out_syn, oldBandE, start, effEnd, C, C, 0, LM, st->downsample, 0, st->arch); st->prefilter_and_fold = 0; + /* Skip regular PLC until we get two consecutive packets. */ + st->skip_plc = 1; } else { int exc_length; /* Pitch-based PLC */ @@ -1118,7 +1120,7 @@ int celt_decode_with_ec_dred(CELTDecoder * OPUS_RESTRICT st, const unsigned char /* Check if there are at least two packets received consecutively before * turning on the pitch-based PLC */ - st->skip_plc = st->loss_duration != 0; + if (st->loss_duration == 0) st->skip_plc = 0; if (dec == NULL) {