1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- $OpenBSD: patch-libavutil_internal_h,v 1.2 2017/06/15 11:33:18 ajacoutot Exp $
- lavu/internal: add ff_exp10
- lavc/aacenc_utils: replace powf(x,y) by expf(logf(x), y)
- Index: libavutil/internal.h
- --- libavutil/internal.h.orig
- +++ libavutil/internal.h
- @@ -270,6 +270,42 @@ void avpriv_request_sample(void *avc,
- #endif
-
- /**
- + * Compute 10^x for floating point values. Note: this function is by no means
- + * "correctly rounded", and is meant as a fast, reasonably accurate approximation.
- + * For instance, maximum relative error for the double precision variant is
- + * ~ 1e-13 for very small and very large values.
- + * This is ~2x faster than GNU libm's approach, which is still off by 2ulp on
- + * some inputs.
- + * @param x exponent
- + * @return 10^x
- + */
- +static av_always_inline double ff_exp10(double x)
- +{
- + return exp2(M_LOG2_10 * x);
- +}
- +
- +static av_always_inline float ff_exp10f(float x)
- +{
- + return exp2f(M_LOG2_10 * x);
- +}
- +
- +/**
- + * Compute x^y for floating point x, y. Note: this function is faster than the
- + * libm variant due to mainly 2 reasons:
- + * 1. It does not handle any edge cases. In particular, this is only guaranteed
- + * to work correctly for x > 0.
- + * 2. It is not as accurate as a standard nearly "correctly rounded" libm variant.
- + * @param x base
- + * @param y exponent
- + * @return x^y
- + */
- +static av_always_inline float ff_fast_powf(float x, float y)
- +{
- + return expf(logf(x) * y);
- +}
- +
- +
- +/**
- * A wrapper for open() setting O_CLOEXEC.
- */
- int avpriv_open(const char *filename, int flags, ...);
|