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

Reply via email to