diff options
-rw-r--r-- | libavfilter/vf_overlay.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c index 5ac114a..b5c3f6f 100644 --- a/libavfilter/vf_overlay.c +++ b/libavfilter/vf_overlay.c @@ -170,16 +170,21 @@ static void eval_expr(AVFilterContext *ctx, enum EvalTarget eval_tgt) static int set_expr(AVExpr **pexpr, const char *expr, void *log_ctx) { int ret; + AVExpr *old = NULL; if (*pexpr) - av_expr_free(*pexpr); - *pexpr = NULL; + old = *pexpr; ret = av_expr_parse(pexpr, expr, var_names, NULL, NULL, NULL, NULL, 0, log_ctx); - if (ret < 0) + if (ret < 0) { av_log(log_ctx, AV_LOG_ERROR, "Error when evaluating the expression '%s'\n", expr); - return ret; + *pexpr = old; + return ret; + } + + av_expr_free(old); + return 0; } static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, |