---
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 2d13d96..2042c6a 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -275,6 +275,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 fdce0ba..0879a9b 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. */
/**
--
1.7.6.3
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel