[FFmpeg-devel] [PATCH 1/2] configure+libm.h: add hypot emulation

Paul B Mahol onemda at gmail.com
Sat Nov 14 22:48:27 CET 2015


On 11/14/15, Ganesh Ajjanagadde <gajjanagadde at gmail.com> wrote:
> It is known that the naive sqrt(x*x + y*y) approach for computing the
> hypotenuse suffers from overflow and accuracy issues, see e.g
> http://www.johndcook.com/blog/2010/06/02/whats-so-hard-about-finding-a-hypotenuse/.
> This adds hypot support to FFmpeg, a C99 function.
>
> On platforms without hypot, this patch for simplicity does the naive
> direct computation outlined above. Improvements can be made separately.
>
> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
> ---
>  configure        | 2 ++
>  libavutil/libm.h | 8 ++++++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/configure b/configure
> index d518b21..45df724 100755
> --- a/configure
> +++ b/configure
> @@ -1774,6 +1774,7 @@ MATH_FUNCS="
>      exp2
>      exp2f
>      expf
> +    hypot
>      isinf
>      isnan
>      ldexpf
> @@ -5309,6 +5310,7 @@ disabled crystalhd || check_lib
> libcrystalhd/libcrystalhd_if.h DtsCrystalHDVersi
>
>  atan2f_args=2
>  copysign_args=2
> +hypot_args=2
>  ldexpf_args=2
>  powf_args=2
>
> diff --git a/libavutil/libm.h b/libavutil/libm.h
> index 6c17b28..ab5df1b 100644
> --- a/libavutil/libm.h
> +++ b/libavutil/libm.h
> @@ -82,6 +82,14 @@ static av_always_inline float cbrtf(float x)
>  #define exp2f(x) ((float)exp2(x))
>  #endif /* HAVE_EXP2F */
>
> +#if !HAVE_HYPOT
> +#undef hypot
> +static av_always_inline av_const double hypot(double x, double y)
> +{
> +    return sqrt(x*x + y*y);
> +}
> +#endif /* HAVE_HYPOT */
> +
>  #if !HAVE_ISINF
>  static av_always_inline av_const int isinf(float x)
>  {
> --
> 2.6.2
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

nonsense. either do the right thing or don't touch the code.


More information about the ffmpeg-devel mailing list