[FFmpeg-cvslog] lavfi: add common code to handle options parsing.

Nicolas George git at videolan.org
Wed Mar 20 21:55:40 CET 2013


ffmpeg | branch: master | Nicolas George <nicolas.george at normalesup.org> | Sat Mar 16 20:40:30 2013 +0100| [befbcc374d8b8b00d6c70b64bfdc51dd25ba906d] | committer: Nicolas George

lavfi: add common code to handle options parsing.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=befbcc374d8b8b00d6c70b64bfdc51dd25ba906d
---

 libavfilter/avfilter.c |   14 ++++++++++++++
 libavfilter/avfilter.h |    9 +++++++++
 2 files changed, 23 insertions(+)

diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 1d27817..8a907dc 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 45ad6f9..455161f 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 */



More information about the ffmpeg-cvslog mailing list