From 461da3b5a0cc9b8c5bb2cf718d6c60ea7c006cd4 Mon Sep 17 00:00:00 2001 From: Tapani Pihlajakuja Date: Wed, 21 Aug 2024 21:04:19 +0300 Subject: [PATCH] Fix issue 1120 by correcting reconfigure and futureproof similar cases. --- lib_com/options.h | 1 + lib_dec/ivas_masa_dec.c | 16 ++++++++++++++++ lib_dec/ivas_mct_dec.c | 12 ++++++++++++ 3 files changed, 29 insertions(+) diff --git a/lib_com/options.h b/lib_com/options.h index 68dbb25b4e..d0c6812563 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 544f3d36bf..879af3a1a2 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 0c284a2436..81b800de8e 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 ) ); -- GitLab