Commit 8f5de34c authored by Martin Storsjö's avatar Martin Storsjö

vf_fade: Make sure to not miss the last lines of a frame

When slice_h is rounded up due to chroma subsampling, there's
a risk that jobnr * slice_h exceeds frame->height.

Prior to a638e918, this wasn't an issue for the last slice
of a frame, since slice_end was set to frame->height for the last
slice.

a638e918 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 a638e918 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: 's avatarMartin Storsjö <martin@martin.st>
parent d00a0d8e
......@@ -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++) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment