Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -210,6 +210,7 @@ #define FIX_1113_CLDFB_REND_IN_ISAR /* issue 1113: fix the use of CLDFB renderer in split-rendering at the external renderer */ #define NONBE_1894_OSBA_SCALING /* FhG: port OSBA scaling MRs (298,355,360) jointly */ #define NONBE_1360_LFE_DELAY /* Dlb: LFE delay alignment when rendering in CLDFB domain*/ /* #################### End BASOP porting switches ############################ */ Loading lib_dec/ivas_init_dec.c +11 −0 Original line number Diff line number Diff line Loading @@ -2159,8 +2159,19 @@ ivas_error ivas_init_decoder( *-----------------------------------------------------------------*/ if ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { #ifdef NONBE_1360_LFE_DELAY if ( st_ivas->hIntSetup.index_lfe[0] != -1 ) { delay_ns = st_ivas->binaural_latency_ns; } else { delay_ns = 0; } #else delay_ns = st_ivas->binaural_latency_ns; #endif if ( st_ivas->hBinRenderer != NULL ) { if ( st_ivas->hBinRenderer->render_lfe ) Loading lib_dec/ivas_lfe_dec.c +27 −1 Original line number Diff line number Diff line Loading @@ -387,7 +387,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 @@ -425,7 +429,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 @@ -434,18 +442,33 @@ ivas_error ivas_create_lfe_dec( if ( ( delay_ns / 1000000000.f ) > ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3] ) { filt_order = 4; #ifdef NONBE_1360_LFE_DELAY low_pass_delay_dec_out = ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; #else low_pass_delay_dec_out = ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3] * 1000000000.f; #endif ivas_create_lfe_lpf_dec( &( hLFE->filter_state ), output_Fs ); } #endif 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; 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 #ifdef NONBE_FIX_MC_LFE_LPF add_delay_sa = (int16_t) roundf( (float) delay_ns * output_Fs / 1000000000.f ); #else Loading @@ -453,7 +476,10 @@ ivas_error ivas_create_lfe_dec( #endif 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; #else hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ); hLFE->delay_ns = delay_ns; #endif if ( hLFE->lfe_addl_delay > 0 ) { if ( ( hLFE->lfe_delay_buf = (float *) malloc( hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) Loading lib_dec/ivas_mc_paramupmix_dec.c +26 −10 Original line number Diff line number Diff line Loading @@ -841,22 +841,38 @@ static void ivas_mc_paramupmix_dec_sf( { for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) { #ifdef NONBE_1360_LFE_DELAY /*delay is handled within LFE decoder*/ if ( st_ivas->hIntSetup.index_lfe[0] != ch ) { #endif float tmp_buf[L_SUBFRAME5MS_48k]; mvr2r( &output_f[ch][n_samples_rendered - noparamupmix_delay], tmp_buf, noparamupmix_delay ); mvr2r( output_f[ch], &output_f[ch][noparamupmix_delay], n_samples_rendered - noparamupmix_delay ); mvr2r( hMCParamUpmix->pcm_delay[ch], output_f[ch], noparamupmix_delay ); mvr2r( tmp_buf, hMCParamUpmix->pcm_delay[ch], noparamupmix_delay ); #ifdef NONBE_1360_LFE_DELAY } #endif } } else { for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) { #ifdef NONBE_1360_LFE_DELAY /*delay is handled within LFE decoder*/ if ( st_ivas->hIntSetup.index_lfe[0] != ch ) { #endif float tmp_buf[L_SUBFRAME5MS_48k]; mvr2r( &output_f[ch][0], tmp_buf, n_samples_rendered ); mvr2r( hMCParamUpmix->pcm_delay[ch], output_f[ch], n_samples_rendered ); mvr2r( &hMCParamUpmix->pcm_delay[ch][n_samples_rendered], &hMCParamUpmix->pcm_delay[ch][0], noparamupmix_delay - n_samples_rendered ); mvr2r( tmp_buf, &hMCParamUpmix->pcm_delay[ch][noparamupmix_delay - n_samples_rendered], n_samples_rendered ); #ifdef NONBE_1360_LFE_DELAY } #endif } } } Loading lib_dec/ivas_mct_dec.c +90 −1 Original line number Diff line number Diff line Loading @@ -1124,10 +1124,10 @@ static ivas_error ivas_mc_dec_reconfig( return error; } #ifndef NONBE_1360_LFE_DELAY /*-----------------------------------------------------------------* * Allocate the LFE handle that is coded separately after the allocation of the core coders *-----------------------------------------------------------------*/ if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hLFE == NULL ) { #ifdef NONBE_FIX_MC_LFE_LPF Loading Loading @@ -1177,6 +1177,7 @@ 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 ); } #endif /*-----------------------------------------------------------------* * Reconfigure renderers Loading Loading @@ -1330,6 +1331,94 @@ static ivas_error ivas_mc_dec_reconfig( return error; } #ifdef NONBE_1360_LFE_DELAY /*-----------------------------------------------------------------* * 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_FIX_MC_LFE_LPF #ifdef NONBE_1360_LFE_DELAY int32_t delay_ns; if ( st_ivas->hIntSetup.index_lfe[0] != -1 ) { delay_ns = st_ivas->binaural_latency_ns; } else { delay_ns = 0; } #else int32_t delay_ns = st_ivas->binaural_latency_ns; #endif #else int32_t binauralization_delay_ns = st_ivas->binaural_latency_ns; #endif if ( st_ivas->hBinRenderer != NULL ) { if ( st_ivas->hBinRenderer->render_lfe ) { /* Account for filterbank delay */ #ifdef NONBE_FIX_MC_LFE_LPF delay_ns += IVAS_FB_DEC_DELAY_NS; #else binauralization_delay_ns += IVAS_FB_DEC_DELAY_NS; #endif } else { #ifdef NONBE_FIX_MC_LFE_LPF delay_ns = 0; #else binauralization_delay_ns = 0; #endif } } #ifdef NONBE_FIX_MC_LFE_LPF else { if ( ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && ( st_ivas->cldfbSynDec[0] != NULL ) ) { delay_ns += IVAS_FB_DEC_DELAY_NS; } } #endif #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 #ifdef NONBE_FIX_MC_LFE_LPF if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, delay_ns ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, binauralization_delay_ns ) ) != IVAS_ERR_OK ) #endif { return error; } 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 /*-----------------------------------------------------------------* * JBM TC buffers *-----------------------------------------------------------------*/ Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -210,6 +210,7 @@ #define FIX_1113_CLDFB_REND_IN_ISAR /* issue 1113: fix the use of CLDFB renderer in split-rendering at the external renderer */ #define NONBE_1894_OSBA_SCALING /* FhG: port OSBA scaling MRs (298,355,360) jointly */ #define NONBE_1360_LFE_DELAY /* Dlb: LFE delay alignment when rendering in CLDFB domain*/ /* #################### End BASOP porting switches ############################ */ Loading
lib_dec/ivas_init_dec.c +11 −0 Original line number Diff line number Diff line Loading @@ -2159,8 +2159,19 @@ ivas_error ivas_init_decoder( *-----------------------------------------------------------------*/ if ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) { #ifdef NONBE_1360_LFE_DELAY if ( st_ivas->hIntSetup.index_lfe[0] != -1 ) { delay_ns = st_ivas->binaural_latency_ns; } else { delay_ns = 0; } #else delay_ns = st_ivas->binaural_latency_ns; #endif if ( st_ivas->hBinRenderer != NULL ) { if ( st_ivas->hBinRenderer->render_lfe ) Loading
lib_dec/ivas_lfe_dec.c +27 −1 Original line number Diff line number Diff line Loading @@ -387,7 +387,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 @@ -425,7 +429,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 @@ -434,18 +442,33 @@ ivas_error ivas_create_lfe_dec( if ( ( delay_ns / 1000000000.f ) > ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3] ) { filt_order = 4; #ifdef NONBE_1360_LFE_DELAY low_pass_delay_dec_out = ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3]; #else low_pass_delay_dec_out = ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3] * 1000000000.f; #endif ivas_create_lfe_lpf_dec( &( hLFE->filter_state ), output_Fs ); } #endif 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; 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 #ifdef NONBE_FIX_MC_LFE_LPF add_delay_sa = (int16_t) roundf( (float) delay_ns * output_Fs / 1000000000.f ); #else Loading @@ -453,7 +476,10 @@ ivas_error ivas_create_lfe_dec( #endif 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; #else hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ); hLFE->delay_ns = delay_ns; #endif if ( hLFE->lfe_addl_delay > 0 ) { if ( ( hLFE->lfe_delay_buf = (float *) malloc( hLFE->lfe_addl_delay * sizeof( float ) ) ) == NULL ) Loading
lib_dec/ivas_mc_paramupmix_dec.c +26 −10 Original line number Diff line number Diff line Loading @@ -841,22 +841,38 @@ static void ivas_mc_paramupmix_dec_sf( { for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) { #ifdef NONBE_1360_LFE_DELAY /*delay is handled within LFE decoder*/ if ( st_ivas->hIntSetup.index_lfe[0] != ch ) { #endif float tmp_buf[L_SUBFRAME5MS_48k]; mvr2r( &output_f[ch][n_samples_rendered - noparamupmix_delay], tmp_buf, noparamupmix_delay ); mvr2r( output_f[ch], &output_f[ch][noparamupmix_delay], n_samples_rendered - noparamupmix_delay ); mvr2r( hMCParamUpmix->pcm_delay[ch], output_f[ch], noparamupmix_delay ); mvr2r( tmp_buf, hMCParamUpmix->pcm_delay[ch], noparamupmix_delay ); #ifdef NONBE_1360_LFE_DELAY } #endif } } else { for ( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ ) { #ifdef NONBE_1360_LFE_DELAY /*delay is handled within LFE decoder*/ if ( st_ivas->hIntSetup.index_lfe[0] != ch ) { #endif float tmp_buf[L_SUBFRAME5MS_48k]; mvr2r( &output_f[ch][0], tmp_buf, n_samples_rendered ); mvr2r( hMCParamUpmix->pcm_delay[ch], output_f[ch], n_samples_rendered ); mvr2r( &hMCParamUpmix->pcm_delay[ch][n_samples_rendered], &hMCParamUpmix->pcm_delay[ch][0], noparamupmix_delay - n_samples_rendered ); mvr2r( tmp_buf, &hMCParamUpmix->pcm_delay[ch][noparamupmix_delay - n_samples_rendered], n_samples_rendered ); #ifdef NONBE_1360_LFE_DELAY } #endif } } } Loading
lib_dec/ivas_mct_dec.c +90 −1 Original line number Diff line number Diff line Loading @@ -1124,10 +1124,10 @@ static ivas_error ivas_mc_dec_reconfig( return error; } #ifndef NONBE_1360_LFE_DELAY /*-----------------------------------------------------------------* * Allocate the LFE handle that is coded separately after the allocation of the core coders *-----------------------------------------------------------------*/ if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hLFE == NULL ) { #ifdef NONBE_FIX_MC_LFE_LPF Loading Loading @@ -1177,6 +1177,7 @@ 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 ); } #endif /*-----------------------------------------------------------------* * Reconfigure renderers Loading Loading @@ -1330,6 +1331,94 @@ static ivas_error ivas_mc_dec_reconfig( return error; } #ifdef NONBE_1360_LFE_DELAY /*-----------------------------------------------------------------* * 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_FIX_MC_LFE_LPF #ifdef NONBE_1360_LFE_DELAY int32_t delay_ns; if ( st_ivas->hIntSetup.index_lfe[0] != -1 ) { delay_ns = st_ivas->binaural_latency_ns; } else { delay_ns = 0; } #else int32_t delay_ns = st_ivas->binaural_latency_ns; #endif #else int32_t binauralization_delay_ns = st_ivas->binaural_latency_ns; #endif if ( st_ivas->hBinRenderer != NULL ) { if ( st_ivas->hBinRenderer->render_lfe ) { /* Account for filterbank delay */ #ifdef NONBE_FIX_MC_LFE_LPF delay_ns += IVAS_FB_DEC_DELAY_NS; #else binauralization_delay_ns += IVAS_FB_DEC_DELAY_NS; #endif } else { #ifdef NONBE_FIX_MC_LFE_LPF delay_ns = 0; #else binauralization_delay_ns = 0; #endif } } #ifdef NONBE_FIX_MC_LFE_LPF else { if ( ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && ( st_ivas->cldfbSynDec[0] != NULL ) ) { delay_ns += IVAS_FB_DEC_DELAY_NS; } } #endif #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 #ifdef NONBE_FIX_MC_LFE_LPF if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, delay_ns ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, binauralization_delay_ns ) ) != IVAS_ERR_OK ) #endif { return error; } 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 /*-----------------------------------------------------------------* * JBM TC buffers *-----------------------------------------------------------------*/ Loading