Skip to content

Double precision arithmetic in Reverberator

There are used double precision mathematical functions ceil() in ivas_binRenderer_convModuleOpen():

  • \lib_dec\ivas_binRenderer_internal.c(187): hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceil( 0.6f * hBinRenConvModule->numTaps );
  • \lib_dec\ivas_binRenderer_internal.c(191): hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceil( 0.5f * hBinRenConvModule->numTaps );
  • \lib_dec\ivas_binRenderer_internal.c(195): hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceil( 0.4f * hBinRenConvModule->numTaps );
  • \lib_dec\ivas_binRenderer_internal.c(199): hBinRenConvModule->numTapsArray[bandIdx] = (int16_t) ceil( 0.3f * hBinRenConvModule->numTaps )
  • \lib_rend\ivas_reverb.c(1203): transition_start = (int16_t) round( FFT_FILTER_WND_FLAT_REGION * fft_hist_size );
  • \lib_rend\ivas_reverb.c(1204): transition_length = (int16_t) round( FFT_FILTER_WND_TRANS_REGION * fft_hist_size );
  • \lib_rend\ivas_reverb_filter_design.c(590): idx_pivot = (int16_t) round( STEP_LIMIT_PIVOT_FREQ / freq_step );

Consider to use a single precision counterpart ceilf() / roundf() or an integer operation.

Then:

  • \lib_rend\ivas_reverb_filter_design.c(726): base_idx = (int16_t) floor( tbl_index ); -> floorf() or integer operation
Edited by vaclav