[FFmpeg-devel] [PATCH] avfilter/vf_vignette: force per frame evaluation if per frame variables are used

Michael Niedermayer michaelni at gmx.at
Mon Mar 30 21:57:35 CEST 2015


Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
---
 libavfilter/vf_vignette.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/libavfilter/vf_vignette.c b/libavfilter/vf_vignette.c
index 806bd72..9a05651 100644
--- a/libavfilter/vf_vignette.c
+++ b/libavfilter/vf_vignette.c
@@ -161,15 +161,20 @@ static void update_context(VignetteContext *s, AVFilterLink *inlink, AVFrame *fr
         s->var_values[VAR_T]   = TS2T(frame->pts, inlink->time_base);
         s->var_values[VAR_PTS] = TS2D(frame->pts);
     } else {
-        s->var_values[VAR_N]   = 0;
+        s->var_values[VAR_N]   = NAN;
         s->var_values[VAR_T]   = NAN;
         s->var_values[VAR_PTS] = NAN;
     }
 
-    s->angle = av_clipf(av_expr_eval(s->angle_pexpr, s->var_values, NULL), 0, M_PI_2);
+    s->angle = av_expr_eval(s->angle_pexpr, s->var_values, NULL);
     s->x0 = av_expr_eval(s->x0_pexpr, s->var_values, NULL);
     s->y0 = av_expr_eval(s->y0_pexpr, s->var_values, NULL);
 
+    if (isnan(s->x0) || isnan(s->y0) || isnan(s->angle))
+        s->eval_mode = EVAL_MODE_FRAME;
+
+    s->angle = av_clipf(s->angle, 0, M_PI_2);
+
     if (s->backward) {
         for (y = 0; y < inlink->h; y++) {
             for (x = 0; x < inlink->w; x++)
-- 
1.7.9.5



More information about the ffmpeg-devel mailing list