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 |
Context | Check | Description |
---|---|---|
andriy/default | pending | |
andriy/make | success | Make finished |
andriy/make_fate | success | Make fate finished |
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".
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 --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