Currently, there are numerous instances where the appropriate libm rounding functions lrint, llrint, rint, etc are not used and instead ad-hoc, slow, and sometimes risky floor(x + 0.5) and the like are being used. The risk comes from the fact that such a thing is broken for negative values and values close to the 0.5 fractional part boundary. The ad-hoc nature comes from the fact that we anyway have compat hacks in avutil/libm for broken platforms, and they are not being used. The slowness comes from the generate code, e.g llrint compiles down to a single asm instruction cvttsd2si, while floor(x + 0.5) needs to do multiple things.
Note that the audit may have missed some things; essentially this was found by doing a grep for 'floor' across the codebase and checking. Patches split per file. Ganesh Ajjanagadde (9): avfilter/vsrc_mptestsrc: use lrint instead of floor hack avfilter/vf_perspective: use lrint instead of floor hack avfilter/af_stereotools: use lrint instead of floor hack avfilter/af_flanger: use rint instead of floor hack avcodec/cos_tablegen: use rint instead of floor hack avcodec/kbdwin: use lrint instead of floor hack avcodec/mdct_template: use lrint instead of floor hack avcodec/wavpackenc: use lrint instead of floor hack avcodec/sonic: use lrint instead of floor hack libavcodec/cos_tablegen.c | 4 ++-- libavcodec/kbdwin.c | 3 ++- libavcodec/mdct_template.c | 5 +++-- libavcodec/sonic.c | 2 +- libavcodec/wavpackenc.c | 4 ++-- libavfilter/af_flanger.c | 2 +- libavfilter/af_stereotools.c | 8 ++++---- libavfilter/vf_perspective.c | 10 +++++----- libavfilter/vsrc_mptestsrc.c | 2 +- 9 files changed, 21 insertions(+), 19 deletions(-) -- 2.6.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel