diff --git a/lib_com/options.h b/lib_com/options.h index 24d09eda363a4518dd64c8fd3f21752ab77b07d4..7196cc8b24ba02e7c8f6e2c8cd49f0227f1621fe 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -176,6 +176,7 @@ #define NONBE_FIX_1128_OSBA_EXT_OUTPUT_ORDER /* FhG: issue 1128: set output ambisonics order to input order for EXT output */ #define NONBE_FIX_1052_SBA_EXT_FIX /* VA: SBA external output support fix - do not overwrite "output_config" parameter */ +#define NONBE_FIX_1130_DIV_ZERO_LEV_DUR /* VA: issue 1130: avoid div by zero in L-D by thresholding R[0] to a min value of 100.0 */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_enc/swb_tbe_enc.c b/lib_enc/swb_tbe_enc.c index 758fa4fe76e2d885dd9d4176edd5e7f698831e86..1cf69fab8a13ddd7bf40a262ed9675a233485526 100644 --- a/lib_enc/swb_tbe_enc.c +++ b/lib_enc/swb_tbe_enc.c @@ -280,6 +280,15 @@ void wb_tbe_enc( } autocorr( hb_old_speech, R, LPC_SHB_ORDER_WB + 1, ( NS2SA( INT_FS_12k8, 5000000L ) + L_SUBFR + L_FRAME ) * 5 / 16, win_lpc_hb_wb, 0, 1, 1 ); + +#ifdef NONBE_FIX_1130_DIV_ZERO_LEV_DUR + if ( st->element_mode > EVS_MONO ) + { + /* Ensure R[0] isn't zero when entering Levinson-Durbin */ + R[0] = max( R[0], 1.0e-8f ); + } +#endif + lev_dur( lpc_wb_temp, R, LPC_SHB_ORDER_WB, ervec_temp ); a2lsp( lsp_wb_temp, lpc_wb_temp, LPC_SHB_ORDER_WB ); lsp_spacing = 0.5f;