It has been demonstrated that using libc provided floating point functions is beneficial, in the context of fabs() vs FFABS.
Unfortunately, MSVC 2012 (and earlier) lack the ISO C99 fmax, fmaxf, fmin, fminf functions. This patch adds them, thus making their usage in FFmpeg safe. Signed-off-by: Ganesh Ajjanagadde <gajjanaga...@gmail.com> --- configure | 9 +++++++++ libavutil/libm.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/configure b/configure index 52a65a4..571d4f2 100755 --- a/configure +++ b/configure @@ -1766,6 +1766,10 @@ MATH_FUNCS=" exp2 exp2f expf + fmax + fmaxf + fmin + fminf isinf isnan ldexpf @@ -5278,6 +5282,11 @@ disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersi atan2f_args=2 copysign_args=2 +fmax_args=2 +fmaxf_args=2 +fmin_args=2 +fminf_args=2 +fmin_args=2 ldexpf_args=2 powf_args=2 diff --git a/libavutil/libm.h b/libavutil/libm.h index 6c17b28..a4a2cc0 100644 --- a/libavutil/libm.h +++ b/libavutil/libm.h @@ -82,6 +82,34 @@ static av_always_inline float cbrtf(float x) #define exp2f(x) ((float)exp2(x)) #endif /* HAVE_EXP2F */ +#if !HAVE_FMAX +static av_always_inline av_const double fmax(double x, double y) +{ + return (x >= y) ? x : y; +} +#endif /* HAVE_FMAX */ + +#if !HAVE_FMAXF +static av_always_inline av_const float fmaxf(float x, float y) +{ + return (x >= y) ? x : y; +} +#endif /* HAVE_FMAXF */ + +#if !HAVE_FMIN +static av_always_inline av_const double fmin(double x, double y) +{ + return (x <= y) ? x : y; +} +#endif /* HAVE_FMIN */ + +#if !HAVE_FMINF +static av_always_inline av_const float fminf(float x, float y) +{ + return (x <= y) ? x : y; +} +#endif /* HAVE_FMINF */ + #if !HAVE_ISINF static av_always_inline av_const int isinf(float x) { -- 2.6.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel