From 722a2170e83231283fc74bede495b3b4ee9591ac Mon Sep 17 00:00:00 2001 From: James Almer Date: Sat, 19 Jul 2025 00:01:37 -0300 Subject: [PATCH] avfilter/vf_curves: don't add offsets to NULL pointers Signed-off-by: James Almer --- libavfilter/vf_curves.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libavfilter/vf_curves.c b/libavfilter/vf_curves.c index 4f302209e6..8ff69807d9 100644 --- a/libavfilter/vf_curves.c +++ b/libavfilter/vf_curves.c @@ -813,11 +813,11 @@ static int filter_slice_planar(AVFilterContext *ctx, void *arg, int jobnr, int n uint16_t *dstrp = ( uint16_t *)(out->data[r] + y * out->linesize[r]); uint16_t *dstgp = ( uint16_t *)(out->data[g] + y * out->linesize[g]); uint16_t *dstbp = ( uint16_t *)(out->data[b] + y * out->linesize[b]); - uint16_t *dstap = ( uint16_t *)(out->data[a] + y * out->linesize[a]); + uint16_t *dstap = ( uint16_t *)(step == 4 ? out->data[a] + y * out->linesize[a] : NULL); const uint16_t *srcrp = (const uint16_t *)(in ->data[r] + y * in->linesize[r]); const uint16_t *srcgp = (const uint16_t *)(in ->data[g] + y * in->linesize[g]); const uint16_t *srcbp = (const uint16_t *)(in ->data[b] + y * in->linesize[b]); - const uint16_t *srcap = (const uint16_t *)(in ->data[a] + y * in->linesize[a]); + const uint16_t *srcap = (const uint16_t *)(step == 4 ? in ->data[a] + y * in->linesize[a] : NULL); for (x = 0; x < in->width; x++) { dstrp[x] = curves->graph[R][srcrp[x]]; @@ -831,11 +831,13 @@ static int filter_slice_planar(AVFilterContext *ctx, void *arg, int jobnr, int n uint8_t *dstr = out->data[r] + slice_start * out->linesize[r]; uint8_t *dstg = out->data[g] + slice_start * out->linesize[g]; uint8_t *dstb = out->data[b] + slice_start * out->linesize[b]; - uint8_t *dsta = out->data[a] + slice_start * out->linesize[a]; + uint8_t *dsta = step == 4 ? out->data[a] + + slice_start * out->linesize[a] : NULL; const uint8_t *srcr = in->data[r] + slice_start * in->linesize[r]; const uint8_t *srcg = in->data[g] + slice_start * in->linesize[g]; const uint8_t *srcb = in->data[b] + slice_start * in->linesize[b]; - const uint8_t *srca = in->data[a] + slice_start * in->linesize[a]; + const uint8_t *srca = step == 4 ? in->data[a] + + slice_start * in->linesize[a] : NULL; for (y = slice_start; y < slice_end; y++) { for (x = 0; x < in->width; x++) { @@ -848,11 +850,13 @@ static int filter_slice_planar(AVFilterContext *ctx, void *arg, int jobnr, int n dstr += out->linesize[r]; dstg += out->linesize[g]; dstb += out->linesize[b]; - dsta += out->linesize[a]; srcr += in ->linesize[r]; srcg += in ->linesize[g]; srcb += in ->linesize[b]; - srca += in ->linesize[a]; + if (step == 4) { + dsta += out->linesize[a]; + srca += in ->linesize[a]; + } } } return 0;