Commit 1ba95a9c authored by Anton Khirnov's avatar Anton Khirnov

lavfi: add avfilter_init_dict() for initializing a filter with a dict.

parent 48a5adab
...@@ -21,6 +21,7 @@ API changes, most recent first: ...@@ -21,6 +21,7 @@ API changes, most recent first:
Add AVFilterContext.graph pointing to the AVFilterGraph that contains the Add AVFilterContext.graph pointing to the AVFilterGraph that contains the
filter. filter.
Add avfilter_init_str(), deprecate avfilter_init_filter(). Add avfilter_init_str(), deprecate avfilter_init_filter().
Add avfilter_init_dict().
2013-xx-xx - lavfi 3.7.0 - avfilter.h 2013-xx-xx - lavfi 3.7.0 - avfilter.h
Add AVFilter.priv_class for exporting filter options through the AVOptions API Add AVFilter.priv_class for exporting filter options through the AVOptions API
......
...@@ -515,6 +515,26 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque ...@@ -515,6 +515,26 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
} }
#endif #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) int avfilter_init_str(AVFilterContext *filter, const char *args)
{ {
AVDictionary *options = NULL; AVDictionary *options = NULL;
...@@ -616,18 +636,7 @@ int avfilter_init_str(AVFilterContext *filter, const char *args) ...@@ -616,18 +636,7 @@ int avfilter_init_str(AVFilterContext *filter, const char *args)
} }
} }
if (filter->filter->priv_class) { ret = avfilter_init_dict(filter, &options);
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);
if (ret < 0) if (ret < 0)
goto fail; goto fail;
......
...@@ -673,6 +673,28 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque ...@@ -673,6 +673,28 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
*/ */
int avfilter_init_str(AVFilterContext *ctx, const char *args); 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 * Free a filter context. This will also remove the filter from its
* filtergraph's list of filters. * filtergraph's list of filters.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment