• Ganesh Ajjanagadde's avatar
    avutil/common: add av_rint64_clip · 6f520ce1
    Ganesh Ajjanagadde authored
    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: 's avatarRonald S. Bultje <rsbultje@gmail.com>
    Signed-off-by: 's avatarGanesh Ajjanagadde <gajjanagadde@gmail.com>
    6f520ce1
common.h 16.5 KB