Skip to content

SBA Static memory

Using the code-base SHA-1: 30b12f8d from September 9, 2022, there was observed that some handles related to the SBA static memory are used only partially. Also, at the highest bitrates, the static RAM for binaural output is really high where the convolution module is opened and almost not used:

image

The modules with the most possible saving are listed below. The percentage numbers are related to the memory actually used in the handle. The full report can be obtained by MEM_COUNT_DETAILS in the framework.

1) encoder, HOA3, 512 kbps -

  • init_encoder 768 m:sizeof( IGF_ENC_INSTANCE ) - 0% 4x2071 8284

st->hIGFEnc = (IGF_ENC_INSTANCE_HANDLE) count_malloc( sizeof( IGF_ENC_INSTANCE ) )

-> follow-up in #157 (closed)

  • ivas_spar_md_enc_o 165 m:sizeof( ivas_spar_md_enc_state_t ) - 34% 1x4189 4189

hMdEnc = (ivas_spar_md_enc_state_t *) count_malloc( sizeof( ivas_spar_md_enc_state_t ) )

-> follow-up in #161 (closed)

2) decoder, stereo output, 512 kbps

  • init_decoder 680 m:sizeof( IGFDEC_INSTANCE ) - 37% 4x2692 10768

st->hIGFDec = (IGF_DEC_INSTANCE_HANDLE) count_malloc( sizeof( IGFDEC_INSTANCE ) )

-> follow-up in #157 (closed)

  • ivas_sba_get_hoa_d 119 m:16 * 16 * sizeof( float ) - 13% 1x256 256

*hoa_dec_mtx = (float *) count_malloc( SBA_NHARM_HOA3 * MAX_OUTPUT_CHANNELS * sizeof( float ) )

-> follow-up in #159 (closed)

  • ivas_spar_agc_dec_ 118 m:sizeof( float ) * output_frame - 40% 1x960 960

hAgc->agc_com.winFunc = (float *) count_malloc( sizeof( float ) * output_frame )

-> follow-up in #162 (closed)

  • ivas_spar_td_decor 135 m:sizeof( ivas_td_decorr_state_t ) - 24% 1x724 724

hCovState = (ivas_td_decorr_state_t *) count_malloc( sizeof( ivas_td_decorr_state_t ) )

-> follow-up in #163 (closed)

  • ivas_spar_md_dec_m 154 m:12 * 4 * sizeof( ivas_band_coeffs_ - 63% 1x2496 2496

hMdDec->spar_md.band_coeffs = (ivas_band_coeffs_t *) count_malloc( IVAS_MAX_NUM_BANDS * MAX_PARAM_SPATIAL_SUBFRAMES * sizeof( ivas_band_coeffs_t ) )

-> follow-up in #161 (closed)

  • ivas_spar_md_dec_o 316 m:sizeof( ivas_spar_md_dec_state_t ) - 61% 1x8047 8047

hMdDec = (ivas_spar_md_dec_state_t *) count_malloc( sizeof( ivas_spar_md_dec_state_t ) )

-> follow-up in #161 (closed)

3) decoder, HOA3 output, 512 kbps

  • same as above except of hoa_dec_mtx

-> follow-up in #159 (closed)

4) decoder, binaural output, 512 kbps

  • ivas_binRenderer_c 166 m:sizeof( BINRENDERER_CONV_MODULE ) - 9% 1x157466 157466

hBinRenConvModule = (BINRENDERER_CONV_MODULE_HANDLE) count_malloc( sizeof( BINRENDERER_CONV_MODULE ) )

-> follow-up in #145 (closed)

5) decoder, 7.1.4 output, 512 kbps

  • ivas_dirac_alloc_m 1229 m:sizeof( float ) * 2 * 4 * num_outp - 0% 1x5280 5280

hDirAC_mem->proto_diffuse_buffer_f = (float *) malloc_( sizeof( float ) * 2 * MAX_PARAM_SPATIAL_SUBFRAMES * num_outputs_diff * num_freq_bands );

-> follow-up in #158 (closed)

  • ivas_dirac_alloc_m 1245 m:sizeof( float ) * num_outputs_diff - 0% 1x660 660

hDirAC_mem->onset_filter = (float *) malloc_( sizeof( float ) * num_outputs_diff * num_freq_bands );

-> follow-up in #158 (closed)

6) decoder, binaural, 80 kbps

     ivas_dirac_alloc_m  1184 m:sizeof( float ) * size              -  100%    1x120    120
     ivas_dirac_alloc_m  1186 m:sizeof( float ) * size              -  100%    1x120    120
     ivas_dirac_alloc_m  1188 m:sizeof( float ) * size              -  100%    1x120    120
     ivas_dirac_alloc_m  1190 m:sizeof( float ) * size              -  100%    1x120    120
     ivas_dirac_alloc_m  1193 m:sizeof( float ) * 2 * num_outputs_  -    0%    1x240    240
     ivas_dirac_alloc_m  1201 m:sizeof( float ) * size              -  100%    1x120    120
     ivas_dirac_alloc_m  1205 m:sizeof( float ) * size              -  100%    1x120    120
     ivas_dirac_alloc_m  1217 m:sizeof( float ) * size              -  100%    1x120    120
     ivas_dirac_alloc_m  1222 m:sizeof( float ) * 2 * 4 * num_prot  -    0%    1x960    960
     ivas_dirac_alloc_m  1229 m:sizeof( float ) * 2 * 4 * num_outp  -    0%    1x960    960
     ivas_dirac_alloc_m  1235 m:sizeof( float ) * num_freq_bands    -    0%     1x60     60
     ivas_dirac_alloc_m  1236 m:sizeof( float ) * num_freq_bands    -    0%     1x60     60
     ivas_dirac_alloc_m  1244 m:sizeof( float ) * 2 * num_freq_ban  -    0%    1x120    120
     ivas_dirac_alloc_m  1245 m:sizeof( float ) * num_outputs_diff  -    0%    1x120    120
     ivas_dirac_dec_con   231 m:sizeof( DIRAC_DEC_DATA )            -    9%   1x2241   2241

-> follow-up in #158 (closed)

7) decoder, binaural, 32 kbps

  • ivas_dirac_dec_con 772 m:sizeof( float ) * 2 * hDirAC->num_ - 0% 1x240 240

hDirAC->proto_frame_f = (float *) count_malloc( sizeof( float ) * 2 * hDirAC->num_protos_diff * hDirAC->num_freq_bands );

-> follow-up in #158 (closed)

8) encoder, HOA3, 13.2 kbps

  • ivas_FB_mixer_open 213 m:sizeof( ivas_filterbank_t ) - 4% 1x1854 1854

hFbMixer->pFb = (ivas_filterbank_t *) count_malloc( sizeof( ivas_filterbank_t ) )

-> follow-up in #126 (closed)

Can the usage be optimized?

Edited by vaclav