From 8c22c279f55a8e73eb288c26e71f0dca411ebe99 Mon Sep 17 00:00:00 2001 From: vaclav Date: Fri, 8 Sep 2023 16:46:19 +0200 Subject: [PATCH] issue 781: harmonize Deallocation of handle 'hIsmRendererData'; under FIX_ISMRENDERER_HANDLE_DEALLOC --- lib_com/ivas_prot.h | 6 ++++++ lib_com/options.h | 2 ++ lib_dec/ivas_init_dec.c | 4 ++++ lib_dec/ivas_ism_dec.c | 9 +++++++++ lib_dec/ivas_ism_renderer.c | 34 ++++++++++++++++++++++++++++++++++ lib_dec/ivas_sba_dec.c | 9 ++++++++- 6 files changed, 63 insertions(+), 1 deletion(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 6893be758d..26123c3f5b 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5267,6 +5267,12 @@ ivas_error ivas_ism_renderer_open( Decoder_Struct *st_ivas /* i/o: IVAS decoder structure */ ); +#ifdef FIX_ISMRENDERER_HANDLE_DEALLOC +void ivas_ism_renderer_close( + ISM_RENDERER_HANDLE *hIsmRendererData /* i/o: ISM renderer handle */ +); +#endif + void ivas_ism_render( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output_f[], /* i/o: core-coder transport channels/object output */ diff --git a/lib_com/options.h b/lib_com/options.h index dadd57e9bd..eb6305c003 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -162,6 +162,8 @@ #define FIX_730_DPID_NOT_SET_CORRECTLY /* Eri: issue 730: write dpid read from file in correct index, print informative error message when DPID specified is not found. */ #define FIX_RAM_COUNTING_5MS_RENDERING /* FhG: fix for correct RAM reporting with 5ms rendering */ +#define FIX_ISMRENDERER_HANDLE_DEALLOC /* VA: issue 781: harmonize Deallocation of handle 'hIsmRendererData' */ + /* #################### End BE switches ################################## */ diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 3a4d4f8130..7aa43ba5a3 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2547,12 +2547,16 @@ void ivas_destroy_dec( ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); /* ISM renderer handle */ +#ifdef FIX_ISMRENDERER_HANDLE_DEALLOC + ivas_ism_renderer_close( &( st_ivas->hIsmRendererData ) ); +#else if ( st_ivas->hIsmRendererData != NULL ) { free( st_ivas->hIsmRendererData->interpolator ); free( st_ivas->hIsmRendererData ); st_ivas->hIsmRendererData = NULL; } +#endif /* DirAC handle */ if ( st_ivas->ivas_format == ISM_FORMAT ) diff --git a/lib_dec/ivas_ism_dec.c b/lib_dec/ivas_ism_dec.c index d83fd7ff07..cd76fcca04 100644 --- a/lib_dec/ivas_ism_dec.c +++ b/lib_dec/ivas_ism_dec.c @@ -210,12 +210,17 @@ static ivas_error ivas_ism_bitrate_switching_dec( else { /* close the ISM renderer and reinitialize */ +#ifdef FIX_ISMRENDERER_HANDLE_DEALLOC + ivas_ism_renderer_close( &st_ivas->hIsmRendererData ); +#else + if ( st_ivas->hIsmRendererData != NULL ) { free( st_ivas->hIsmRendererData->interpolator ); free( st_ivas->hIsmRendererData ); st_ivas->hIsmRendererData = NULL; } +#endif if ( ( error = ivas_ism_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) { @@ -295,12 +300,16 @@ static ivas_error ivas_ism_bitrate_switching_dec( else { /* Close the ISM renderer */ +#ifdef FIX_ISMRENDERER_HANDLE_DEALLOC + ivas_ism_renderer_close( &st_ivas->hIsmRendererData ); +#else if ( st_ivas->hIsmRendererData != NULL ) { free( st_ivas->hIsmRendererData->interpolator ); free( st_ivas->hIsmRendererData ); st_ivas->hIsmRendererData = NULL; } +#endif } if ( st_ivas->hOutSetup.output_config == AUDIO_CONFIG_BINAURAL_ROOM_IR ) diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index fabe708603..1d1a81ec8f 100644 --- a/lib_dec/ivas_ism_renderer.c +++ b/lib_dec/ivas_ism_renderer.c @@ -108,6 +108,36 @@ ivas_error ivas_ism_renderer_open( } +#ifdef FIX_ISMRENDERER_HANDLE_DEALLOC +/*-------------------------------------------------------------------------* + * ivas_ism_renderer_close() + * + * Close struct for object rendering. + *-------------------------------------------------------------------------*/ + +void ivas_ism_renderer_close( + ISM_RENDERER_HANDLE *hIsmRendererData /* i/o: ISM renderer handle */ +) +{ + if ( *hIsmRendererData == NULL || hIsmRendererData == NULL ) + { + return; + } + + if ( ( *hIsmRendererData )->interpolator != NULL ) + { + free( ( *hIsmRendererData )->interpolator ); + ( *hIsmRendererData )->interpolator = NULL; + } + + free( *hIsmRendererData ); + *hIsmRendererData = NULL; + + return; +} +#endif + + /*-------------------------------------------------------------------------* * ivas_ism_render() * @@ -440,6 +470,9 @@ void ivas_omasa_separate_object_renderer_close( } } +#ifdef FIX_ISMRENDERER_HANDLE_DEALLOC + ivas_ism_renderer_close( &st_ivas->hIsmRendererData ); +#else if ( st_ivas->hIsmRendererData != NULL ) { if ( st_ivas->hIsmRendererData->interpolator != NULL ) @@ -451,6 +484,7 @@ void ivas_omasa_separate_object_renderer_close( free( st_ivas->hIsmRendererData ); st_ivas->hIsmRendererData = NULL; } +#endif return; } diff --git a/lib_dec/ivas_sba_dec.c b/lib_dec/ivas_sba_dec.c index f2e99927b7..ef67869955 100755 --- a/lib_dec/ivas_sba_dec.c +++ b/lib_dec/ivas_sba_dec.c @@ -367,6 +367,7 @@ ivas_error ivas_sba_dec_reconfigure( /*-----------------------------------------------------------------* * Allocate, initialize, and configure SCE/CPE/MCT handles *-----------------------------------------------------------------*/ + if ( st_ivas->ivas_format == SBA_ISM_FORMAT ) { if ( ism_mode_old == ISM_MODE_NONE && st_ivas->ism_mode == ISM_SBA_MODE_DISC ) @@ -393,6 +394,7 @@ ivas_error ivas_sba_dec_reconfigure( return error; } } + if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV ) { /* Allocate TD renderer for the objects in DISC mode */ @@ -404,10 +406,12 @@ ivas_error ivas_sba_dec_reconfigure( } } } + if ( ( error = ivas_masa_ism_data_open( st_ivas ) ) != IVAS_ERR_OK ) { return error; } + /* Allocate 'hIsmRendererData' handle and memory for delay buffer within 'hMasaIsmData' */ if ( ( error = ivas_sba_ism_separate_object_renderer_open( st_ivas ) ) != IVAS_ERR_OK ) { @@ -422,17 +426,20 @@ ivas_error ivas_sba_dec_reconfigure( else if ( ism_mode_old == ISM_SBA_MODE_DISC && st_ivas->ism_mode == ISM_MODE_NONE ) { /* ISM renderer handle */ +#ifdef FIX_ISMRENDERER_HANDLE_DEALLOC + ivas_ism_renderer_close( &st_ivas->hIsmRendererData ); +#else if ( st_ivas->hIsmRendererData != NULL ) { free( st_ivas->hIsmRendererData->interpolator ); free( st_ivas->hIsmRendererData ); st_ivas->hIsmRendererData = NULL; } +#endif ivas_ism_metadata_close( st_ivas->hIsmMetaData, 0 ); ivas_masa_ism_data_close( &st_ivas->hMasaIsmData ); /* Time Domain binaural renderer handle */ - if ( st_ivas->hBinRendererTd != NULL ) { if ( st_ivas->hBinRendererTd->HrFiltSet_p->ModelParams.modelROM == TRUE ) -- GitLab