summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2021-10-14 19:58:56 +0200
committerPaul B Mahol <onemda@gmail.com>2021-10-14 20:05:39 +0200
commite1b820fa339a9cc3178105ff2c05611e8e751852 (patch)
tree945536bfda89eb6f3ccd657f3b44d057ec6bf355 /libavfilter
parentbb10f8d8029026fed0292e01ac7cd56f9d472f0f (diff)
avfilter/vf_overlay: unbreak alpha composition with negative y and threads > 1
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/vf_overlay.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c
index 2966cef09c..685b6069a6 100644
--- a/libavfilter/vf_overlay.c
+++ b/libavfilter/vf_overlay.c
@@ -574,15 +574,16 @@ static inline void alpha_composite_##depth##_##nbits##bits(const AVFrame *src, c
const uint##depth##_t max = (1 << nbits) - 1; \
int bytes = depth / 8; \
\
- imax = FFMIN(-y + dst_h, src_h); \
- slice_start = (imax * jobnr) / nb_jobs; \
- slice_end = ((imax * (jobnr+1)) / nb_jobs); \
- \
+ imax = FFMIN3(-y + dst_h, FFMIN(src_h, dst_h), y + src_h); \
i = FFMAX(-y, 0); \
- sa = (uint##depth##_t *)(src->data[3] + (i + slice_start) * src->linesize[3]); \
- da = (uint##depth##_t *)(dst->data[3] + (y + i + slice_start) * dst->linesize[3]); \
\
- for (i = i + slice_start; i < slice_end; i++) { \
+ slice_start = i + (imax * jobnr) / nb_jobs; \
+ slice_end = i + ((imax * (jobnr+1)) / nb_jobs); \
+ \
+ sa = (uint##depth##_t *)(src->data[3] + (slice_start) * src->linesize[3]); \
+ da = (uint##depth##_t *)(dst->data[3] + (y + slice_start) * dst->linesize[3]); \
+ \
+ for (i = slice_start; i < slice_end; i++) { \
j = FFMAX(-x, 0); \
s = sa + j; \
d = da + x+j; \