Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavfilter/avfilter.c14
-rw-r--r--libavfilter/avfilter.h9
2 files changed, 23 insertions, 0 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 1d278178fe..8a907dc085 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -24,6 +24,7 @@
#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/imgutils.h"
+#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/rational.h"
#include "libavutil/samplefmt.h"
@@ -556,6 +557,8 @@ void avfilter_free(AVFilterContext *filter)
if (filter->filter->uninit)
filter->filter->uninit(filter);
+ if (filter->filter->shorthand)
+ av_opt_free(filter->priv);
for (i = 0; i < filter->nb_inputs; i++) {
if ((link = filter->inputs[i])) {
@@ -600,6 +603,17 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque
{
int ret=0;
+ if (filter->filter->shorthand) {
+ av_assert0(filter->priv);
+ av_assert0(filter->filter->priv_class);
+ *(const AVClass **)filter->priv = filter->filter->priv_class;
+ av_opt_set_defaults(filter->priv);
+ ret = av_opt_set_from_string(filter->priv, args,
+ filter->filter->shorthand, "=", ":");
+ if (ret < 0)
+ return ret;
+ args = NULL;
+ }
if (filter->filter->init_opaque)
ret = filter->filter->init_opaque(filter, args, opaque);
else if (filter->filter->init)
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index 45ad6f9f58..455161fa34 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -486,6 +486,15 @@ typedef struct AVFilter {
int (*init_opaque)(AVFilterContext *ctx, const char *args, void *opaque);
const AVClass *priv_class; ///< private class, containing filter specific options
+
+ /**
+ * Shorthand syntax for init arguments.
+ * If this field is set (even to an empty list), just before init the
+ * private class will be set and the arguments string will be parsed
+ * using av_opt_set_from_string() with "=" and ":" delimiters, and
+ * av_opt_free() will be called just after uninit.
+ */
+ const char *const *shorthand;
} AVFilter;
/** An instance of a filter */