Browse code

avfilter/vf_vignette: force per frame evaluation if per frame variables are used

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2015/03/31 04:50:15
Showing 1 changed files
... ...
@@ -169,15 +169,20 @@ static void update_context(VignetteContext *s, AVFilterLink *inlink, AVFrame *fr
169 169
         s->var_values[VAR_T]   = TS2T(frame->pts, inlink->time_base);
170 170
         s->var_values[VAR_PTS] = TS2D(frame->pts);
171 171
     } else {
172
-        s->var_values[VAR_N]   = 0;
172
+        s->var_values[VAR_N]   = NAN;
173 173
         s->var_values[VAR_T]   = NAN;
174 174
         s->var_values[VAR_PTS] = NAN;
175 175
     }
176 176
 
177
-    s->angle = av_clipf(av_expr_eval(s->angle_pexpr, s->var_values, NULL), 0, M_PI_2);
177
+    s->angle = av_expr_eval(s->angle_pexpr, s->var_values, NULL);
178 178
     s->x0 = av_expr_eval(s->x0_pexpr, s->var_values, NULL);
179 179
     s->y0 = av_expr_eval(s->y0_pexpr, s->var_values, NULL);
180 180
 
181
+    if (isnan(s->x0) || isnan(s->y0) || isnan(s->angle))
182
+        s->eval_mode = EVAL_MODE_FRAME;
183
+
184
+    s->angle = av_clipf(s->angle, 0, M_PI_2);
185
+
181 186
     if (s->backward) {
182 187
         for (y = 0; y < inlink->h; y++) {
183 188
             for (x = 0; x < inlink->w; x++)