[FFmpeg-devel] [PATCH] [libavutil] Add saturated add/sub operations for int64_t.

Dale Curtis dalecurtis at chromium.org
Thu May 14 22:46:56 EEST 2020


On Thu, May 14, 2020 at 11:47 AM Michael Niedermayer <michael at niedermayer.cc>
wrote:

> On Fri, May 01, 2020 at 11:42:43AM -0700, Dale Curtis wrote:
> > On Fri, May 1, 2020 at 10:57 AM Carl Eugen Hoyos <ceffmpeg at gmail.com>
> wrote:
> >
> > > Could you confirm that you attached the wrong patch?
> > >
> >
> > No, I sent the patches without completing the rebase. Sorry.
> >
> > - dale
>
> >  common.h |   36 ++++++++++++++++++++++++++++++++++++
> >  1 file changed, 36 insertions(+)
> > f5567ae046c0c2d4ac9053611457b9d9045b6ccb  sat_math_v4.patch
> > From 06c20d84e3bf0f56bcba63ef8e74812e796f3ffe Mon Sep 17 00:00:00 2001
> > From: Dale Curtis <dalecurtis at chromium.org>
> > Date: Thu, 30 Apr 2020 15:16:31 -0700
> > Subject: [PATCH 1/2] Add saturated add/sub operations for int64_t.
> >
> > Many places are using their own custom code for handling overflow
> > around timestamps or other int64_t values. There are enough of these
> > now that having some common saturated math functions seems sound.
> >
> > Signed-off-by: Dale Curtis <dalecurtis at chromium.org>
> > ---
> >  libavutil/common.h | 36 ++++++++++++++++++++++++++++++++++++
> >  1 file changed, 36 insertions(+)
> >
> > diff --git a/libavutil/common.h b/libavutil/common.h
> > index 142ff9abe7..11907e5ba7 100644
> > --- a/libavutil/common.h
> > +++ b/libavutil/common.h
> > @@ -291,6 +291,36 @@ static av_always_inline int av_sat_dsub32_c(int a,
> int b)
> >      return av_sat_sub32(a, av_sat_add32(b, b));
> >  }
> >
> > +/**
> > + * Add two signed 64-bit values with saturation.
> > + *
> > + * @param  a one value
> > + * @param  b another value
> > + * @return sum with signed saturation
> > + */
> > +static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) {
> > +  if (b >= 0 && a >= INT64_MAX - b)
> > +    return INT64_MAX;
> > +  if (b <= 0 && a <= INT64_MIN - b)
> > +    return INT64_MIN;
> > +  return a + b;
> > +}
> > +
> > +/**
> > + * Subtract two signed 64-bit values with saturation.
> > + *
> > + * @param  a one value
> > + * @param  b another value
> > + * @return difference with signed saturation
> > + */
> > +static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) {
> > +  if (b <= 0 && a >= INT64_MAX + b) {
> > +    return INT64_MAX;
> > +  if (b >= 0 && a <= INT64_MIN + b) {
> > +    return INT64_MIN;
>
> the { are not paired with }
> this will not build
>
> indention level also does not match the rest of the code
>
>
Fixed, sorry about that.

- dale
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sat_math_v5.patch
Type: application/octet-stream
Size: 2102 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200514/14c5973e/attachment.obj>


More information about the ffmpeg-devel mailing list