On Fri, Nov 13, 2015 at 07:38:31AM -0500, Ganesh Ajjanagadde wrote: > On Fri, Nov 13, 2015 at 6:40 AM, Michael Niedermayer > <mich...@niedermayer.cc> wrote: > > On Thu, Nov 12, 2015 at 09:46:04PM -0500, Ganesh Ajjanagadde wrote: > >> The rationale for this function is reflected in the documentation for > >> it, and is copied here: > >> > >> Clip a double value into the long long amin-amax range. > >> This function is needed because conversion of floating point to integers > >> when > >> it does not fit in the integer's representation does not necessarily > >> saturate > >> correctly (usually converted to a cvttsd2si on x86) which saturates numbers > >> > INT64_MAX to INT64_MIN. The standard marks such conversions as undefined > >> behavior, allowing this sort of mathematically bogus conversions. This > >> provides > >> a safe alternative that is slower obviously but assures safety and better > >> mathematical behavior. > >> API: > >> @param a value to clip > >> @param amin minimum value of the clip range > >> @param amax maximum value of the clip range > >> @return clipped value > >> > >> Note that a priori if one can guarantee from the calling side that the > >> double is in range, it is safe to simply do an explicit/implicit cast, > >> and that will be far faster. However, otherwise this function should be > >> used. > >> > >> avutil minor version is bumped. > >> > >> Reviewed-by: Ronald S. Bultje <rsbul...@gmail.com> > >> Signed-off-by: Ganesh Ajjanagadde <gajjanaga...@gmail.com> > >> --- > >> libavutil/common.h | 31 +++++++++++++++++++++++++++++++ > >> libavutil/version.h | 4 ++-- > >> 2 files changed, 33 insertions(+), 2 deletions(-) > >> > >> diff --git a/libavutil/common.h b/libavutil/common.h > >> index 6f0f582..4f60e72 100644 > >> --- a/libavutil/common.h > >> +++ b/libavutil/common.h > >> @@ -298,6 +298,34 @@ static av_always_inline av_const double > >> av_clipd_c(double a, double amin, double > >> else return a; > >> } > >> > >> +/** > >> + * Clip and convert a double value into the long long amin-amax range. > >> + * This function is needed because conversion of floating point to > >> integers when > >> + * it does not fit in the integer's representation does not necessarily > >> saturate > >> + * correctly (usually converted to a cvttsd2si on x86) which saturates > >> numbers > >> + * > INT64_MAX to INT64_MIN. The standard marks such conversions as > >> undefined > >> + * behavior, allowing this sort of mathematically bogus conversions. This > >> provides > >> + * a safe alternative that is slower obviously but assures safety and > >> better > >> + * mathematical behavior. > >> + * @param a value to clip > >> + * @param amin minimum value of the clip range > >> + * @param amax maximum value of the clip range > >> + * @return clipped value > >> + */ > >> +static av_always_inline av_const int64_t av_rint64_clip_c(double a, > >> int64_t amin, int64_t amax) > >> +{ > >> +#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= > >> 2 > >> + if (amin > amax) abort(); > >> +#endif > >> + // INT64_MAX+1,INT64_MIN are exactly representable as IEEE doubles > >> + if (a >= 9223372036854775808.0) > >> + return INT64_MAX; > >> + if (a <= INT64_MIN) > >> + return INT64_MIN; > >> + // Finally safe to call av_clipd_c > >> + return (int64_t)av_clipd_c(a, amin, amax); > >> +} > > > > this fails to build here: > > Does not get compiled on my machine, that is why I missed this. Very > strange, stdint is included in this header. Can you tell me what to > pass to configure in order to reproduce this?
i think "--enable-libutvideo" i suspect that any C++ file which includes this might trigger it but i didnt check that [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The worst form of inequality is to try to make unequal things equal. -- Aristotle
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel