From 8f5de34c8fb18fa1416e77d2cb998773a49ddb3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Thu, 16 Feb 2017 12:23:20 +0200 Subject: [PATCH] vf_fade: Make sure to not miss the last lines of a frame MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When slice_h is rounded up due to chroma subsampling, there's a risk that jobnr * slice_h exceeds frame->height. Prior to a638e9184d63, this wasn't an issue for the last slice of a frame, since slice_end was set to frame->height for the last slice. a638e9184d63 tried to fix the case where other slices than the last one would exceed frame->height (which can happen where the number of slices/threads is very large compared to the frame height). However, the fix in a638e9184d63 instead broke other cases, where slice_h * nb_threads < frame->height. Therefore, make sure the last slice always ends at frame->height. CC: libav-stable@libav.org Signed-off-by: Martin Storsjö --- libavfilter/vf_fade.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavfilter/vf_fade.c b/libavfilter/vf_fade.c index eb6d82a894..fd8c6ef4c8 100644 --- a/libavfilter/vf_fade.c +++ b/libavfilter/vf_fade.c @@ -123,7 +123,8 @@ static int filter_slice_chroma(AVFilterContext *ctx, void *arg, int jobnr, AVFrame *frame = arg; int slice_h = FFALIGN(frame->height / nb_jobs, 1 << s->vsub); int slice_start = jobnr * slice_h; - int slice_end = FFMIN((jobnr + 1) * slice_h, frame->height); + int slice_end = (jobnr == nb_jobs - 1) ? frame->height : + FFMIN((jobnr + 1) * slice_h, frame->height); int i, j, plane; for (plane = 1; plane < 3; plane++) {