avfilter: avoid testing float == 0
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 9 May 2013 14:41:56 +0000 (16:41 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 15 Sep 2013 13:33:39 +0000 (15:33 +0200)
This fixes the hypothetical case of rounding errors causing
incorrect values to be used.
We do not use *_EPSILON, because non trivial expressions can contain
errors larger than that making a zero equality test with *_EPSILON
unreliable.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavfilter/avfilter.c

index 83d942c..b577c9a 100644 (file)
@@ -1062,7 +1062,7 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
         dstctx->var_values[VAR_T] = pts == AV_NOPTS_VALUE ? NAN : pts * av_q2d(link->time_base);
         dstctx->var_values[VAR_POS] = pos == -1 ? NAN : pos;
 
-        dstctx->is_disabled = !av_expr_eval(dstctx->enable, dstctx->var_values, NULL);
+        dstctx->is_disabled = fabs(av_expr_eval(dstctx->enable, dstctx->var_values, NULL)) < 0.5;
         if (dstctx->is_disabled &&
             (dstctx->filter->flags & AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC))
             filter_frame = default_filter_frame;