diff mbox series

[FFmpeg-devel] FATE: fix colorbalance fate test failed on x86_32

Message ID 1593652812-9277-1-git-send-email-lance.lmwang@gmail.com
State Accepted
Commit 49054fe94c2f36881f63d15eca6e4bfb7f71b8ce
Headers show
Series [FFmpeg-devel] FATE: fix colorbalance fate test failed on x86_32 | expand

Checks

Context Check Description
andriy/default pending
andriy/make success Make finished
andriy/make_fate success Make fate finished

Commit Message

Lance Wang July 2, 2020, 1:20 a.m. UTC
From: Limin Wang <lance.lmwang@gmail.com>

floating point precision will cause rgb*max generate different value on
x86_32 and x86_64. have pass fate test on x86_32 and x86_64 by using
lrintf to get the nearest integral value for rgb * max before av_clip.

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
---
 libavfilter/vf_colorbalance.c               | 24 ++++++++++-----------
 tests/ref/fate/filter-colorbalance          |  6 +++---
 tests/ref/fate/filter-colorbalance-gbrap    |  6 +++---
 tests/ref/fate/filter-colorbalance-gbrap-16 |  6 +++---
 tests/ref/fate/filter-colorbalance-rgba64   |  6 +++---
 5 files changed, 24 insertions(+), 24 deletions(-)

Comments

Paul B Mahol July 2, 2020, 8:44 a.m. UTC | #1
lgtm

On 7/2/20, lance.lmwang@gmail.com <lance.lmwang@gmail.com> wrote:
> From: Limin Wang <lance.lmwang@gmail.com>
>
> floating point precision will cause rgb*max generate different value on
> x86_32 and x86_64. have pass fate test on x86_32 and x86_64 by using
> lrintf to get the nearest integral value for rgb * max before av_clip.
>
> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> ---
>  libavfilter/vf_colorbalance.c               | 24 ++++++++++-----------
>  tests/ref/fate/filter-colorbalance          |  6 +++---
>  tests/ref/fate/filter-colorbalance-gbrap    |  6 +++---
>  tests/ref/fate/filter-colorbalance-gbrap-16 |  6 +++---
>  tests/ref/fate/filter-colorbalance-rgba64   |  6 +++---
>  5 files changed, 24 insertions(+), 24 deletions(-)
>
> diff --git a/libavfilter/vf_colorbalance.c b/libavfilter/vf_colorbalance.c
> index cc90dc08c7..6dc1b28483 100644
> --- a/libavfilter/vf_colorbalance.c
> +++ b/libavfilter/vf_colorbalance.c
> @@ -188,9 +188,9 @@ static int color_balance8_p(AVFilterContext *ctx, void
> *arg, int jobnr, int nb_j
>              if (s->preserve_lightness)
>                  preservel(&r, &g, &b, l);
>
> -            dstr[j] = av_clip_uint8(r * max);
> -            dstg[j] = av_clip_uint8(g * max);
> -            dstb[j] = av_clip_uint8(b * max);
> +            dstr[j] = av_clip_uint8(lrintf(r * max));
> +            dstg[j] = av_clip_uint8(lrintf(g * max));
> +            dstb[j] = av_clip_uint8(lrintf(b * max));
>              if (in != out && out->linesize[3])
>                  dsta[j] = srca[j];
>          }
> @@ -242,9 +242,9 @@ static int color_balance16_p(AVFilterContext *ctx, void
> *arg, int jobnr, int nb_
>              if (s->preserve_lightness)
>                  preservel(&r, &g, &b, l);
>
> -            dstr[j] = av_clip_uintp2_c(r * max, depth);
> -            dstg[j] = av_clip_uintp2_c(g * max, depth);
> -            dstb[j] = av_clip_uintp2_c(b * max, depth);
> +            dstr[j] = av_clip_uintp2_c(lrintf(r * max), depth);
> +            dstg[j] = av_clip_uintp2_c(lrintf(g * max), depth);
> +            dstb[j] = av_clip_uintp2_c(lrintf(b * max), depth);
>              if (in != out && out->linesize[3])
>                  dsta[j] = srca[j];
>          }
> @@ -299,9 +299,9 @@ static int color_balance8(AVFilterContext *ctx, void
> *arg, int jobnr, int nb_job
>              if (s->preserve_lightness)
>                  preservel(&r, &g, &b, l);
>
> -            dst[j + roffset] = av_clip_uint8(r * max);
> -            dst[j + goffset] = av_clip_uint8(g * max);
> -            dst[j + boffset] = av_clip_uint8(b * max);
> +            dst[j + roffset] = av_clip_uint8(lrintf(r * max));
> +            dst[j + goffset] = av_clip_uint8(lrintf(g * max));
> +            dst[j + boffset] = av_clip_uint8(lrintf(b * max));
>              if (in != out && step == 4)
>                  dst[j + aoffset] = src[j + aoffset];
>          }
> @@ -351,9 +351,9 @@ static int color_balance16(AVFilterContext *ctx, void
> *arg, int jobnr, int nb_jo
>              if (s->preserve_lightness)
>                  preservel(&r, &g, &b, l);
>
> -            dst[j + roffset] = av_clip_uintp2_c(r * max, depth);
> -            dst[j + goffset] = av_clip_uintp2_c(g * max, depth);
> -            dst[j + boffset] = av_clip_uintp2_c(b * max, depth);
> +            dst[j + roffset] = av_clip_uintp2_c(lrintf(r * max), depth);
> +            dst[j + goffset] = av_clip_uintp2_c(lrintf(g * max), depth);
> +            dst[j + boffset] = av_clip_uintp2_c(lrintf(b * max), depth);
>              if (in != out && step == 4)
>                  dst[j + aoffset] = src[j + aoffset];
>          }
> diff --git a/tests/ref/fate/filter-colorbalance
> b/tests/ref/fate/filter-colorbalance
> index f267da572e..15491fe671 100644
> --- a/tests/ref/fate/filter-colorbalance
> +++ b/tests/ref/fate/filter-colorbalance
> @@ -3,6 +3,6 @@
>  #codec_id 0: rawvideo
>  #dimensions 0: 352x288
>  #sar 0: 0/1
> -0,          0,          0,        1,   304128, 0xd50c9fea
> -0,          1,          1,        1,   304128, 0xdf9e1f79
> -0,          2,          2,        1,   304128, 0x9b84087e
> +0,          0,          0,        1,   304128, 0xf68fadfd
> +0,          1,          1,        1,   304128, 0xa6302d9a
> +0,          2,          2,        1,   304128, 0x758d165a
> diff --git a/tests/ref/fate/filter-colorbalance-gbrap
> b/tests/ref/fate/filter-colorbalance-gbrap
> index a85dc388b0..2d76c7d08d 100644
> --- a/tests/ref/fate/filter-colorbalance-gbrap
> +++ b/tests/ref/fate/filter-colorbalance-gbrap
> @@ -3,6 +3,6 @@
>  #codec_id 0: rawvideo
>  #dimensions 0: 352x288
>  #sar 0: 0/1
> -0,          0,          0,        1,   405504, 0xd33217e5
> -0,          1,          1,        1,   405504, 0x08f161af
> -0,          2,          2,        1,   405504, 0x27508654
> +0,          0,          0,        1,   405504, 0xdcc71df0
> +0,          1,          1,        1,   405504, 0x48d56675
> +0,          2,          2,        1,   405504, 0x68058bf0
> diff --git a/tests/ref/fate/filter-colorbalance-gbrap-16
> b/tests/ref/fate/filter-colorbalance-gbrap-16
> index d18fe5a466..2ab96ad70f 100644
> --- a/tests/ref/fate/filter-colorbalance-gbrap-16
> +++ b/tests/ref/fate/filter-colorbalance-gbrap-16
> @@ -3,6 +3,6 @@
>  #codec_id 0: rawvideo
>  #dimensions 0: 352x288
>  #sar 0: 0/1
> -0,          0,          0,        1,   405504, 0x2e44c4b0
> -0,          1,          1,        1,   405504, 0xf47244e0
> -0,          2,          2,        1,   405504, 0x040769dd
> +0,          0,          0,        1,   405504, 0xa497ca1b
> +0,          1,          1,        1,   405504, 0x92c24b0e
> +0,          2,          2,        1,   405504, 0x965270bd
> diff --git a/tests/ref/fate/filter-colorbalance-rgba64
> b/tests/ref/fate/filter-colorbalance-rgba64
> index 254669ff88..605860dee5 100644
> --- a/tests/ref/fate/filter-colorbalance-rgba64
> +++ b/tests/ref/fate/filter-colorbalance-rgba64
> @@ -3,6 +3,6 @@
>  #codec_id 0: rawvideo
>  #dimensions 0: 352x288
>  #sar 0: 0/1
> -0,          0,          0,        1,   811008, 0x42e5db8b
> -0,          1,          1,        1,   811008, 0x31be5974
> -0,          2,          2,        1,   811008, 0xdef21287
> +0,          0,          0,        1,   811008, 0xc5f7e6ba
> +0,          1,          1,        1,   811008, 0x266955bf
> +0,          2,          2,        1,   811008, 0x55360c6e
> --
> 2.21.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Lance Wang July 2, 2020, 1:21 p.m. UTC | #2
On Thu, Jul 02, 2020 at 10:44:22AM +0200, Paul B Mahol wrote:
> lgtm

thanks, will apply.

> 
> On 7/2/20, lance.lmwang@gmail.com <lance.lmwang@gmail.com> wrote:
> > From: Limin Wang <lance.lmwang@gmail.com>
> >
> > floating point precision will cause rgb*max generate different value on
> > x86_32 and x86_64. have pass fate test on x86_32 and x86_64 by using
> > lrintf to get the nearest integral value for rgb * max before av_clip.
> >
> > Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> > ---
> >  libavfilter/vf_colorbalance.c               | 24 ++++++++++-----------
> >  tests/ref/fate/filter-colorbalance          |  6 +++---
> >  tests/ref/fate/filter-colorbalance-gbrap    |  6 +++---
> >  tests/ref/fate/filter-colorbalance-gbrap-16 |  6 +++---
> >  tests/ref/fate/filter-colorbalance-rgba64   |  6 +++---
> >  5 files changed, 24 insertions(+), 24 deletions(-)
> >
> > diff --git a/libavfilter/vf_colorbalance.c b/libavfilter/vf_colorbalance.c
> > index cc90dc08c7..6dc1b28483 100644
> > --- a/libavfilter/vf_colorbalance.c
> > +++ b/libavfilter/vf_colorbalance.c
> > @@ -188,9 +188,9 @@ static int color_balance8_p(AVFilterContext *ctx, void
> > *arg, int jobnr, int nb_j
> >              if (s->preserve_lightness)
> >                  preservel(&r, &g, &b, l);
> >
> > -            dstr[j] = av_clip_uint8(r * max);
> > -            dstg[j] = av_clip_uint8(g * max);
> > -            dstb[j] = av_clip_uint8(b * max);
> > +            dstr[j] = av_clip_uint8(lrintf(r * max));
> > +            dstg[j] = av_clip_uint8(lrintf(g * max));
> > +            dstb[j] = av_clip_uint8(lrintf(b * max));
> >              if (in != out && out->linesize[3])
> >                  dsta[j] = srca[j];
> >          }
> > @@ -242,9 +242,9 @@ static int color_balance16_p(AVFilterContext *ctx, void
> > *arg, int jobnr, int nb_
> >              if (s->preserve_lightness)
> >                  preservel(&r, &g, &b, l);
> >
> > -            dstr[j] = av_clip_uintp2_c(r * max, depth);
> > -            dstg[j] = av_clip_uintp2_c(g * max, depth);
> > -            dstb[j] = av_clip_uintp2_c(b * max, depth);
> > +            dstr[j] = av_clip_uintp2_c(lrintf(r * max), depth);
> > +            dstg[j] = av_clip_uintp2_c(lrintf(g * max), depth);
> > +            dstb[j] = av_clip_uintp2_c(lrintf(b * max), depth);
> >              if (in != out && out->linesize[3])
> >                  dsta[j] = srca[j];
> >          }
> > @@ -299,9 +299,9 @@ static int color_balance8(AVFilterContext *ctx, void
> > *arg, int jobnr, int nb_job
> >              if (s->preserve_lightness)
> >                  preservel(&r, &g, &b, l);
> >
> > -            dst[j + roffset] = av_clip_uint8(r * max);
> > -            dst[j + goffset] = av_clip_uint8(g * max);
> > -            dst[j + boffset] = av_clip_uint8(b * max);
> > +            dst[j + roffset] = av_clip_uint8(lrintf(r * max));
> > +            dst[j + goffset] = av_clip_uint8(lrintf(g * max));
> > +            dst[j + boffset] = av_clip_uint8(lrintf(b * max));
> >              if (in != out && step == 4)
> >                  dst[j + aoffset] = src[j + aoffset];
> >          }
> > @@ -351,9 +351,9 @@ static int color_balance16(AVFilterContext *ctx, void
> > *arg, int jobnr, int nb_jo
> >              if (s->preserve_lightness)
> >                  preservel(&r, &g, &b, l);
> >
> > -            dst[j + roffset] = av_clip_uintp2_c(r * max, depth);
> > -            dst[j + goffset] = av_clip_uintp2_c(g * max, depth);
> > -            dst[j + boffset] = av_clip_uintp2_c(b * max, depth);
> > +            dst[j + roffset] = av_clip_uintp2_c(lrintf(r * max), depth);
> > +            dst[j + goffset] = av_clip_uintp2_c(lrintf(g * max), depth);
> > +            dst[j + boffset] = av_clip_uintp2_c(lrintf(b * max), depth);
> >              if (in != out && step == 4)
> >                  dst[j + aoffset] = src[j + aoffset];
> >          }
> > diff --git a/tests/ref/fate/filter-colorbalance
> > b/tests/ref/fate/filter-colorbalance
> > index f267da572e..15491fe671 100644
> > --- a/tests/ref/fate/filter-colorbalance
> > +++ b/tests/ref/fate/filter-colorbalance
> > @@ -3,6 +3,6 @@
> >  #codec_id 0: rawvideo
> >  #dimensions 0: 352x288
> >  #sar 0: 0/1
> > -0,          0,          0,        1,   304128, 0xd50c9fea
> > -0,          1,          1,        1,   304128, 0xdf9e1f79
> > -0,          2,          2,        1,   304128, 0x9b84087e
> > +0,          0,          0,        1,   304128, 0xf68fadfd
> > +0,          1,          1,        1,   304128, 0xa6302d9a
> > +0,          2,          2,        1,   304128, 0x758d165a
> > diff --git a/tests/ref/fate/filter-colorbalance-gbrap
> > b/tests/ref/fate/filter-colorbalance-gbrap
> > index a85dc388b0..2d76c7d08d 100644
> > --- a/tests/ref/fate/filter-colorbalance-gbrap
> > +++ b/tests/ref/fate/filter-colorbalance-gbrap
> > @@ -3,6 +3,6 @@
> >  #codec_id 0: rawvideo
> >  #dimensions 0: 352x288
> >  #sar 0: 0/1
> > -0,          0,          0,        1,   405504, 0xd33217e5
> > -0,          1,          1,        1,   405504, 0x08f161af
> > -0,          2,          2,        1,   405504, 0x27508654
> > +0,          0,          0,        1,   405504, 0xdcc71df0
> > +0,          1,          1,        1,   405504, 0x48d56675
> > +0,          2,          2,        1,   405504, 0x68058bf0
> > diff --git a/tests/ref/fate/filter-colorbalance-gbrap-16
> > b/tests/ref/fate/filter-colorbalance-gbrap-16
> > index d18fe5a466..2ab96ad70f 100644
> > --- a/tests/ref/fate/filter-colorbalance-gbrap-16
> > +++ b/tests/ref/fate/filter-colorbalance-gbrap-16
> > @@ -3,6 +3,6 @@
> >  #codec_id 0: rawvideo
> >  #dimensions 0: 352x288
> >  #sar 0: 0/1
> > -0,          0,          0,        1,   405504, 0x2e44c4b0
> > -0,          1,          1,        1,   405504, 0xf47244e0
> > -0,          2,          2,        1,   405504, 0x040769dd
> > +0,          0,          0,        1,   405504, 0xa497ca1b
> > +0,          1,          1,        1,   405504, 0x92c24b0e
> > +0,          2,          2,        1,   405504, 0x965270bd
> > diff --git a/tests/ref/fate/filter-colorbalance-rgba64
> > b/tests/ref/fate/filter-colorbalance-rgba64
> > index 254669ff88..605860dee5 100644
> > --- a/tests/ref/fate/filter-colorbalance-rgba64
> > +++ b/tests/ref/fate/filter-colorbalance-rgba64
> > @@ -3,6 +3,6 @@
> >  #codec_id 0: rawvideo
> >  #dimensions 0: 352x288
> >  #sar 0: 0/1
> > -0,          0,          0,        1,   811008, 0x42e5db8b
> > -0,          1,          1,        1,   811008, 0x31be5974
> > -0,          2,          2,        1,   811008, 0xdef21287
> > +0,          0,          0,        1,   811008, 0xc5f7e6ba
> > +0,          1,          1,        1,   811008, 0x266955bf
> > +0,          2,          2,        1,   811008, 0x55360c6e
> > --
> > 2.21.0
> >
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox series

Patch

diff --git a/libavfilter/vf_colorbalance.c b/libavfilter/vf_colorbalance.c
index cc90dc08c7..6dc1b28483 100644
--- a/libavfilter/vf_colorbalance.c
+++ b/libavfilter/vf_colorbalance.c
@@ -188,9 +188,9 @@  static int color_balance8_p(AVFilterContext *ctx, void *arg, int jobnr, int nb_j
             if (s->preserve_lightness)
                 preservel(&r, &g, &b, l);
 
-            dstr[j] = av_clip_uint8(r * max);
-            dstg[j] = av_clip_uint8(g * max);
-            dstb[j] = av_clip_uint8(b * max);
+            dstr[j] = av_clip_uint8(lrintf(r * max));
+            dstg[j] = av_clip_uint8(lrintf(g * max));
+            dstb[j] = av_clip_uint8(lrintf(b * max));
             if (in != out && out->linesize[3])
                 dsta[j] = srca[j];
         }
@@ -242,9 +242,9 @@  static int color_balance16_p(AVFilterContext *ctx, void *arg, int jobnr, int nb_
             if (s->preserve_lightness)
                 preservel(&r, &g, &b, l);
 
-            dstr[j] = av_clip_uintp2_c(r * max, depth);
-            dstg[j] = av_clip_uintp2_c(g * max, depth);
-            dstb[j] = av_clip_uintp2_c(b * max, depth);
+            dstr[j] = av_clip_uintp2_c(lrintf(r * max), depth);
+            dstg[j] = av_clip_uintp2_c(lrintf(g * max), depth);
+            dstb[j] = av_clip_uintp2_c(lrintf(b * max), depth);
             if (in != out && out->linesize[3])
                 dsta[j] = srca[j];
         }
@@ -299,9 +299,9 @@  static int color_balance8(AVFilterContext *ctx, void *arg, int jobnr, int nb_job
             if (s->preserve_lightness)
                 preservel(&r, &g, &b, l);
 
-            dst[j + roffset] = av_clip_uint8(r * max);
-            dst[j + goffset] = av_clip_uint8(g * max);
-            dst[j + boffset] = av_clip_uint8(b * max);
+            dst[j + roffset] = av_clip_uint8(lrintf(r * max));
+            dst[j + goffset] = av_clip_uint8(lrintf(g * max));
+            dst[j + boffset] = av_clip_uint8(lrintf(b * max));
             if (in != out && step == 4)
                 dst[j + aoffset] = src[j + aoffset];
         }
@@ -351,9 +351,9 @@  static int color_balance16(AVFilterContext *ctx, void *arg, int jobnr, int nb_jo
             if (s->preserve_lightness)
                 preservel(&r, &g, &b, l);
 
-            dst[j + roffset] = av_clip_uintp2_c(r * max, depth);
-            dst[j + goffset] = av_clip_uintp2_c(g * max, depth);
-            dst[j + boffset] = av_clip_uintp2_c(b * max, depth);
+            dst[j + roffset] = av_clip_uintp2_c(lrintf(r * max), depth);
+            dst[j + goffset] = av_clip_uintp2_c(lrintf(g * max), depth);
+            dst[j + boffset] = av_clip_uintp2_c(lrintf(b * max), depth);
             if (in != out && step == 4)
                 dst[j + aoffset] = src[j + aoffset];
         }
diff --git a/tests/ref/fate/filter-colorbalance b/tests/ref/fate/filter-colorbalance
index f267da572e..15491fe671 100644
--- a/tests/ref/fate/filter-colorbalance
+++ b/tests/ref/fate/filter-colorbalance
@@ -3,6 +3,6 @@ 
 #codec_id 0: rawvideo
 #dimensions 0: 352x288
 #sar 0: 0/1
-0,          0,          0,        1,   304128, 0xd50c9fea
-0,          1,          1,        1,   304128, 0xdf9e1f79
-0,          2,          2,        1,   304128, 0x9b84087e
+0,          0,          0,        1,   304128, 0xf68fadfd
+0,          1,          1,        1,   304128, 0xa6302d9a
+0,          2,          2,        1,   304128, 0x758d165a
diff --git a/tests/ref/fate/filter-colorbalance-gbrap b/tests/ref/fate/filter-colorbalance-gbrap
index a85dc388b0..2d76c7d08d 100644
--- a/tests/ref/fate/filter-colorbalance-gbrap
+++ b/tests/ref/fate/filter-colorbalance-gbrap
@@ -3,6 +3,6 @@ 
 #codec_id 0: rawvideo
 #dimensions 0: 352x288
 #sar 0: 0/1
-0,          0,          0,        1,   405504, 0xd33217e5
-0,          1,          1,        1,   405504, 0x08f161af
-0,          2,          2,        1,   405504, 0x27508654
+0,          0,          0,        1,   405504, 0xdcc71df0
+0,          1,          1,        1,   405504, 0x48d56675
+0,          2,          2,        1,   405504, 0x68058bf0
diff --git a/tests/ref/fate/filter-colorbalance-gbrap-16 b/tests/ref/fate/filter-colorbalance-gbrap-16
index d18fe5a466..2ab96ad70f 100644
--- a/tests/ref/fate/filter-colorbalance-gbrap-16
+++ b/tests/ref/fate/filter-colorbalance-gbrap-16
@@ -3,6 +3,6 @@ 
 #codec_id 0: rawvideo
 #dimensions 0: 352x288
 #sar 0: 0/1
-0,          0,          0,        1,   405504, 0x2e44c4b0
-0,          1,          1,        1,   405504, 0xf47244e0
-0,          2,          2,        1,   405504, 0x040769dd
+0,          0,          0,        1,   405504, 0xa497ca1b
+0,          1,          1,        1,   405504, 0x92c24b0e
+0,          2,          2,        1,   405504, 0x965270bd
diff --git a/tests/ref/fate/filter-colorbalance-rgba64 b/tests/ref/fate/filter-colorbalance-rgba64
index 254669ff88..605860dee5 100644
--- a/tests/ref/fate/filter-colorbalance-rgba64
+++ b/tests/ref/fate/filter-colorbalance-rgba64
@@ -3,6 +3,6 @@ 
 #codec_id 0: rawvideo
 #dimensions 0: 352x288
 #sar 0: 0/1
-0,          0,          0,        1,   811008, 0x42e5db8b
-0,          1,          1,        1,   811008, 0x31be5974
-0,          2,          2,        1,   811008, 0xdef21287
+0,          0,          0,        1,   811008, 0xc5f7e6ba
+0,          1,          1,        1,   811008, 0x266955bf
+0,          2,          2,        1,   811008, 0x55360c6e