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>
This commit is contained in:
Limin Wang
2020-07-01 20:57:58 +08:00
parent c367d14d0a
commit 49054fe94c
5 changed files with 24 additions and 24 deletions
+12 -12
View File
@@ -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];
}
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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
+3 -3
View File
@@ -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