[FFmpeg-cvslog] avfilter/vf_qp: split expression parsing out of loop

Michael Niedermayer git at videolan.org
Sat Mar 28 15:45:50 CET 2015


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sat Mar 28 15:17:36 2015 +0100| [a8fb8f6112296c5a46f03002c977b59a8d9ef476] | committer: Michael Niedermayer

avfilter/vf_qp: split expression parsing out of loop

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

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a8fb8f6112296c5a46f03002c977b59a8d9ef476
---

 libavfilter/vf_qp.c |   23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/libavfilter/vf_qp.c b/libavfilter/vf_qp.c
index d976634..8aa670b 100644
--- a/libavfilter/vf_qp.c
+++ b/libavfilter/vf_qp.c
@@ -50,26 +50,31 @@ static int config_input(AVFilterLink *inlink)
     AVFilterContext *ctx = inlink->dst;
     QPContext *s = ctx->priv;
     int i;
+    int ret;
+    AVExpr *e = NULL;
+    static const char *var_names[] = { "known", "qp", NULL };
 
     if (!s->qp_expr_str)
         return 0;
 
+    ret = av_expr_parse(&e, s->qp_expr_str, var_names, NULL, NULL, NULL, NULL, 0, ctx);
+    if (ret < 0)
+        return ret;
+
     s->h       = (inlink->h + 15) >> 4;
     s->qstride = (inlink->w + 15) >> 4;
     for (i = -129; i < 128; i++) {
-        double var_values[] = { i != -129, i, 0 };
-        static const char *var_names[] = { "known", "qp", NULL };
-        double temp_val;
-        int ret;
+        double var_values[] = { i != -129, i, 0};
+        double temp_val = av_expr_eval(e, var_values, NULL);
 
-        ret = av_expr_parse_and_eval(&temp_val, s->qp_expr_str,
-                                     var_names, var_values,
-                                     NULL, NULL, NULL, NULL, 0, 0, ctx);
-        if (ret < 0)
-            return ret;
+        if (isnan(temp_val)) {
+                av_expr_free(e);
+                return AVERROR(EINVAL);
+        }
 
         s->lut[i + 129] = lrintf(temp_val);
     }
+    av_expr_free(e);
 
     return 0;
 }



More information about the ffmpeg-cvslog mailing list