summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLimin Wang <lance.lmwang@gmail.com>2020-07-01 20:57:58 +0800
committerLimin Wang <lance.lmwang@gmail.com>2020-07-02 21:12:37 +0800
commit49054fe94c2f36881f63d15eca6e4bfb7f71b8ce (patch)
treef49b31de5afe49025ab3ab326732442192b270e1
parentc367d14d0a5d4ce1c007f636ba85681915fd5f79 (diff)
FATE: fix colorbalance fate test failed on x86_32
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. Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
-rw-r--r--libavfilter/vf_colorbalance.c24
-rw-r--r--tests/ref/fate/filter-colorbalance6
-rw-r--r--tests/ref/fate/filter-colorbalance-gbrap6
-rw-r--r--tests/ref/fate/filter-colorbalance-gbrap-166
-rw-r--r--tests/ref/fate/filter-colorbalance-rgba646
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