diff --git a/silk/control.h b/silk/control.h index b76ec33cd6ddb6386f564e1d99d3ff57d7e693ad..8d2392d33b9a5593be8514f3721f75a93775fd71 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 45d67877ba5d1f6a8073b81f10f2b03cb27af5eb..bdb858afc1ee5302702087edf1db7c161c501fc5 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 c6675a617782d04fe227582310476af7fb9c6ca8..3764b373caaadbc5be82a725f4cf9232fee2e4d6 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: