diff --git a/silk/silk_enc_API.c b/silk/silk_enc_API.c index 383ea7f5acf6196efce58d92ac500b9d15652fe1..8e0315b81fd571bc1a7748c04fdafc3e5755549c 100644 --- a/silk/silk_enc_API.c +++ b/silk/silk_enc_API.c @@ -302,9 +302,11 @@ opus_int silk_Encode( } } - /* High-pass filter */ - psEnc->state_Fxx[ 0 ].sCmn.HP_cutoff_Hz = encControl->HP_cutoff_Hz; - silk_HP_variable_cutoff( psEnc->state_Fxx, psEnc->nChannelsInternal ); + /* High-pass filter, deactivated if less than zero */ + if(encControl->HP_cutoff_Hz>=0) { + psEnc->state_Fxx[ 0 ].sCmn.HP_cutoff_Hz = encControl->HP_cutoff_Hz; + silk_HP_variable_cutoff( psEnc->state_Fxx, psEnc->nChannelsInternal ); + } /* Total target bits for packet */ nBits = SKP_DIV32_16( SKP_MUL( encControl->bitRate, encControl->payloadSize_ms ), 1000 ); diff --git a/src/opus_encoder.c b/src/opus_encoder.c index 4186e32bd620fe5fd48a83bd8e3c72e93607be0e..7f980a158663b8f5be0c510cb4007cd1d28baa67 100644 --- a/src/opus_encoder.c +++ b/src/opus_encoder.c @@ -326,7 +326,10 @@ int opus_encode_float(OpusEncoder *st, const opus_val16 *pcm, int frame_size, /* Mode selection depending on application and signal type */ if (st->application==OPUS_APPLICATION_VOIP) { - opus_int32 threshold = 20000; + opus_int32 threshold; + threshold = 20000; + /* OPUS_APPLICATION_VOIP default to auto high-pass */ + st->silk_mode.HP_cutoff_Hz=0; /* Hysteresis */ if (st->prev_mode == MODE_CELT_ONLY) threshold -= 4000; @@ -342,6 +345,8 @@ int opus_encode_float(OpusEncoder *st, const opus_val16 *pcm, int frame_size, opus_int32 threshold; /* SILK/CELT threshold is higher for voice than for music */ threshold = 36000; + /* OPUS_APPLICATION_AUDIO disables the high-pass */ + st->silk_mode.HP_cutoff_Hz=-1; if (st->signal_type == OPUS_SIGNAL_MUSIC) threshold -= 20000; else if (st->signal_type == OPUS_SIGNAL_VOICE)