]> git.sesse.net Git - ffmpeg/commitdiff
lavfi: add avfilter_init_dict() for initializing a filter with a dict.
authorAnton Khirnov <anton@khirnov.net>
Sun, 17 Mar 2013 19:16:12 +0000 (20:16 +0100)
committerAnton Khirnov <anton@khirnov.net>
Thu, 11 Apr 2013 18:40:20 +0000 (20:40 +0200)
doc/APIchanges
libavfilter/avfilter.c
libavfilter/avfilter.h

index 0def56eb958cd5d537660a295d45021eb0dc325f..35c49f6ddd07a9247cd8d0741096437e93d44b6e 100644 (file)
@@ -21,6 +21,7 @@ API changes, most recent first:
   Add AVFilterContext.graph pointing to the AVFilterGraph that contains the
   filter.
   Add avfilter_init_str(), deprecate avfilter_init_filter().
+  Add avfilter_init_dict().
 
 2013-xx-xx - lavfi 3.7.0 - avfilter.h
   Add AVFilter.priv_class for exporting filter options through the AVOptions API
index cbe3fdbd71bdd66273442f420a316919de31a5e4..e127bd35d0c69fb3db9dc09fdfd22395b7f6ad1b 100644 (file)
@@ -515,6 +515,26 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
 }
 #endif
 
+int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options)
+{
+    int ret = 0;
+
+    if (ctx->filter->priv_class) {
+        ret = av_opt_set_dict(ctx->priv, options);
+        if (ret < 0) {
+            av_log(ctx, AV_LOG_ERROR, "Error applying options to the filter.\n");
+            return ret;
+        }
+    }
+
+    if (ctx->filter->init)
+        ret = ctx->filter->init(ctx);
+    else if (ctx->filter->init_dict)
+        ret = ctx->filter->init_dict(ctx, options);
+
+    return ret;
+}
+
 int avfilter_init_str(AVFilterContext *filter, const char *args)
 {
     AVDictionary *options = NULL;
@@ -616,18 +636,7 @@ int avfilter_init_str(AVFilterContext *filter, const char *args)
         }
     }
 
-    if (filter->filter->priv_class) {
-        ret = av_opt_set_dict(filter->priv, &options);
-        if (ret < 0) {
-            av_log(filter, AV_LOG_ERROR, "Error applying options to the filter.\n");
-            goto fail;
-        }
-    }
-
-    if (filter->filter->init)
-        ret = filter->filter->init(filter);
-    else if (filter->filter->init_dict)
-        ret = filter->filter->init_dict(filter, &options);
+    ret = avfilter_init_dict(filter, &options);
     if (ret < 0)
         goto fail;
 
index a01d7e631f21674c70e691e68c0cd4dece07e0b9..dffb2e56d9192898d45511301d8a021f535f6126 100644 (file)
@@ -673,6 +673,28 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
  */
 int avfilter_init_str(AVFilterContext *ctx, const char *args);
 
+/**
+ * Initialize a filter with the supplied dictionary of options.
+ *
+ * @param ctx     uninitialized filter context to initialize
+ * @param options An AVDictionary filled with options for this filter. On
+ *                return this parameter will be destroyed and replaced with
+ *                a dict containing options that were not found. This dictionary
+ *                must be freed by the caller.
+ *                May be NULL, then this function is equivalent to
+ *                avfilter_init_str() with the second parameter set to NULL.
+ * @return 0 on success, a negative AVERROR on failure
+ *
+ * @note This function and avfilter_init_str() do essentially the same thing,
+ * the difference is in manner in which the options are passed. It is up to the
+ * calling code to choose whichever is more preferable. The two functions also
+ * behave differently when some of the provided options are not declared as
+ * supported by the filter. In such a case, avfilter_init_str() will fail, but
+ * this function will leave those extra options in the options AVDictionary and
+ * continue as usual.
+ */
+int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options);
+
 /**
  * Free a filter context. This will also remove the filter from its
  * filtergraph's list of filters.