[FFmpeg-cvslog] AVOptions: add functions for evaluating option strings.

Anton Khirnov git at videolan.org
Thu Oct 13 06:01:47 CEST 2011


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Tue Aug 23 15:02:25 2011 +0200| [dca055be3ae1a79209051a3f581802e3d21b7ad5] | committer: Anton Khirnov

AVOptions: add functions for evaluating option strings.

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

 libavutil/opt.c |   15 +++++++++++++++
 libavutil/opt.h |   24 ++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/libavutil/opt.c b/libavutil/opt.c
index 08fba8b..8af2ac2 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -239,6 +239,21 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags)
     return AVERROR(EINVAL);
 }
 
+#define OPT_EVAL_NUMBER(name, opttype, vartype)\
+    int av_opt_eval_ ## name(void *obj, const AVOption *o, const char *val, vartype *name ## _out)\
+    {\
+        if (!o || o->type != opttype)\
+            return AVERROR(EINVAL);\
+        return set_string_number(obj, o, val, name ## _out);\
+    }
+
+OPT_EVAL_NUMBER(flags,  FF_OPT_TYPE_FLAGS,    int)
+OPT_EVAL_NUMBER(int,    FF_OPT_TYPE_INT,      int)
+OPT_EVAL_NUMBER(int64,  FF_OPT_TYPE_INT64,    int64_t)
+OPT_EVAL_NUMBER(float,  FF_OPT_TYPE_FLOAT,    float)
+OPT_EVAL_NUMBER(double, FF_OPT_TYPE_DOUBLE,   double)
+OPT_EVAL_NUMBER(q,      FF_OPT_TYPE_RATIONAL, AVRational)
+
 static int set_number(void *obj, const char *name, double num, int den, int64_t intnum,
                                   int search_flags)
 {
diff --git a/libavutil/opt.h b/libavutil/opt.h
index e40db11..7649447 100644
--- a/libavutil/opt.h
+++ b/libavutil/opt.h
@@ -226,6 +226,30 @@ int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name)
  */
 int av_opt_set_dict(void *obj, struct AVDictionary **options);
 
+/**
+ * @defgroup opt_eval_funcs Evaluating option strings
+ * @{
+ * This group of functions can be used to evaluate option strings
+ * and get numbers out of them. They do the same thing as av_opt_set(),
+ * except the result is written into the caller-supplied pointer.
+ *
+ * @param obj a struct whose first element is a pointer to AVClass.
+ * @param o an option for which the string is to be evaluated.
+ * @param val string to be evaluated.
+ * @param *_out value of the string will be written here.
+ *
+ * @return 0 on success, a negative number on failure.
+ */
+int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int        *flags_out);
+int av_opt_eval_int   (void *obj, const AVOption *o, const char *val, int        *int_out);
+int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t    *int64_out);
+int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float      *float_out);
+int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double     *double_out);
+int av_opt_eval_q     (void *obj, const AVOption *o, const char *val, AVRational *q_out);
+/**
+ * @}
+ */
+
 #define AV_OPT_SEARCH_CHILDREN   0x0001 /**< Search in possible children of the
                                              given object first. */
 /**



More information about the ffmpeg-cvslog mailing list