Fixes ticket #7528. Signed-off-by: Marton Balint <c...@passwd.hu> --- libavfilter/vf_geq.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vf_geq.c b/libavfilter/vf_geq.c index 2905efae24..417b92222d 100644 --- a/libavfilter/vf_geq.c +++ b/libavfilter/vf_geq.c @@ -377,6 +377,7 @@ static int slice_geq_filter(AVFilterContext *ctx, void *arg, int jobnr, int nb_j int x, y; uint8_t *ptr; uint16_t *ptr16; + AVExprState *state = av_expr_state_alloc(); double values[VAR_VARS_NB]; values[VAR_W] = geq->values[VAR_W]; @@ -386,6 +387,9 @@ static int slice_geq_filter(AVFilterContext *ctx, void *arg, int jobnr, int nb_j values[VAR_SH] = geq->values[VAR_SH]; values[VAR_T] = geq->values[VAR_T]; + if (!state) + return AVERROR(ENOMEM); + if (geq->bps == 8) { for (y = slice_start; y < slice_end; y++) { ptr = geq->dst + linesize * y; @@ -393,7 +397,7 @@ static int slice_geq_filter(AVFilterContext *ctx, void *arg, int jobnr, int nb_j for (x = 0; x < width; x++) { values[VAR_X] = x; - ptr[x] = av_expr_eval(geq->e[plane], values, geq); + ptr[x] = av_expr_eval2(geq->e[plane], state, values, geq); } ptr += linesize; } @@ -404,10 +408,11 @@ static int slice_geq_filter(AVFilterContext *ctx, void *arg, int jobnr, int nb_j values[VAR_Y] = y; for (x = 0; x < width; x++) { values[VAR_X] = x; - ptr16[x] = av_expr_eval(geq->e[plane], values, geq); + ptr16[x] = av_expr_eval2(geq->e[plane], state, values, geq); } } } + av_expr_state_free(&state); return 0; } -- 2.16.4 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".