This adds a fallback for cbrtf() using powf(x, 1/3). Since powf() with a non-integer exponent requires a non-negative base, special handling of negative inputs is needed.
Signed-off-by: Mans Rullgard <[email protected]> --- Not tested on anything without cbrtf(). --- configure | 2 ++ libavutil/libm.h | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/configure b/configure index bba30ed..083ef77 100755 --- a/configure +++ b/configure @@ -1067,6 +1067,7 @@ HAVE_LIST=" asm_mod_y attribute_may_alias attribute_packed + cbrtf closesocket cmov dcbzl @@ -2956,6 +2957,7 @@ done check_lib math.h sin -lm && LIBM="-lm" enabled vaapi && require vaapi va/va.h vaInitialize -lva +check_mathfunc cbrtf check_mathfunc exp2 check_mathfunc exp2f check_mathfunc llrint diff --git a/libavutil/libm.h b/libavutil/libm.h index 783f3cd..b6d8a94 100644 --- a/libavutil/libm.h +++ b/libavutil/libm.h @@ -28,6 +28,13 @@ #include "config.h" #include "attributes.h" +#if !HAVE_CBRTF +static av_always_inline float cbrtf(float x) +{ + return x < 0 ? -powf(-x, 1.0 / 3.0) : powf(x, 1.0 / 3.0); +} +#endif + #if !HAVE_EXP2 #undef exp2 #define exp2(x) exp((x) * 0.693147180559945) -- 1.7.10.2 _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
