On 24-12-2019 04:50 am, Michael Niedermayer wrote:
On Tue, Dec 17, 2019 at 02:55:06PM +0530, Gyan wrote:
[...]
@@ -127,6 +204,22 @@ static av_cold int init_dict(AVFilterContext *ctx, 
AVDictionary **opts)
      if (!scale->h_expr)
          av_opt_set(scale, "h", "ih", 0);
+ ret = av_expr_parse(&scale->w_pexpr, scale->w_expr,
+                            names,
+                            NULL, NULL, NULL, NULL, 0, ctx);
+    if (ret < 0) {
+        av_log(ctx, AV_LOG_ERROR, "Cannot parse width expression: '%s'\n", 
scale->w_expr);
+        return ret;
+    }
+
+    ret = av_expr_parse(&scale->h_pexpr, scale->h_expr,
+                            names,
+                            NULL, NULL, NULL, NULL, 0, ctx);
+    if (ret < 0) {
+        av_log(ctx, AV_LOG_ERROR, "Cannot parse height expression: '%s'\n", 
scale->h_expr);
+        return ret;
+    }
+
+        if (w) {
+            ret = av_expr_parse(&scale->w_pexpr, scale->w_expr,
+                            names,
+                            NULL, NULL, NULL, NULL, 0, ctx);
+            if (ret < 0) {
+                av_log(ctx, AV_LOG_ERROR, "Cannot parse width expression: 
'%s'\n", scale->w_expr);
+                goto revert;
+            }
+        }
+
+        if (h) {
+            ret = av_expr_parse(&scale->h_pexpr, scale->h_expr,
+                            names,
+                            NULL, NULL, NULL, NULL, 0, ctx);
+            if (ret < 0) {
+                av_log(ctx, AV_LOG_ERROR, "Cannot parse height expression: 
'%s'\n", scale->h_expr);
+                goto revert;
+            }
+        }
Duplicate code

init_dict() is not called during command processing since we don't reset any other parameter except for one of width or height. Do you want me to reinit all parameters after a command?

@@ -421,6 +589,18 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, 
AVFrame **frame_out)
              av_opt_set(scale, "w", buf, 0);
              snprintf(buf, sizeof(buf)-1, "%d", outlink->h);
              av_opt_set(scale, "h", buf, 0);
+
+            av_expr_free(scale->w_pexpr);
+            av_expr_free(scale->h_pexpr);
+            scale->w_pexpr = scale->h_pexpr = NULL;
+
+            av_expr_parse(&scale->w_pexpr, scale->w_expr,
+                          var_names,
+                          NULL, NULL, NULL, NULL, 0, ctx);
+
+            av_expr_parse(&scale->h_pexpr, scale->h_expr,
+                          var_names,
+                          NULL, NULL, NULL, NULL, 0, ctx);
Missing error handling

Will do.

Gyan
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to