From d7ce091b1c459eafcbbb43a3e15c2590f5657b24 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <jmvalin@amazon.com> Date: Fri, 19 May 2023 14:14:40 -0400 Subject: [PATCH] Don't run the DRED encoder unless DRED is enabled --- silk/control.h | 3 +++ silk/enc_API.c | 8 ++++++-- src/opus_encoder.c | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/silk/control.h b/silk/control.h index b76ec33cd..8d2392d33 100644 --- a/silk/control.h +++ b/silk/control.h @@ -77,6 +77,9 @@ typedef struct { /* I: Flag to enable in-band Forward Error Correction (FEC); 0/1 */ opus_int useInBandFEC; + /* I: Flag to enable in-band Deep REDundancy (DRED); 0/1 */ + opus_int useDRED; + /* I: Flag to actually code in-band Forward Error Correction (FEC) in the current packet; 0/1 */ opus_int LBRR_coded; diff --git a/silk/enc_API.c b/silk/enc_API.c index 45d67877b..bdb858afc 100644 --- a/silk/enc_API.c +++ b/silk/enc_API.c @@ -469,8 +469,12 @@ opus_int silk_Encode( /* O Returns error co silk_encode_do_VAD_Fxx( &psEnc->state_Fxx[ 0 ], activity ); #ifdef ENABLE_NEURAL_FEC - /* DRED Encoder */ - dred_process_silk_frame( &psEnc->state_Fxx[ 0 ].sCmn.dred_encoder, &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[0] ); + if ( encControl->useDRED ) { + /* DRED Encoder */ + dred_process_silk_frame( &psEnc->state_Fxx[ 0 ].sCmn.dred_encoder, &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[0] ); + } else { + psEnc->state_Fxx[ 0 ].sCmn.dred_encoder.latents_buffer_fill = 0; + } #endif /* Encode */ diff --git a/src/opus_encoder.c b/src/opus_encoder.c index c6675a617..3764b373c 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -227,6 +227,7 @@ int opus_encoder_init(OpusEncoder* st, opus_int32 Fs, int channels, int applicat st->silk_mode.packetLossPercentage = 0; st->silk_mode.complexity = 9; st->silk_mode.useInBandFEC = 0; + st->silk_mode.useDRED = 0; st->silk_mode.useDTX = 0; st->silk_mode.useCBR = 0; st->silk_mode.reducedDependency = 0; @@ -2733,6 +2734,7 @@ int opus_encoder_ctl(OpusEncoder *st, int request, ...) goto bad_arg; } st->dred_duration = value; + st->silk_mode.useDRED = !!value; } break; case OPUS_GET_DRED_DURATION_REQUEST: -- GitLab