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;