summaryrefslogtreecommitdiff
path: root/libavutil/opt.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2011-05-22 12:52:50 +0200
committerAnton Khirnov <anton@khirnov.net>2011-06-16 20:24:56 +0200
commit7e83e1c511baf0d02f3af75b6180d6af4d50aa99 (patch)
treec56415cc57d731c090bac30707276a2b51521df6 /libavutil/opt.c
parent0b7ccad6bf79cebe5cd8392105276a4ba19d19f9 (diff)
AVOptions: add av_opt_set_dict() mapping a dictionary struct to a context.
This way the caller can pass all the options in one nice package.
Diffstat (limited to 'libavutil/opt.c')
-rw-r--r--libavutil/opt.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/libavutil/opt.c b/libavutil/opt.c
index 7775bb2af3..55bb6d24f0 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