Loading lib_dec/ivas_lfe_dec.c +18 −2 Original line number Diff line number Diff line Loading @@ -380,7 +380,11 @@ ivas_error ivas_create_lfe_dec( LFE_DEC_HANDLE hLFE; float lfe_addl_delay_s; int16_t i, j; #ifndef NONBE_1360_LFE_DELAY int16_t add_delay_sa; #else float lfe_block_delay_s; #endif low_pass_delay_dec_out = 0; block_offset_s = 0; Loading Loading @@ -418,7 +422,11 @@ ivas_error ivas_create_lfe_dec( hLFE->cum_freq_models[1][3] = &ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg4; /* delay calculation */ #ifndef NONBE_1360_LFE_DELAY hLFE->lfe_block_delay_s = ( IVAS_LFE_FADE_NS / 1000000000.f ) + ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; #else lfe_block_delay_s = ( IVAS_LFE_FADE_NS / 1000000000.f ) + ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; #endif block_offset_s = BLOCK_OFFSET_MS * 0.001f; filt_order = 0; Loading @@ -435,22 +443,30 @@ ivas_error ivas_create_lfe_dec( } hLFE->filter_state.order = filt_order; #ifndef NONBE_1360_LFE_DELAY hLFE->lfe_block_delay_s = hLFE->lfe_block_delay_s + low_pass_delay_dec_out; #else lfe_block_delay_s = lfe_block_delay_s + low_pass_delay_dec_out; #endif hLFE->lfe_prior_buf_len = NS2SA( output_Fs, IVAS_LFE_FADE_NS ); hLFE->bfi_count = 0; #ifdef NONBE_1360_LFE_DELAY block_offset_s += delay_ns / 1000000000.f; #endif lfe_addl_delay_s = block_offset_s - lfe_block_delay_s; #else lfe_addl_delay_s = block_offset_s - hLFE->lfe_block_delay_s; #endif lfe_addl_delay_s = max( 0.0f, lfe_addl_delay_s ); #ifndef NONBE_1360_LFE_DELAY add_delay_sa = (int16_t) roundf( (float) delay_ns * output_Fs / 1000000000.f ); hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ) + add_delay_sa; hLFE->lfe_block_delay_s += lfe_addl_delay_s + add_delay_sa / output_Fs; hLFE->lfe_block_delay_s += lfe_addl_delay_s; #else hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ); hLFE->lfe_block_delay_s += lfe_addl_delay_s; hLFE->delay_ns = delay_ns; #endif if ( hLFE->lfe_addl_delay > 0 ) Loading lib_dec/ivas_mct_dec.c +25 −5 Original line number Diff line number Diff line Loading @@ -1271,8 +1271,11 @@ static ivas_error ivas_mc_dec_reconfig( /*-----------------------------------------------------------------* * Allocate the LFE handle that is coded separately after the allocation of the core coders *-----------------------------------------------------------------*/ #ifdef NONBE_1360_LFE_DELAY if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) ) #else if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hLFE == NULL ) #endif { #ifdef NONBE_1360_LFE_DELAY int32_t delay_ns; Loading Loading @@ -1307,6 +1310,20 @@ static ivas_error ivas_mc_dec_reconfig( } } #ifdef NONBE_1360_LFE_DELAY if ( st_ivas->hLFE != NULL ) { if ( st_ivas->hLFE->delay_ns != delay_ns ) { ivas_lfe_dec_close( &( st_ivas->hLFE ) ); } } #endif #ifdef NONBE_1360_LFE_DELAY if ( st_ivas->hLFE == NULL ) { #endif if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, delay_ns ) ) != IVAS_ERR_OK ) { return error; Loading @@ -1314,6 +1331,9 @@ static ivas_error ivas_mc_dec_reconfig( set_zero( st_ivas->hLFE->prevsynth_buf, LFE_PLC_BUFLEN ); set_zero( st_ivas->hLFE->prior_out_buffer, L_FRAME48k ); #ifdef NONBE_1360_LFE_DELAY } #endif } #endif Loading lib_dec/ivas_stat_dec.h +4 −0 Original line number Diff line number Diff line Loading @@ -790,7 +790,11 @@ typedef struct ivas_lfe_dec_data_structure LFE_WINDOW_HANDLE pWindow_state; const uint16_t *cum_freq_models[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; int16_t lfe_dec_indices_coeffs_tbl[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; #ifdef NONBE_1360_LFE_DELAY int32_t delay_ns; #else float lfe_block_delay_s; #endif int16_t lfe_prior_buf_len; float prior_out_buffer[L_FRAME48k]; Loading Loading
lib_dec/ivas_lfe_dec.c +18 −2 Original line number Diff line number Diff line Loading @@ -380,7 +380,11 @@ ivas_error ivas_create_lfe_dec( LFE_DEC_HANDLE hLFE; float lfe_addl_delay_s; int16_t i, j; #ifndef NONBE_1360_LFE_DELAY int16_t add_delay_sa; #else float lfe_block_delay_s; #endif low_pass_delay_dec_out = 0; block_offset_s = 0; Loading Loading @@ -418,7 +422,11 @@ ivas_error ivas_create_lfe_dec( hLFE->cum_freq_models[1][3] = &ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg4; /* delay calculation */ #ifndef NONBE_1360_LFE_DELAY hLFE->lfe_block_delay_s = ( IVAS_LFE_FADE_NS / 1000000000.f ) + ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; #else lfe_block_delay_s = ( IVAS_LFE_FADE_NS / 1000000000.f ) + ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; #endif block_offset_s = BLOCK_OFFSET_MS * 0.001f; filt_order = 0; Loading @@ -435,22 +443,30 @@ ivas_error ivas_create_lfe_dec( } hLFE->filter_state.order = filt_order; #ifndef NONBE_1360_LFE_DELAY hLFE->lfe_block_delay_s = hLFE->lfe_block_delay_s + low_pass_delay_dec_out; #else lfe_block_delay_s = lfe_block_delay_s + low_pass_delay_dec_out; #endif hLFE->lfe_prior_buf_len = NS2SA( output_Fs, IVAS_LFE_FADE_NS ); hLFE->bfi_count = 0; #ifdef NONBE_1360_LFE_DELAY block_offset_s += delay_ns / 1000000000.f; #endif lfe_addl_delay_s = block_offset_s - lfe_block_delay_s; #else lfe_addl_delay_s = block_offset_s - hLFE->lfe_block_delay_s; #endif lfe_addl_delay_s = max( 0.0f, lfe_addl_delay_s ); #ifndef NONBE_1360_LFE_DELAY add_delay_sa = (int16_t) roundf( (float) delay_ns * output_Fs / 1000000000.f ); hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ) + add_delay_sa; hLFE->lfe_block_delay_s += lfe_addl_delay_s + add_delay_sa / output_Fs; hLFE->lfe_block_delay_s += lfe_addl_delay_s; #else hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ); hLFE->lfe_block_delay_s += lfe_addl_delay_s; hLFE->delay_ns = delay_ns; #endif if ( hLFE->lfe_addl_delay > 0 ) Loading
lib_dec/ivas_mct_dec.c +25 −5 Original line number Diff line number Diff line Loading @@ -1271,8 +1271,11 @@ static ivas_error ivas_mc_dec_reconfig( /*-----------------------------------------------------------------* * Allocate the LFE handle that is coded separately after the allocation of the core coders *-----------------------------------------------------------------*/ #ifdef NONBE_1360_LFE_DELAY if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) ) #else if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hLFE == NULL ) #endif { #ifdef NONBE_1360_LFE_DELAY int32_t delay_ns; Loading Loading @@ -1307,6 +1310,20 @@ static ivas_error ivas_mc_dec_reconfig( } } #ifdef NONBE_1360_LFE_DELAY if ( st_ivas->hLFE != NULL ) { if ( st_ivas->hLFE->delay_ns != delay_ns ) { ivas_lfe_dec_close( &( st_ivas->hLFE ) ); } } #endif #ifdef NONBE_1360_LFE_DELAY if ( st_ivas->hLFE == NULL ) { #endif if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, delay_ns ) ) != IVAS_ERR_OK ) { return error; Loading @@ -1314,6 +1331,9 @@ static ivas_error ivas_mc_dec_reconfig( set_zero( st_ivas->hLFE->prevsynth_buf, LFE_PLC_BUFLEN ); set_zero( st_ivas->hLFE->prior_out_buffer, L_FRAME48k ); #ifdef NONBE_1360_LFE_DELAY } #endif } #endif Loading
lib_dec/ivas_stat_dec.h +4 −0 Original line number Diff line number Diff line Loading @@ -790,7 +790,11 @@ typedef struct ivas_lfe_dec_data_structure LFE_WINDOW_HANDLE pWindow_state; const uint16_t *cum_freq_models[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; int16_t lfe_dec_indices_coeffs_tbl[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS]; #ifdef NONBE_1360_LFE_DELAY int32_t delay_ns; #else float lfe_block_delay_s; #endif int16_t lfe_prior_buf_len; float prior_out_buffer[L_FRAME48k]; Loading