[FFmpeg-devel] [PATCH] FATE: fix colorbalance fate test failed on x86_32
Paul B Mahol
onemda at gmail.com
Thu Jul 2 11:44:22 EEST 2020
lgtm
On 7/2/20, lance.lmwang at gmail.com <lance.lmwang at gmail.com> wrote:
> From: Limin Wang <lance.lmwang at 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 at 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 at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list