diff --git a/lib_com/options.h b/lib_com/options.h index 68dbb25b4eb12b438a7c5b3197e05cf1fdf9c41a..d0c68125639c9dfa2a281637dd14e4804437c4fd 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -188,6 +188,7 @@ #define NONE_BE_FIX_816_LFE_PLC_FLOAT /* DLB: issue 816: reduce required precision to float for LFE-PLC*/ +#define NONBE_FIX_1220_OMASA_JBM_EXT_USAN /* Nokia: fix issue 1220 OMASA EXT JBM USAN, also fix similar cases of free to avoid future problems */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/ivas_masa_dec.c b/lib_dec/ivas_masa_dec.c index 544f3d36bfba6da5fdde037eda6ba8a87bdcafe9..879af3a1a2e41ae28b47de4c038879add4de0fa5 100644 --- a/lib_dec/ivas_masa_dec.c +++ b/lib_dec/ivas_masa_dec.c @@ -1322,7 +1322,12 @@ ivas_error ivas_masa_dec_reconfigure( ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate; last_ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate; +#ifdef NONBE_FIX_1220_OMASA_JBM_EXT_USAN + /* Copy state to TC buffer if granularity matches and we are not in OMASA EXT rendering mode */ + if ( st_ivas->hSpatParamRendCom != NULL && st_ivas->hSpatParamRendCom->slot_size == st_ivas->hTcBuffer->n_samples_granularity && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_EXTERNAL ) +#else if ( st_ivas->hSpatParamRendCom != NULL && st_ivas->hSpatParamRendCom->slot_size == st_ivas->hTcBuffer->n_samples_granularity ) +#endif { mvs2s( st_ivas->hSpatParamRendCom->subframe_nbslots, st_ivas->hTcBuffer->subframe_nbslots, MAX_JBM_SUBFRAMES_5MS ); st_ivas->hTcBuffer->nb_subframes = st_ivas->hSpatParamRendCom->nb_subframes; @@ -1343,6 +1348,16 @@ ivas_error ivas_masa_dec_reconfigure( return error; } } +#ifdef NONBE_FIX_1220_OMASA_JBM_EXT_USAN + else if ( st_ivas->renderer_type == RENDERER_DISABLE || st_ivas->renderer_type == RENDERER_MONO_DOWNMIX || st_ivas->renderer_type == RENDERER_OMASA_MIX_EXT ) + { + /* close all unnecessary parametric decoding and rendering */ + ivas_dirac_dec_close_binaural_data( st_ivas->hDiracDecBin ); + ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); + ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); + ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); + } +#else else if ( st_ivas->renderer_type == RENDERER_DISABLE || st_ivas->renderer_type == RENDERER_MONO_DOWNMIX ) { if ( st_ivas->hDirAC != NULL ) @@ -1354,6 +1369,7 @@ ivas_error ivas_masa_dec_reconfigure( ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); } } +#endif /* possible reconfigure is done later */ /*-----------------------------------------------------------------* diff --git a/lib_dec/ivas_mct_dec.c b/lib_dec/ivas_mct_dec.c index 0c284a24366282fab421f0c224fb507d024a68e7..81b800de8eeadd3f9454e054a3e04a2694caec8e 100644 --- a/lib_dec/ivas_mct_dec.c +++ b/lib_dec/ivas_mct_dec.c @@ -849,13 +849,17 @@ static ivas_error ivas_mc_dec_reconfig( ivas_masa_dec_close( &( st_ivas->hMasa ) ); ivas_qmetadata_close( &st_ivas->hQMetaData ); +#ifndef NONBE_FIX_1220_OMASA_JBM_EXT_USAN if ( st_ivas->hDirAC != NULL ) { +#endif ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); vbap_free_data( &( st_ivas->hVBAPdata ) ); +#ifndef NONBE_FIX_1220_OMASA_JBM_EXT_USAN } +#endif /* init LS conversion if the renderer type asks for it */ if ( st_ivas->renderer_type == RENDERER_MC && st_ivas->hLsSetUpConversion == NULL ) @@ -935,14 +939,18 @@ static ivas_error ivas_mc_dec_reconfig( ivas_masa_dec_close( &( st_ivas->hMasa ) ); ivas_qmetadata_close( &st_ivas->hQMetaData ); +#ifndef NONBE_FIX_1220_OMASA_JBM_EXT_USAN if ( st_ivas->hDirAC != NULL ) { +#endif ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) ); ivas_dirac_dec_close( &( st_ivas->hDirAC ) ); vbap_free_data( &( st_ivas->hVBAPdata ) ); +#ifndef NONBE_FIX_1220_OMASA_JBM_EXT_USAN } +#endif if ( last_mc_mode == MC_MODE_MCT ) { @@ -1177,7 +1185,11 @@ static ivas_error ivas_mc_dec_reconfig( } } } +#ifdef NONBE_FIX_1220_OMASA_JBM_EXT_USAN + else if ( st_ivas->renderer_type == RENDERER_DISABLE ) +#else else if ( st_ivas->renderer_type == RENDERER_DISABLE && st_ivas->hDirAC != NULL ) +#endif { ivas_dirac_rend_close( &( st_ivas->hDirACRend ) ); ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) );