summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/APIchanges1
-rw-r--r--libavfilter/avfilter.c37
-rw-r--r--libavfilter/avfilter.h22
3 files changed, 46 insertions, 14 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index 48d791951a..40af3655d7 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -168,6 +168,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
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 093bf56872..d912a42a55 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -688,6 +688,28 @@ 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_opaque)
+ ret = ctx->filter->init_opaque(ctx, NULL);
+ else 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;
@@ -794,20 +816,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_opaque)
- ret = filter->filter->init_opaque(filter, NULL);
- else 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;
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index c7968dfaea..05effe47de 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -889,6 +889,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.
*