From f1dad68eb4994306775bf8217cdec7602162d293 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 18 Sep 2023 11:26:00 +0200 Subject: [PATCH 01/11] allocate enough buffer channels to store all decorrlator channels in SPAR --- lib_com/options.h | 1 + lib_rend/ivas_output_init.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index e4b62eddec..425ca5fceb 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -200,6 +200,7 @@ #define NONBE_FIX_738_SBA_BR_SW_ASAN /* FhG: issue 738: fixes bug when switching to an MCT bitrate and previous frame was ACELP */ #define NONBE_CR_FIX_735_SBA_HP20_BRATE_SWITCHING /* VA: Issue 735: Resolve "HP20 filtering bug in SBA/OSBA bitrate switching" */ +#define NONBE_FIX_798_OSBA_MC_DEC_CRASH /* ##################### End NON-BE switches ########################### */ diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index 7dceb4a293..49d34c7550 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -355,9 +355,17 @@ int16_t ivas_get_nchan_buffers_dec( nchan_out_buff = max( nchan_out_buff, audioCfg2channels( st_ivas->intern_config ) ); nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); + if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS ) { +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + int16_t nchan_internal; + nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); +#endif nchan_out_buff = max( nchan_out_buff + st_ivas->nchan_ism, audioCfg2channels( output_config ) ); /* needed for ivas_sba_upmixer_renderer() */ +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + nchan_out_buff = max( nchan_out_buff, nchan_internal + st_ivas->nchan_ism ); +#endif } else { -- GitLab From ac7d044ed0e3668e17a32b70bf0c93f93b1e1643 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 18 Sep 2023 12:03:50 +0200 Subject: [PATCH 02/11] fix compilation errors --- lib_rend/ivas_output_init.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index 49d34c7550..5636f9ad32 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -36,6 +36,9 @@ #include "prot.h" #include "ivas_prot_rend.h" #include "ivas_rom_com.h" +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH +#include "ivas_prot.h" +#endif #ifdef DEBUGGING #include "debug.h" #include -- GitLab From f6923e0cf13e08471e2c936e214d1bc9310ebc45 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 18 Sep 2023 12:53:07 +0200 Subject: [PATCH 03/11] extend fix to SBA mode --- lib_rend/ivas_output_init.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index 5636f9ad32..fbcf002e3b 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -300,17 +300,24 @@ int16_t ivas_get_nchan_buffers_dec( } else if ( st_ivas->ivas_format == SBA_FORMAT ) { +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + int16_t nchan_internal; + nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); +#endif nchan_out_buff = st_ivas->hDecoderConfig->nchan_out; if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) { nchan_out_buff = max( nchan_out_buff, st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); - } + } else { nchan_out_buff = max( audioCfg2channels( st_ivas->transport_config ), audioCfg2channels( st_ivas->intern_config ) ); nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); } +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + nchan_out_buff = max( nchan_out_buff, nchan_internal + st_ivas->nchan_ism ); +#endif } else if ( st_ivas->ivas_format == MASA_FORMAT ) { @@ -342,6 +349,10 @@ int16_t ivas_get_nchan_buffers_dec( } else if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) { +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + int16_t nchan_internal; + nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); +#endif nchan_out_buff = st_ivas->nchan_ism + st_ivas->nchan_transport; if ( st_ivas->hMCT != NULL ) @@ -358,22 +369,17 @@ int16_t ivas_get_nchan_buffers_dec( nchan_out_buff = max( nchan_out_buff, audioCfg2channels( st_ivas->intern_config ) ); nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); - if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS ) { -#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - int16_t nchan_internal; - nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); -#endif nchan_out_buff = max( nchan_out_buff + st_ivas->nchan_ism, audioCfg2channels( output_config ) ); /* needed for ivas_sba_upmixer_renderer() */ -#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - nchan_out_buff = max( nchan_out_buff, nchan_internal + st_ivas->nchan_ism ); -#endif - } + } else { nchan_out_buff = max( nchan_out_buff + st_ivas->nchan_ism, audioCfg2channels( output_config ) ); /* needed for iivas_spar_dec_upmixer_sf() which is based on 'nchan_out' */ } +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + nchan_out_buff = max( nchan_out_buff, nchan_internal + st_ivas->nchan_ism ); +#endif } else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) { -- GitLab From 7860e719ee6c812d7ffebc6c48e315cc6bc41f80 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 18 Sep 2023 12:58:38 +0200 Subject: [PATCH 04/11] fix crash in OSBA to CUSTOM_LS decoding --- lib_dec/ivas_osba_dec.c | 8 +++++++- lib_rend/ivas_output_init.c | 7 +++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 9759e1c7c2..1c80e349aa 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -319,7 +319,13 @@ ivas_error ivas_osba_render( sba_ch_idx = 0; } - for ( n = 0; n < nchan_out; n++ ) + for ( n = 0; n < +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + max(nchan_out,nchan_ism); +#else + nchan_out; +#endif + n++ ) { p_tmp_ism_out[n] = &tmp_ism_out[n][0]; } diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index fbcf002e3b..295bce0b6e 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -377,15 +377,14 @@ int16_t ivas_get_nchan_buffers_dec( { nchan_out_buff = max( nchan_out_buff + st_ivas->nchan_ism, audioCfg2channels( output_config ) ); /* needed for iivas_spar_dec_upmixer_sf() which is based on 'nchan_out' */ } -#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - nchan_out_buff = max( nchan_out_buff, nchan_internal + st_ivas->nchan_ism ); -#endif } else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL ) { nchan_out_buff = st_ivas->hDecoderConfig->nchan_out + st_ivas->nchan_ism; /*take into account sba_ch_idx' in ivas_dec() */ } - +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + nchan_out_buff = max( nchan_out_buff, nchan_internal + st_ivas->nchan_ism ); +#endif nchan_out_buff = min( nchan_out_buff, MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS ); } else if ( st_ivas->ivas_format == MC_FORMAT ) -- GitLab From 99996cd4d0fba5f7d3bfffdb49f9194c63febcc6 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 18 Sep 2023 13:09:20 +0200 Subject: [PATCH 05/11] fix formatting --- lib_dec/ivas_osba_dec.c | 8 ++++---- lib_rend/ivas_output_init.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index 1c80e349aa..ef46538d8c 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -319,13 +319,13 @@ ivas_error ivas_osba_render( sba_ch_idx = 0; } - for ( n = 0; n < + for ( n = 0; n < #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - max(nchan_out,nchan_ism); + max( nchan_out, nchan_ism ); #else - nchan_out; + nchan_out; #endif - n++ ) + n++ ) { p_tmp_ism_out[n] = &tmp_ism_out[n][0]; } diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index 295bce0b6e..d4be45a60f 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -309,7 +309,7 @@ int16_t ivas_get_nchan_buffers_dec( if ( output_config == IVAS_AUDIO_CONFIG_LS_CUSTOM ) { nchan_out_buff = max( nchan_out_buff, st_ivas->hOutSetup.nchan_out_woLFE + st_ivas->hOutSetup.num_lfe ); - } + } else { nchan_out_buff = max( audioCfg2channels( st_ivas->transport_config ), audioCfg2channels( st_ivas->intern_config ) ); @@ -372,7 +372,7 @@ int16_t ivas_get_nchan_buffers_dec( if ( st_ivas->renderer_type == RENDERER_OSBA_AMBI || st_ivas->renderer_type == RENDERER_OSBA_LS ) { nchan_out_buff = max( nchan_out_buff + st_ivas->nchan_ism, audioCfg2channels( output_config ) ); /* needed for ivas_sba_upmixer_renderer() */ - } + } else { nchan_out_buff = max( nchan_out_buff + st_ivas->nchan_ism, audioCfg2channels( output_config ) ); /* needed for iivas_spar_dec_upmixer_sf() which is based on 'nchan_out' */ -- GitLab From ab3c74c3ab489e58e1d1cdab4f5873f1b43007ff Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 18 Sep 2023 13:53:08 +0200 Subject: [PATCH 06/11] fix formula for no of channels in SBA case --- lib_rend/ivas_output_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index d4be45a60f..6afb871d8d 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -316,7 +316,7 @@ int16_t ivas_get_nchan_buffers_dec( nchan_out_buff = max( nchan_out_buff, audioCfg2channels( output_config ) ); } #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - nchan_out_buff = max( nchan_out_buff, nchan_internal + st_ivas->nchan_ism ); + nchan_out_buff = max( nchan_out_buff, nchan_internal ); #endif } else if ( st_ivas->ivas_format == MASA_FORMAT ) -- GitLab From 31376d2b729fdcd4eb6676918f46abf0a6b535d4 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 18 Sep 2023 17:54:15 +0200 Subject: [PATCH 07/11] fix crash with bitrate switching --- lib_dec/ivas_init_dec.c | 9 ++++++++- lib_dec/ivas_ism_dec.c | 16 ++++++++++++++-- lib_dec/ivas_mc_paramupmix_dec.c | 9 ++++++++- lib_dec/ivas_omasa_dec.c | 16 ++++++++++++++-- lib_dec/ivas_sba_dec.c | 22 ++++++++++++++++++++-- lib_dec/ivas_sba_rendering_internal.c | 10 +++++++++- lib_rend/ivas_output_init.c | 7 ++++++- lib_rend/ivas_prot_rend.h | 5 +++++ 8 files changed, 84 insertions(+), 10 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index a6ff01f3c9..5977dd4712 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2204,7 +2204,14 @@ ivas_error ivas_init_decoder( if ( !st_ivas->hDecoderConfig->Opt_5ms ) { - for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas ); n++ ) + for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + st_ivas->sba_analysis_order, + st_ivas->hDecoderConfig->ivas_total_brate +#endif + ); + n++ ) { /* note: these are intra-frame heap memories */ if ( ( st_ivas->p_output_f[n] = (float *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL ) diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index 00ba167fcf..cece58d5ce 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -81,7 +81,13 @@ static ivas_error ivas_ism_bitrate_switching_dec( st_ivas->ism_mode = last_ism_mode; ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); st_ivas->ism_mode = ism_mode; - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas ); + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + st_ivas->sba_analysis_order, + st_ivas->hDecoderConfig->ivas_total_brate +#endif + ); if ( ( error = ivas_ism_config( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->nchan_ism, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 0 ) ) != IVAS_ERR_OK ) @@ -350,7 +356,13 @@ static ivas_error ivas_ism_bitrate_switching_dec( if ( !st_ivas->hDecoderConfig->Opt_5ms ) { - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas ); + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + st_ivas->sba_analysis_order, + st_ivas->hDecoderConfig->ivas_total_brate +#endif + ); if ( nchan_out_buff > nchan_out_buff_old ) { diff --git a/lib_dec/ivas_mc_paramupmix_dec.c b/lib_dec/ivas_mc_paramupmix_dec.c index 972f3ae5d2..836e4d5028 100644 --- a/lib_dec/ivas_mc_paramupmix_dec.c +++ b/lib_dec/ivas_mc_paramupmix_dec.c @@ -483,7 +483,14 @@ void ivas_mc_paramupmix_dec( } } - for ( ch = first_empty_channel; ch < ivas_get_nchan_buffers_dec( st_ivas ); ch++ ) + for ( ch = first_empty_channel; ch < ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + st_ivas->sba_analysis_order, + st_ivas->hDecoderConfig->ivas_total_brate +#endif + ); + ch++ ) { set_f( output_f[ch], 0.0f, output_frame ); } diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index 240731d674..fa36e4f896 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -181,7 +181,13 @@ ivas_error ivas_omasa_dec_config( ivas_format_orig = st_ivas->ivas_format; st_ivas->ivas_format = st_ivas->last_ivas_format; ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas ); + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + st_ivas->sba_analysis_order, + st_ivas->hDecoderConfig->ivas_total_brate +#endif + ); st_ivas->ivas_format = ivas_format_orig; nSCE_old = st_ivas->nSCE; @@ -414,7 +420,13 @@ ivas_error ivas_omasa_dec_config( if ( !st_ivas->hDecoderConfig->Opt_5ms ) { - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas ); + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + st_ivas->sba_analysis_order, + st_ivas->hDecoderConfig->ivas_total_brate +#endif + ); if ( nchan_out_buff > nchan_out_buff_old ) { diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index 8ff8bcc48e..a04fd758ef 100755 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -112,6 +112,9 @@ ivas_error ivas_sba_dec_reconfigure( int32_t last_ivas_total_brate; int16_t num_channels, num_md_sub_frames; int16_t ch, nchan_out_buff, nchan_out_buff_old; +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + int16_t sba_analysis_order_old; +#endif DECODER_CONFIG_HANDLE hDecoderConfig; ivas_error error; ISM_MODE ism_mode_old; @@ -122,6 +125,9 @@ ivas_error ivas_sba_dec_reconfigure( hDecoderConfig = st_ivas->hDecoderConfig; ivas_total_brate = hDecoderConfig->ivas_total_brate; last_ivas_total_brate = st_ivas->last_active_ivas_total_brate; +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + sba_analysis_order_old = ivas_sba_get_analysis_order( last_ivas_total_brate, st_ivas->sba_order ); +#endif /*-----------------------------------------------------------------* * Set SBA high-level parameters @@ -150,7 +156,13 @@ ivas_error ivas_sba_dec_reconfigure( nCPE_old = st_ivas->nCPE; nchan_transport_old = st_ivas->nchan_transport; sba_dirac_stereo_flag_old = st_ivas->sba_dirac_stereo_flag; - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas ); + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + sba_analysis_order_old, + last_ivas_total_brate +#endif + ); st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); @@ -570,7 +582,13 @@ ivas_error ivas_sba_dec_reconfigure( if ( !st_ivas->hDecoderConfig->Opt_5ms ) { - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas ); + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + st_ivas->sba_analysis_order, + st_ivas->hDecoderConfig->ivas_total_brate +#endif + ); if ( nchan_out_buff > nchan_out_buff_old ) { diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index 169d7ac99a..44596df2b7 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -502,7 +502,15 @@ ivas_error ivas_sba_upmixer_renderer( sba_ch_idx = st_ivas->nchan_ism; } - for ( ch = 0; ch < ivas_get_nchan_buffers_dec( st_ivas ) - sba_ch_idx; ch++ ) + for ( ch = 0; ch < ivas_get_nchan_buffers_dec( st_ivas +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + st_ivas->sba_analysis_order, + st_ivas->hDecoderConfig->ivas_total_brate +#endif + ) - + sba_ch_idx; + ch++ ) { output_f[ch] = output[ch]; } diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index 6afb871d8d..050a3ae1d7 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -267,6 +267,11 @@ void ivas_output_init( /*! r: number of decoder buffers */ int16_t ivas_get_nchan_buffers_dec( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + int16_t sba_analysis_order, + int32_t ivas_total_brate +#endif ) { int16_t nchan_out_buff; @@ -302,7 +307,7 @@ int16_t ivas_get_nchan_buffers_dec( { #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH int16_t nchan_internal; - nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); + nchan_internal = ivas_sba_get_nchan_metadata( sba_analysis_order, ivas_total_brate ); #endif nchan_out_buff = st_ivas->hDecoderConfig->nchan_out; diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 34c54eae0e..fcb0d554b4 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -73,6 +73,11 @@ void ivas_output_init( /*! r: number of decoder buffers */ int16_t ivas_get_nchan_buffers_dec( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ +#ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH + , + int16_t sba_analysis_order, + int32_t ivas_total_brate +#endif ); -- GitLab From 7b5d36a4ca79c8cd23c7c768db8d79ef2316e08a Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Tue, 19 Sep 2023 10:50:19 +0200 Subject: [PATCH 08/11] fix OSBA bitrate switching crash --- lib_rend/ivas_output_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index 050a3ae1d7..1c9ff23b6e 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -356,7 +356,7 @@ int16_t ivas_get_nchan_buffers_dec( { #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH int16_t nchan_internal; - nchan_internal = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); + nchan_internal = ivas_sba_get_nchan_metadata( sba_analysis_order, ivas_total_brate ); #endif nchan_out_buff = st_ivas->nchan_ism + st_ivas->nchan_transport; -- GitLab From 5de94df835c3f063afea1cd7a9a47c5267036cc0 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 20 Sep 2023 12:38:44 +0200 Subject: [PATCH 09/11] fix formatting --- lib_dec/ivas_init_dec.c | 9 +++------ lib_dec/ivas_ism_dec.c | 16 ++++++---------- lib_dec/ivas_mc_paramupmix_dec.c | 9 +++------ lib_dec/ivas_omasa_dec.c | 17 +++++++---------- lib_dec/ivas_osba_dec.c | 6 ++---- lib_dec/ivas_sba_dec.c | 16 ++++++---------- lib_dec/ivas_sba_rendering_internal.c | 10 +++------- 7 files changed, 30 insertions(+), 53 deletions(-) diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 5977dd4712..b8a1ba89b7 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2204,14 +2204,11 @@ ivas_error ivas_init_decoder( if ( !st_ivas->hDecoderConfig->Opt_5ms ) { - for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - st_ivas->sba_analysis_order, - st_ivas->hDecoderConfig->ivas_total_brate + for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ ) +#else + for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas ); n++ ) #endif - ); - n++ ) { /* note: these are intra-frame heap memories */ if ( ( st_ivas->p_output_f[n] = (float *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL ) diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index cece58d5ce..d0fd3cf840 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -81,13 +81,11 @@ static ivas_error ivas_ism_bitrate_switching_dec( st_ivas->ism_mode = last_ism_mode; ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); st_ivas->ism_mode = ism_mode; - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - st_ivas->sba_analysis_order, - st_ivas->hDecoderConfig->ivas_total_brate + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); +#else + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas ); #endif - ); if ( ( error = ivas_ism_config( st_ivas->hDecoderConfig->ivas_total_brate, st_ivas->nchan_transport, st_ivas->nchan_ism, NULL, 0, NULL, NULL, element_brate_tmp, NULL, NULL, 0 ) ) != IVAS_ERR_OK ) @@ -356,13 +354,11 @@ static ivas_error ivas_ism_bitrate_switching_dec( if ( !st_ivas->hDecoderConfig->Opt_5ms ) { - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - st_ivas->sba_analysis_order, - st_ivas->hDecoderConfig->ivas_total_brate + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); +#else + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas ); #endif - ); if ( nchan_out_buff > nchan_out_buff_old ) { diff --git a/lib_dec/ivas_mc_paramupmix_dec.c b/lib_dec/ivas_mc_paramupmix_dec.c index 836e4d5028..94309802a3 100644 --- a/lib_dec/ivas_mc_paramupmix_dec.c +++ b/lib_dec/ivas_mc_paramupmix_dec.c @@ -483,14 +483,11 @@ void ivas_mc_paramupmix_dec( } } - for ( ch = first_empty_channel; ch < ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - st_ivas->sba_analysis_order, - st_ivas->hDecoderConfig->ivas_total_brate + for ( ch = first_empty_channel; ch < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); ch++ ) +#else + for ( ch = first_empty_channel; ch < ivas_get_nchan_buffers_dec( st_ivas ); ch++ ) #endif - ); - ch++ ) { set_f( output_f[ch], 0.0f, output_frame ); } diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index fa36e4f896..0be357a8de 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -181,13 +181,12 @@ ivas_error ivas_omasa_dec_config( ivas_format_orig = st_ivas->ivas_format; st_ivas->ivas_format = st_ivas->last_ivas_format; ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old ); - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - st_ivas->sba_analysis_order, - st_ivas->hDecoderConfig->ivas_total_brate + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); +#else + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas ); #endif - ); + st_ivas->ivas_format = ivas_format_orig; nSCE_old = st_ivas->nSCE; @@ -420,13 +419,11 @@ ivas_error ivas_omasa_dec_config( if ( !st_ivas->hDecoderConfig->Opt_5ms ) { - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - st_ivas->sba_analysis_order, - st_ivas->hDecoderConfig->ivas_total_brate + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); +#else + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); #endif - ); if ( nchan_out_buff > nchan_out_buff_old ) { diff --git a/lib_dec/ivas_osba_dec.c b/lib_dec/ivas_osba_dec.c index ef46538d8c..6af1c7a2be 100644 --- a/lib_dec/ivas_osba_dec.c +++ b/lib_dec/ivas_osba_dec.c @@ -319,13 +319,11 @@ ivas_error ivas_osba_render( sba_ch_idx = 0; } - for ( n = 0; n < #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - max( nchan_out, nchan_ism ); + for ( n = 0; n < max( nchan_out, nchan_ism ); n++ ) #else - nchan_out; + for ( n = 0; n < nchan_out; n++ ) #endif - n++ ) { p_tmp_ism_out[n] = &tmp_ism_out[n][0]; } diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index a04fd758ef..dd843df37c 100755 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -156,13 +156,11 @@ ivas_error ivas_sba_dec_reconfigure( nCPE_old = st_ivas->nCPE; nchan_transport_old = st_ivas->nchan_transport; sba_dirac_stereo_flag_old = st_ivas->sba_dirac_stereo_flag; - nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - sba_analysis_order_old, - last_ivas_total_brate + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, sba_analysis_order_old, last_ivas_total_brate ); +#else + nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas ); #endif - ); st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, st_ivas->sba_order ); @@ -582,13 +580,11 @@ ivas_error ivas_sba_dec_reconfigure( if ( !st_ivas->hDecoderConfig->Opt_5ms ) { - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - st_ivas->sba_analysis_order, - st_ivas->hDecoderConfig->ivas_total_brate + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); +#else + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); #endif - ); if ( nchan_out_buff > nchan_out_buff_old ) { diff --git a/lib_dec/ivas_sba_rendering_internal.c b/lib_dec/ivas_sba_rendering_internal.c index 44596df2b7..8143328c5f 100644 --- a/lib_dec/ivas_sba_rendering_internal.c +++ b/lib_dec/ivas_sba_rendering_internal.c @@ -502,15 +502,11 @@ ivas_error ivas_sba_upmixer_renderer( sba_ch_idx = st_ivas->nchan_ism; } - for ( ch = 0; ch < ivas_get_nchan_buffers_dec( st_ivas #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - st_ivas->sba_analysis_order, - st_ivas->hDecoderConfig->ivas_total_brate + for ( ch = 0; ch < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ) - sba_ch_idx; ch++ ) +#else + for ( ch = 0; ch < ivas_get_nchan_buffers_dec( st_ivas ) - sba_ch_idx; ch++ ) #endif - ) - - sba_ch_idx; - ch++ ) { output_f[ch] = output[ch]; } -- GitLab From ae367d5b1dbb5102a0e6cc3af4d1ede8004b4356 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Wed, 20 Sep 2023 14:57:00 +0200 Subject: [PATCH 10/11] make arguments to ivas_get_nchan_buffers_dec const and add comments --- lib_rend/ivas_output_init.c | 4 ++-- lib_rend/ivas_prot_rend.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib_rend/ivas_output_init.c b/lib_rend/ivas_output_init.c index 1c9ff23b6e..3d57a7f219 100644 --- a/lib_rend/ivas_output_init.c +++ b/lib_rend/ivas_output_init.c @@ -269,8 +269,8 @@ int16_t ivas_get_nchan_buffers_dec( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH , - int16_t sba_analysis_order, - int32_t ivas_total_brate + const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ + const int32_t ivas_total_brate /* i : total IVAS bitrate */ #endif ) { diff --git a/lib_rend/ivas_prot_rend.h b/lib_rend/ivas_prot_rend.h index 3c26c04124..70285ac0f3 100644 --- a/lib_rend/ivas_prot_rend.h +++ b/lib_rend/ivas_prot_rend.h @@ -74,9 +74,9 @@ void ivas_output_init( int16_t ivas_get_nchan_buffers_dec( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH - , - int16_t sba_analysis_order, - int32_t ivas_total_brate + , + const int16_t sba_analysis_order, /* i : SBA order evaluated in DirAC/SPAR encoder */ + const int32_t ivas_total_brate /* i : total IVAS bitrate */ #endif ); -- GitLab From ef0e5899b8e204b461d8afea337beaddad5351b1 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Thu, 21 Sep 2023 09:17:25 +0200 Subject: [PATCH 11/11] fix arguments to ivas_get_nchan_buffers_dec when NONBE_FIX_798_OSBA_MC_DEC_CRASH is disabled --- lib_dec/ivas_omasa_dec.c | 2 +- lib_dec/ivas_sba_dec.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_dec/ivas_omasa_dec.c b/lib_dec/ivas_omasa_dec.c index 015c2a0316..f631869b35 100644 --- a/lib_dec/ivas_omasa_dec.c +++ b/lib_dec/ivas_omasa_dec.c @@ -421,7 +421,7 @@ ivas_error ivas_omasa_dec_config( #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); #else - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas ); #endif if ( nchan_out_buff > nchan_out_buff_old ) diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index afe5f21b9a..e1a58a6a8e 100755 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -585,7 +585,7 @@ ivas_error ivas_sba_dec_reconfigure( #ifdef NONBE_FIX_798_OSBA_MC_DEC_CRASH nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); #else - nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); + nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas ); #endif if ( nchan_out_buff > nchan_out_buff_old ) -- GitLab