The pad filter is currently broken for cases where all of the following hold:
(1) chroma subsampling exists (very common), (2) an input dimension is odd (uncommon), and (3) the corresponding output dimension is either the same as the input, or an expression like "ow-iw" or "oh-ih" is used to place the image at the right/bottom edge and the extra padding is even in size. The cause of the breakage is essentially that the output width and height are being rounded downward, causing the image to exceed the padded area slightly. It seems best to me to simply round the output width/height up instead of down, so I've attached a patch to do that. This fixes bugs #1618 and #8475. Commands to reproduce the bug: # create 15x15 test jpeg with 4:2:0 subsampling ffmpeg -f lavfi -i color=red:15x15,format=rgb24 -vframes 1 -vf format=yuvj420p red.jpg # output size = input size. fails ffmpeg -i red.jpg -vf pad=iw:ih:0:0 pad1.png # input at bottom right of output. fails ffmpeg -i red.jpg -vf pad=iw+16:ih+16:ow-iw:oh-ih pad2.png Ivan
From 52030219e09b5f9611ca6232b1f24197363fc23b Mon Sep 17 00:00:00 2001 From: Ivan Middleton <ivan.middle...@gmail.com> Date: Sun, 26 Jan 2020 20:25:59 -0700 Subject: [PATCH] avfilter/pad: round output width/height up instead of down. Fixes bugs #1618 and #8475. --- libavfilter/vf_pad.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavfilter/vf_pad.c b/libavfilter/vf_pad.c index e86292e..493e342 100644 --- a/libavfilter/vf_pad.c +++ b/libavfilter/vf_pad.c @@ -178,8 +178,8 @@ static int config_input(AVFilterLink *inlink) if (s->y < 0 || s->y + inlink->h > s->h) s->y = var_values[VAR_Y] = (s->h - inlink->h) / 2; - s->w = ff_draw_round_to_sub(&s->draw, 0, -1, s->w); - s->h = ff_draw_round_to_sub(&s->draw, 1, -1, s->h); + s->w = ff_draw_round_to_sub(&s->draw, 0, +1, s->w); + s->h = ff_draw_round_to_sub(&s->draw, 1, +1, s->h); /* sanity check params */ if (s->w < inlink->w || s->h < inlink->h) { av_log(ctx, AV_LOG_ERROR, "Padded dimensions cannot be smaller than input dimensions.\n"); -- 2.20.1
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".