From: Anton Khirnov Date: Tue, 23 Aug 2011 13:02:25 +0000 (+0200) Subject: AVOptions: add functions for evaluating option strings. X-Git-Tag: android-x86-4.4-r1~8529^2~5155 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=dca055be3ae1a79209051a3f581802e3d21b7ad5;p=android-x86%2Fexternal-ffmpeg.git AVOptions: add functions for evaluating option strings. --- diff --git a/libavutil/opt.c b/libavutil/opt.c index 08fba8bc0f..8af2ac223b 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 e40db11567..7649447e79 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. */ /**