From 9db9af558c15abe43d0596582c31f023d0cb7c85 Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 29 Apr 2025 12:10:28 +0200 Subject: [PATCH 1/5] issue 1319: Optimize the definition of buffer lengths in the SBA decoder; under FIX_1319_STACK_SBA_DECODER --- lib_com/ivas_prot.h | 5 ++ lib_com/options.h | 1 + lib_dec/ivas_dirac_dec.c | 130 +++++++++++++++++++++++++++++++++++- lib_dec/ivas_spar_decoder.c | 17 +++++ 4 files changed, 152 insertions(+), 1 deletion(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index f5e239f3b0..6bf80d3080 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -3719,8 +3719,13 @@ void ivas_dirac_dec_render_sf( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output */ const int16_t nchan_transport, /* i : number of transport channels */ +#ifdef FIX_1319_STACK_SBA_DECODER + float *pppQMfFrame_ts_re[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX], + float *pppQMfFrame_ts_im[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX] +#else float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] +#endif ); void computeDiffuseness_mdft( diff --git a/lib_com/options.h b/lib_com/options.h index 80cd7a383b..ed673144b3 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -160,6 +160,7 @@ /*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ #define TMP_FIX_1119_SPLIT_RENDERING_VOIP /* FhG: Add error check for unsupported config: split rendering with VoIP mode */ +#define FIX_1319_STACK_SBA_DECODER /* VA: issue 1319: Optimize the definition of buffer lengths in the SBA decoder */ /* #################### End BE switches ################################## */ diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 6ce9439d4b..792f756792 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -1622,6 +1622,80 @@ void ivas_dirac_dec_render( return; } +#ifdef FIX_1319_STACK_SBA_DECODER +/*------------------------------------------------------------------------- + * Local functions to Perform binaural rendering with optimized stack + *------------------------------------------------------------------------*/ + +static void binRenderer_split( + BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ + ISAR_DEC_SPLIT_REND_WRAPPER_HANDLE hSplitBinRend, /* i/o: /* ISAR split binaural rendering handle */ + COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined head and external orientation handle */ + const int16_t numTimeSlots, /* i : number of time slots to render */ + float Cldfb_RealBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ + float Cldfb_ImagBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + const int16_t slot_idx_start, + const int16_t num_freq_bands, + const int16_t nchan_out ) +{ + int16_t pos_idx, slot_idx, ch; + float Cldfb_RealBuffer_Binaural_loc[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural_loc[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + + /* Perform binaural rendering */ + ivas_binRenderer( hBinRenderer, &hSplitBinRend->splitrend.multiBinPoseData, hCombinedOrientationData, numTimeSlots, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + NULL, +#endif + Cldfb_ImagBuffer_Binaural_loc, Cldfb_ImagBuffer_Binaural_loc, RealBuffer, ImagBuffer ); + + for ( slot_idx = 0; slot_idx < numTimeSlots; slot_idx++ ) + { + for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) + { + mvr2r( Cldfb_RealBuffer_Binaural_loc[0][ch][slot_idx], Cldfb_RealBuffer_Binaural[0][ch][slot_idx_start + slot_idx], num_freq_bands ); + mvr2r( Cldfb_ImagBuffer_Binaural_loc[0][ch][slot_idx], Cldfb_ImagBuffer_Binaural[0][ch][slot_idx_start + slot_idx], num_freq_bands ); + } + } + + for ( pos_idx = 0; pos_idx < hBinRenderer->numPoses; pos_idx++ ) + { + for ( slot_idx = 0; slot_idx < numTimeSlots; slot_idx++ ) + { + for ( ch = 0; ch < nchan_out; ch++ ) + { + mvr2r( Cldfb_RealBuffer_Binaural_loc[pos_idx][ch][slot_idx], hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[( pos_idx * BINAURAL_CHANNELS ) + ch][slot_idx_start + slot_idx], num_freq_bands ); + mvr2r( Cldfb_ImagBuffer_Binaural_loc[pos_idx][ch][slot_idx], hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[( pos_idx * BINAURAL_CHANNELS ) + ch][slot_idx_start + slot_idx], num_freq_bands ); + } + } + } + + return; +} + + +static void binRenderer( + BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ + COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined head and external orientation handle */ + const int16_t numTimeSlots, /* i : number of time slots to render */ + float Cldfb_RealBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ + float Cldfb_ImagBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ + float RealBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i : LS signals */ + float ImagBuffer[][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX] /* i : LS signals */ +) +{ + /* Perform binaural rendering */ + ivas_binRenderer( hBinRenderer, NULL, hCombinedOrientationData, numTimeSlots, +#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG + NULL, +#endif + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, RealBuffer, ImagBuffer ); + + return; +} +#endif /*------------------------------------------------------------------------- * ivas_dirac_dec_render_sf() @@ -1633,8 +1707,13 @@ void ivas_dirac_dec_render_sf( Decoder_Struct *st_ivas, /* i/o: IVAS decoder structure */ float *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output */ const int16_t nchan_transport, /* i : number of transport channels */ +#ifdef FIX_1319_STACK_SBA_DECODER + float *pppQMfFrame_ts_re[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX], + float *pppQMfFrame_ts_im[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX] ) +#else float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] ) +#endif { int16_t i, ch, idx_in, idx_lfe; DIRAC_DEC_HANDLE hDirAC; @@ -1648,13 +1727,20 @@ void ivas_dirac_dec_render_sf( float *p_Rmat; int16_t slot_idx_start, slot_idx_start_cldfb_synth, md_idx; - /*CLDFB: last output channels reserved to LFT for CICPx*/ + /*CLDFB: last output channels reserved to LFE for CICPx*/ +#ifdef FIX_1319_STACK_SBA_DECODER + float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_RealBuffer_Binaural[1][BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; + float Cldfb_ImagBuffer_Binaural[1][BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; +#else float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX]; float Cldfb_RealBuffer_Temp[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; float Cldfb_ImagBuffer_Temp[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX]; +#endif int16_t index, num_freq_bands; /* local copies of azi, ele, diffuseness */ @@ -1831,17 +1917,29 @@ void ivas_dirac_dec_render_sf( /* CLDFB Analysis*/ for ( ch = 0; ch < nchan_transport; ch++ ) { +#ifdef FIX_1319_STACK_SBA_DECODER + cldfbAnalysis_ts( &( st_ivas->hTcBuffer->tc[hDirACRend->sba_map_tc[ch]][hSpatParamRendCom->num_freq_bands * index_slot] ), + Cldfb_RealBuffer_Binaural[0][ch][slot_idx], /* note: it is a tmp. buffer at this point */ + Cldfb_ImagBuffer_Binaural[0][ch][slot_idx], /* note: it is a tmp. buffer at this point */ + hSpatParamRendCom->num_freq_bands, + st_ivas->cldfbAnaDec[ch] ); +#else cldfbAnalysis_ts( &( st_ivas->hTcBuffer->tc[hDirACRend->sba_map_tc[ch]][hSpatParamRendCom->num_freq_bands * index_slot] ), Cldfb_RealBuffer_Temp[ch][slot_idx], Cldfb_ImagBuffer_Temp[ch][slot_idx], hSpatParamRendCom->num_freq_bands, st_ivas->cldfbAnaDec[ch] ); +#endif } } if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ ) { +#ifdef FIX_1319_STACK_SBA_DECODER + ivas_omasa_preProcessStereoTransportsForEditedObjects( st_ivas, Cldfb_RealBuffer_Binaural[0], Cldfb_ImagBuffer_Binaural[0], hSpatParamRendCom->num_freq_bands, subframe_idx ); +#else ivas_omasa_preProcessStereoTransportsForEditedObjects( st_ivas, Cldfb_RealBuffer_Temp, Cldfb_ImagBuffer_Temp, hSpatParamRendCom->num_freq_bands, subframe_idx ); +#endif } } @@ -1868,8 +1966,13 @@ void ivas_dirac_dec_render_sf( { for ( ch = 0; ch < nchan_transport; ch++ ) { +#ifdef FIX_1319_STACK_SBA_DECODER + mvr2r( Cldfb_RealBuffer_Binaural[0][ch][slot_idx], Cldfb_RealBuffer[ch][0], hSpatParamRendCom->num_freq_bands ); + mvr2r( Cldfb_ImagBuffer_Binaural[0][ch][slot_idx], Cldfb_ImagBuffer[ch][0], hSpatParamRendCom->num_freq_bands ); +#else mvr2r( Cldfb_RealBuffer_Temp[ch][slot_idx], Cldfb_RealBuffer[ch][0], hSpatParamRendCom->num_freq_bands ); mvr2r( Cldfb_ImagBuffer_Temp[ch][slot_idx], Cldfb_ImagBuffer[ch][0], hSpatParamRendCom->num_freq_bands ); +#endif } } else @@ -2312,6 +2415,20 @@ void ivas_dirac_dec_render_sf( } } +#ifdef FIX_1319_STACK_SBA_DECODER + /* Perform binaural rendering */ + if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) + { + binRenderer_split( st_ivas->hBinRenderer, st_ivas->hSplitBinRend, st_ivas->hCombinedOrientationData, hSpatParamRendCom->subframe_nbslots[subframe_idx], + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer, slot_idx_start, hSpatParamRendCom->num_freq_bands, st_ivas->hDecoderConfig->nchan_out ); + } + else + { + binRenderer( st_ivas->hBinRenderer, st_ivas->hCombinedOrientationData, hSpatParamRendCom->subframe_nbslots[subframe_idx], + Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer ); + } + +#else /* Perform binaural rendering */ ivas_binRenderer( st_ivas->hBinRenderer, ( st_ivas->hSplitBinRend == NULL ) ? NULL : &st_ivas->hSplitBinRend->splitrend.multiBinPoseData, st_ivas->hCombinedOrientationData, hSpatParamRendCom->subframe_nbslots[subframe_idx], #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG @@ -2334,13 +2451,19 @@ void ivas_dirac_dec_render_sf( } } } +#endif /* Inverse CLDFB*/ for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ ) { /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */ +#ifdef FIX_1319_STACK_SBA_DECODER + float *RealBuffer[CLDFB_SLOTS_PER_SUBFRAME]; + float *ImagBuffer[CLDFB_SLOTS_PER_SUBFRAME]; +#else float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; +#endif for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ ) { @@ -2364,8 +2487,13 @@ void ivas_dirac_dec_render_sf( } else { +#ifdef FIX_1319_STACK_SBA_DECODER + float *RealBuffer[CLDFB_SLOTS_PER_SUBFRAME]; + float *ImagBuffer[CLDFB_SLOTS_PER_SUBFRAME]; +#else float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES]; +#endif int16_t outchannels; idx_in = 0; diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 98dc1ad3fa..82cc10aaeb 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -1367,15 +1367,28 @@ void ivas_spar_dec_upmixer_sf( ) { int16_t cldfb_band, num_cldfb_bands, numch_in, numch_out; +#ifdef FIX_1319_STACK_SBA_DECODER + float *cldfb_in_ts_re[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; + float *cldfb_in_ts_im[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; +#else float *cldfb_in_ts_re[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; float *cldfb_in_ts_im[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; +#endif int16_t i, b, ts, out_ch, in_ch; int16_t num_spar_bands, spar_band, nchan_transport; int16_t num_in_ingest, split_band; int16_t slot_size, slot_idx_start; +#ifdef FIX_1319_STACK_SBA_DECODER + float *p_tc[MAX_INTERN_CHANNELS]; +#else float *p_tc[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; +#endif int16_t md_idx; +#ifdef FIX_1319_STACK_SBA_DECODER + float Pcm_tmp[MAX_INTERN_CHANNELS][2 /* Re, Im*/ * L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; +#else float Pcm_tmp[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][L_FRAME48k]; +#endif int16_t numch_out_dirac; float mixer_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS]; int16_t b_skip_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH]; @@ -1490,7 +1503,11 @@ void ivas_spar_dec_upmixer_sf( if ( hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_FOA ) { /* at this point, output channels are used as intermediate procesing buffers */ +#ifdef FIX_1319_STACK_SBA_DECODER + for ( in_ch = 0; in_ch < MAX_INTERN_CHANNELS; in_ch++ ) +#else for ( in_ch = 0; in_ch < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; in_ch++ ) +#endif { for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ ) { -- GitLab From bf945fb38df3e6ca0ac92e547094b28e8b09b576 Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 29 Apr 2025 12:31:16 +0200 Subject: [PATCH 2/5] fix --- lib_dec/ivas_dirac_dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 792f756792..0f0c8068de 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -1629,7 +1629,7 @@ void ivas_dirac_dec_render( static void binRenderer_split( BINAURAL_RENDERER_HANDLE hBinRenderer, /* i/o: binaural renderer handle */ - ISAR_DEC_SPLIT_REND_WRAPPER_HANDLE hSplitBinRend, /* i/o: /* ISAR split binaural rendering handle */ + ISAR_DEC_SPLIT_REND_WRAPPER_HANDLE hSplitBinRend, /* i/o: ISAR split binaural rendering handle */ COMBINED_ORIENTATION_HANDLE hCombinedOrientationData, /* i : combined head and external orientation handle */ const int16_t numTimeSlots, /* i : number of time slots to render */ float Cldfb_RealBuffer_Binaural[][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* o : Rotated Binaural signals */ -- GitLab From 43bb83505353c3dacf4351571db6586930a74a5a Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 29 Apr 2025 16:43:34 +0200 Subject: [PATCH 3/5] fix --- lib_dec/ivas_dirac_dec.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 0f0c8068de..d6576471af 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -1649,14 +1649,14 @@ static void binRenderer_split( #ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG NULL, #endif - Cldfb_ImagBuffer_Binaural_loc, Cldfb_ImagBuffer_Binaural_loc, RealBuffer, ImagBuffer ); + Cldfb_RealBuffer_Binaural_loc, Cldfb_ImagBuffer_Binaural_loc, RealBuffer, ImagBuffer ); for ( slot_idx = 0; slot_idx < numTimeSlots; slot_idx++ ) { for ( ch = 0; ch < BINAURAL_CHANNELS; ch++ ) { - mvr2r( Cldfb_RealBuffer_Binaural_loc[0][ch][slot_idx], Cldfb_RealBuffer_Binaural[0][ch][slot_idx_start + slot_idx], num_freq_bands ); - mvr2r( Cldfb_ImagBuffer_Binaural_loc[0][ch][slot_idx], Cldfb_ImagBuffer_Binaural[0][ch][slot_idx_start + slot_idx], num_freq_bands ); + mvr2r( Cldfb_RealBuffer_Binaural_loc[0][ch][slot_idx], Cldfb_RealBuffer_Binaural[0][ch][slot_idx], num_freq_bands ); + mvr2r( Cldfb_ImagBuffer_Binaural_loc[0][ch][slot_idx], Cldfb_ImagBuffer_Binaural[0][ch][slot_idx], num_freq_bands ); } } -- GitLab From 86bd92377d39720732f73b71b53d48439e03a38c Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 6 May 2025 20:05:45 +0200 Subject: [PATCH 4/5] fix to deallocate ISAR handle --- lib_dec/ivas_dirac_dec.c | 7 ++++--- lib_dec/lib_dec.c | 5 +++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index 96aec4aed5..e25196d288 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -1624,7 +1624,7 @@ void ivas_dirac_dec_render( #ifdef FIX_1319_STACK_SBA_DECODER /*------------------------------------------------------------------------- - * Local functions to Perform binaural rendering with optimized stack + * Local functions to perform binaural rendering with optimized stack *------------------------------------------------------------------------*/ static void binRenderer_split( @@ -1709,11 +1709,12 @@ void ivas_dirac_dec_render_sf( const int16_t nchan_transport, /* i : number of transport channels */ #ifdef FIX_1319_STACK_SBA_DECODER float *pppQMfFrame_ts_re[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX], - float *pppQMfFrame_ts_im[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX] ) + float *pppQMfFrame_ts_im[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX] #else float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], - float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] ) + float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] #endif +) { int16_t i, ch, idx_in, idx_lfe; DIRAC_DEC_HANDLE hDirAC; diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index ae919c2184..820d2808eb 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -4806,6 +4806,11 @@ static void ivas_destroy_handle_isar( free( ( *hSplitBinRend )->hCldfbDataOut ); ( *hSplitBinRend )->hCldfbDataOut = NULL; } +#ifdef FIX_1319_STACK_SBA_DECODER + + free_( ( *hSplitBinRend ) ); + ( *hSplitBinRend ) = NULL; +#endif } return; -- GitLab From 15e9dbdf96d02b8ac28c8d48b1214c0bc24a3a5f Mon Sep 17 00:00:00 2001 From: vaclav Date: Thu, 29 May 2025 10:08:22 +0200 Subject: [PATCH 5/5] address review comments --- lib_com/ivas_prot.h | 4 ++-- lib_dec/ivas_dirac_dec.c | 4 ++-- lib_dec/ivas_spar_decoder.c | 10 +++++----- lib_dec/lib_dec.c | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 770e09eccc..b8c3b2bd9d 100755 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -3707,8 +3707,8 @@ void ivas_dirac_dec_render_sf( float *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output */ const int16_t nchan_transport, /* i : number of transport channels */ #ifdef FIX_1319_STACK_SBA_DECODER - float *pppQMfFrame_ts_re[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX], - float *pppQMfFrame_ts_im[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX] + float *pppQMfFrame_ts_re[HOA3_CHANNELS][CLDFB_NO_COL_MAX], + float *pppQMfFrame_ts_im[HOA3_CHANNELS][CLDFB_NO_COL_MAX] #else float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] diff --git a/lib_dec/ivas_dirac_dec.c b/lib_dec/ivas_dirac_dec.c index e088ae5169..53c8d8ccd5 100644 --- a/lib_dec/ivas_dirac_dec.c +++ b/lib_dec/ivas_dirac_dec.c @@ -1730,8 +1730,8 @@ void ivas_dirac_dec_render_sf( float *output_f[], /* i/o: synthesized core-coder transport channels/DirAC output */ const int16_t nchan_transport, /* i : number of transport channels */ #ifdef FIX_1319_STACK_SBA_DECODER - float *pppQMfFrame_ts_re[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX], - float *pppQMfFrame_ts_im[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX] + float *pppQMfFrame_ts_re[HOA3_CHANNELS][CLDFB_NO_COL_MAX], + float *pppQMfFrame_ts_im[HOA3_CHANNELS][CLDFB_NO_COL_MAX] #else float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX], float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX] diff --git a/lib_dec/ivas_spar_decoder.c b/lib_dec/ivas_spar_decoder.c index 82cc10aaeb..bdcf15e2d8 100644 --- a/lib_dec/ivas_spar_decoder.c +++ b/lib_dec/ivas_spar_decoder.c @@ -1368,8 +1368,8 @@ void ivas_spar_dec_upmixer_sf( { int16_t cldfb_band, num_cldfb_bands, numch_in, numch_out; #ifdef FIX_1319_STACK_SBA_DECODER - float *cldfb_in_ts_re[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; - float *cldfb_in_ts_im[HOA3_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; + float *cldfb_in_ts_re[HOA3_CHANNELS][CLDFB_NO_COL_MAX]; + float *cldfb_in_ts_im[HOA3_CHANNELS][CLDFB_NO_COL_MAX]; #else float *cldfb_in_ts_re[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; float *cldfb_in_ts_im[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX]; @@ -1379,13 +1379,13 @@ void ivas_spar_dec_upmixer_sf( int16_t num_in_ingest, split_band; int16_t slot_size, slot_idx_start; #ifdef FIX_1319_STACK_SBA_DECODER - float *p_tc[MAX_INTERN_CHANNELS]; + float *p_tc[HOA3_CHANNELS]; #else float *p_tc[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS]; #endif int16_t md_idx; #ifdef FIX_1319_STACK_SBA_DECODER - float Pcm_tmp[MAX_INTERN_CHANNELS][2 /* Re, Im*/ * L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; + float Pcm_tmp[HOA3_CHANNELS][2 /* Re, Im*/ * L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES]; #else float Pcm_tmp[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][L_FRAME48k]; #endif @@ -1504,7 +1504,7 @@ void ivas_spar_dec_upmixer_sf( { /* at this point, output channels are used as intermediate procesing buffers */ #ifdef FIX_1319_STACK_SBA_DECODER - for ( in_ch = 0; in_ch < MAX_INTERN_CHANNELS; in_ch++ ) + for ( in_ch = 0; in_ch < HOA3_CHANNELS; in_ch++ ) #else for ( in_ch = 0; in_ch < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; in_ch++ ) #endif diff --git a/lib_dec/lib_dec.c b/lib_dec/lib_dec.c index 888ebbd84f..eb4ae46195 100644 --- a/lib_dec/lib_dec.c +++ b/lib_dec/lib_dec.c @@ -4802,7 +4802,7 @@ static void ivas_destroy_handle_isar( } #ifdef FIX_1319_STACK_SBA_DECODER - free_( ( *hSplitBinRend ) ); + free( ( *hSplitBinRend ) ); ( *hSplitBinRend ) = NULL; #endif } -- GitLab