ref: 8bead7488ea4b18749f385141b68febc0726ce2b
parent: 8e6e049f28e96096908eb1d7304498e9167cd8ea
author: Jean-Marc Valin <jeanmarcv@google.com>
date: Tue Sep 24 06:17:48 EDT 2024
Don't crash OpusCustom when neural PLC is enabled
--- a/celt/celt_decoder.c
+++ b/celt/celt_decoder.c
@@ -641,10 +641,10 @@
loss_duration = st->loss_duration;
start = st->start;
#ifdef ENABLE_DEEP_PLC
- noise_based = start != 0 || (lpcnet->fec_fill_pos == 0 && (st->skip_plc || loss_duration >= 80));
-#else
- noise_based = loss_duration >= 40 || start != 0 || st->skip_plc;
+ if (lpcnet != NULL) noise_based = start != 0 || (lpcnet->fec_fill_pos == 0 && (st->skip_plc || loss_duration >= 80));
+ else
#endif
+ noise_based = loss_duration >= 40 || start != 0 || st->skip_plc;
if (noise_based)
{
/* Noise-based PLC/CNG */
@@ -710,7 +710,7 @@
if (loss_duration == 0)
{
#ifdef ENABLE_DEEP_PLC
- if (lpcnet->loaded) update_plc_state(lpcnet, decode_mem, &st->plc_preemphasis_mem, C);
+ if (lpcnet != NULL && lpcnet->loaded) update_plc_state(lpcnet, decode_mem, &st->plc_preemphasis_mem, C);
#endif
st->last_pitch_index = pitch_index = celt_plc_pitch_search(decode_mem, C, st->arch);
} else {
@@ -903,7 +903,7 @@
} while (++c<C);
#ifdef ENABLE_DEEP_PLC
- if (lpcnet->loaded && (st->complexity >= 5 || lpcnet->fec_fill_pos > 0)) {
+ if (lpcnet != NULL && lpcnet->loaded && (st->complexity >= 5 || lpcnet->fec_fill_pos > 0)) {
float overlap_mem;
int samples_needed16k;
celt_sig *buf;
--
⑨