diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 53111de7533b6aed005491ce3cf00594246209a9..328f19c2c37d633a4fa9236cc0c9910907efb962 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -5276,6 +5276,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 dfb21d3748b832e11541eb84d876e1a7ec1ab592..56dae16c597ab3500866dc4df362b8a255f7c629 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -173,6 +173,7 @@ #define FIX_518_ISM_BRIR_EXTREND /* FhG: fix issue #518, cleanup ISM to BINAURAL_ROOM_IR rendering in the external renderer */ #define FIX_764_HARM_CODE /* VA: issue 764: introduce new function for the same code block at four different places */ #define FIX_747_ISM_TODOS /* VA: issue 747 - address ISM ToDos */ +#define FIX_ISMRENDERER_HANDLE_DEALLOC /* VA: issue 781: harmonize Deallocation of handle 'hIsmRendererData' */ /* #################### End BE switches ################################## */ @@ -199,9 +200,9 @@ #define NONBE_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* FhG: fix for cng in ISM DTX on sudden silence periods - JBM addon (issue 552) */ #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_588_UPDATE_FASTCONV_SD /* FhG: issue 588: update FastConv SD HRTFs in CLDFB domain with new conversion method */ + /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/ivas_init_dec.c b/lib_dec/ivas_init_dec.c index 74b30548d432718f7efc79745e620ce04445237d..a6ff01f3c986aa83977e7a1d594bd6497f865eaa 100644 --- a/lib_dec/ivas_init_dec.c +++ b/lib_dec/ivas_init_dec.c @@ -2550,12 +2550,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 0a1d862e9fa8717737a4a1bc3e09c066a09fd71e..00ba167fcf84d389ef192008d9bccd4b9362c6b6 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 == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR ) diff --git a/lib_dec/ivas_ism_renderer.c b/lib_dec/ivas_ism_renderer.c index cb2fcbdb2ca7db2d45fd8b35be7489e9e75114e2..b86741139900836c087342a91be6a8f2b0890388 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 e502821c51732d291268be6c8b5e5330151b014c..8ff8bcc48e991010f090a115c72150ecc125031a 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 )