Hi, On Tue, Jun 14, 2011 at 2:31 PM, Anton Khirnov <[email protected]> wrote: > This way the caller can pass all the options in one nice package. > --- > libavutil/opt.c | 22 ++++++++++++++++++++++ > libavutil/opt.h | 15 +++++++++++++++ > 2 files changed, 37 insertions(+), 0 deletions(-) > > diff --git a/libavutil/opt.c b/libavutil/opt.c > index 7775bb2..55bb6d2 100644 > --- a/libavutil/opt.c > +++ b/libavutil/opt.c > @@ -29,6 +29,7 @@ > #include "avstring.h" > #include "opt.h" > #include "eval.h" > +#include "dict.h" > > //FIXME order them and do a bin search > const AVOption *av_find_opt(void *v, const char *name, const char *unit, int > mask, int flags) > @@ -538,6 +539,27 @@ void av_opt_free(void *obj) > av_freep((uint8_t *)obj + o->offset); > } > > +int av_opt_set_dict(void *obj, AVDictionary **options) > +{ > + AVDictionaryEntry *t = NULL; > + AVDictionary *tmp = NULL; > + int ret = 0; > + > + while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) { > + ret = av_set_string3(obj, t->key, t->value, 1, NULL); > + if (ret == AVERROR_OPTION_NOT_FOUND) > + av_dict_set(&tmp, t->key, t->value, 0); > + else if (ret < 0) { > + av_log(obj, AV_LOG_ERROR, "Error setting option %s to value > %s.\n", t->key, t->value); > + break; > + } > + ret = 0; > + } > + av_dict_free(options); > + *options = tmp; > + return ret; > +} > + > #ifdef TEST > > #undef printf > diff --git a/libavutil/opt.h b/libavutil/opt.h > index 46ad8ac..5c4153d 100644 > --- a/libavutil/opt.h > +++ b/libavutil/opt.h > @@ -29,6 +29,7 @@ > > #include "rational.h" > #include "avutil.h" > +#include "dict.h" > > enum AVOptionType{ > FF_OPT_TYPE_FLAGS, > @@ -191,4 +192,18 @@ void av_opt_free(void *obj); > */ > int av_opt_flag_is_set(void *obj, const char *field_name, const char > *flag_name); > > +/* > + * Set all the options contained in the dictionary on an object. > + * > + * @param obj a struct whose first element is a pointer to AVClass > + * @param options options to process. This dictionary will be freed and > replaced > + * by a new one containing all options not found in obj.
The caller should free this. Ronald _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
