Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ #define NONBE_FIX_TCX5_INTERLEAVING_FOR_FS_IN_UNEQUAL_FS_OUT /* FhG: apply correct TCX5 grouping/interleaving when input_fs != output_fs */ #define NONBE_1339_FIXOSBA_EXT_LOUDNESS /* FhG: issue 1339: apply scaling with EXT output in OSBA high-BR mode */ #define NONBE_1352_HARMONIZE_OSBA_LOUDNESS /* FhG: do not scale OSBA inputs by 0.5 any more */ #define NONBE_1360_LFE_DELAY /* Dlb: LFE delay alignment when rendering in CLDFB domain*/ /* ##################### End NON-BE switches ########################### */ Loading lib_dec/ivas_init_dec.c +12 −1 Original line number Diff line number Diff line Loading @@ -2304,8 +2304,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 int32_t 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 +12 −1 Original line number Diff line number Diff line Loading @@ -426,7 +426,11 @@ 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 ); } Loading @@ -435,12 +439,19 @@ ivas_error ivas_create_lfe_dec( 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 - hLFE->lfe_block_delay_s; 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; #else hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ); hLFE->lfe_block_delay_s += lfe_addl_delay_s; #endif if ( hLFE->lfe_addl_delay > 0 ) { Loading lib_dec/ivas_mc_paramupmix_dec.c +25 −10 Original line number Diff line number Diff line Loading @@ -844,22 +844,37 @@ 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 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 +53 −0 Original line number Diff line number Diff line Loading @@ -1077,6 +1077,7 @@ 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 *-----------------------------------------------------------------*/ Loading Loading @@ -1112,6 +1113,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 @@ -1264,6 +1266,57 @@ 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 *-----------------------------------------------------------------*/ if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hLFE == NULL ) { #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 if ( st_ivas->hBinRenderer != NULL ) { if ( st_ivas->hBinRenderer->render_lfe ) { /* Account for filterbank delay */ delay_ns += IVAS_FB_DEC_DELAY_NS; } else { delay_ns = 0; } } else { if ( ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && ( st_ivas->cldfbSynDec[0] != NULL ) ) { delay_ns += IVAS_FB_DEC_DELAY_NS; } } if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, delay_ns ) ) != IVAS_ERR_OK ) { return error; } set_zero( st_ivas->hLFE->prevsynth_buf, LFE_PLC_BUFLEN ); set_zero( st_ivas->hLFE->prior_out_buffer, L_FRAME48k ); } #endif /*-----------------------------------------------------------------* * JBM TC buffers *-----------------------------------------------------------------*/ Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ #define NONBE_FIX_TCX5_INTERLEAVING_FOR_FS_IN_UNEQUAL_FS_OUT /* FhG: apply correct TCX5 grouping/interleaving when input_fs != output_fs */ #define NONBE_1339_FIXOSBA_EXT_LOUDNESS /* FhG: issue 1339: apply scaling with EXT output in OSBA high-BR mode */ #define NONBE_1352_HARMONIZE_OSBA_LOUDNESS /* FhG: do not scale OSBA inputs by 0.5 any more */ #define NONBE_1360_LFE_DELAY /* Dlb: LFE delay alignment when rendering in CLDFB domain*/ /* ##################### End NON-BE switches ########################### */ Loading
lib_dec/ivas_init_dec.c +12 −1 Original line number Diff line number Diff line Loading @@ -2304,8 +2304,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 int32_t 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 +12 −1 Original line number Diff line number Diff line Loading @@ -426,7 +426,11 @@ 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 ); } Loading @@ -435,12 +439,19 @@ ivas_error ivas_create_lfe_dec( 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 - hLFE->lfe_block_delay_s; 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; #else hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ); hLFE->lfe_block_delay_s += lfe_addl_delay_s; #endif if ( hLFE->lfe_addl_delay > 0 ) { Loading
lib_dec/ivas_mc_paramupmix_dec.c +25 −10 Original line number Diff line number Diff line Loading @@ -844,22 +844,37 @@ 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 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 +53 −0 Original line number Diff line number Diff line Loading @@ -1077,6 +1077,7 @@ 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 *-----------------------------------------------------------------*/ Loading Loading @@ -1112,6 +1113,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 @@ -1264,6 +1266,57 @@ 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 *-----------------------------------------------------------------*/ if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hLFE == NULL ) { #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 if ( st_ivas->hBinRenderer != NULL ) { if ( st_ivas->hBinRenderer->render_lfe ) { /* Account for filterbank delay */ delay_ns += IVAS_FB_DEC_DELAY_NS; } else { delay_ns = 0; } } else { if ( ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && ( st_ivas->cldfbSynDec[0] != NULL ) ) { delay_ns += IVAS_FB_DEC_DELAY_NS; } } if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, delay_ns ) ) != IVAS_ERR_OK ) { return error; } set_zero( st_ivas->hLFE->prevsynth_buf, LFE_PLC_BUFLEN ); set_zero( st_ivas->hLFE->prior_out_buffer, L_FRAME48k ); } #endif /*-----------------------------------------------------------------* * JBM TC buffers *-----------------------------------------------------------------*/ Loading