diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2021-03-26 16:24:59 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-04-02 21:41:26 +0200 |
commit | cc3b05e424b1e84fb747ac3c7034405eceb81eb4 (patch) | |
tree | ecb8264258598b8c37135a8c0e3a4279607a89c2 | |
parent | 195cce45cf7c35521717c45871b314a8e61c8e90 (diff) | |
download | ffmpeg-cc3b05e424b1e84fb747ac3c7034405eceb81eb4.tar.gz |
avfilter/vf_codecview: Fix undefined left shifts of negative numbers
Affected the filter-codecview-mvs FATE-test.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
(cherry picked from commit 3c151e79991181c8b7b9f9b888ac46eba91c5012)
-rw-r--r-- | libavfilter/vf_codecview.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/libavfilter/vf_codecview.c b/libavfilter/vf_codecview.c index 197dc96136..28ac2df72f 100644 --- a/libavfilter/vf_codecview.c +++ b/libavfilter/vf_codecview.c @@ -141,7 +141,7 @@ static void draw_line(uint8_t *buf, int sx, int sy, int ex, int ey, } buf += sx + sy * stride; ex -= sx; - f = ((ey - sy) << 16) / ex; + f = ((ey - sy) * (1 << 16)) / ex; for (x = 0; x <= ex; x++) { y = (x * f) >> 16; fr = (x * f) & 0xFFFF; @@ -156,7 +156,7 @@ static void draw_line(uint8_t *buf, int sx, int sy, int ex, int ey, buf += sx + sy * stride; ey -= sy; if (ey) - f = ((ex - sx) << 16) / ey; + f = ((ex - sx) * (1 << 16)) / ey; else f = 0; for(y= 0; y <= ey; y++){ @@ -199,8 +199,8 @@ static void draw_arrow(uint8_t *buf, int sx, int sy, int ex, int length = sqrt((rx * rx + ry * ry) << 8); // FIXME subpixel accuracy - rx = ROUNDED_DIV(rx * 3 << 4, length); - ry = ROUNDED_DIV(ry * 3 << 4, length); + rx = ROUNDED_DIV(rx * (3 << 4), length); + ry = ROUNDED_DIV(ry * (3 << 4), length); if (tail) { rx = -rx; |