提交 49054fe9 编写于 作者: L Limin Wang

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: NPaul B Mahol <onemda@gmail.com>
Signed-off-by: NLimin Wang <lance.lmwang@gmail.com>
上级 c367d14d
......@@ -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,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,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,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,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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册