mirror of https://git.ffmpeg.org/ffmpeg.git
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.
This commit is contained in:
parent
0b7ccad6bf
commit
7e83e1c511
|
@ -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
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include "rational.h"
|
||||
#include "avutil.h"
|
||||
#include "dict.h"
|
||||
|
||||
enum AVOptionType{
|
||||
FF_OPT_TYPE_FLAGS,
|
||||
|
@ -191,4 +192,20 @@ 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 from a given 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.
|
||||
* Of course this new dictionary needs to be freed by caller
|
||||
* with av_dict_free().
|
||||
*
|
||||
* @return 0 on success, a negative AVERROR if some option was found in obj,
|
||||
* but could not be set.
|
||||
*
|
||||
* @see av_dict_copy()
|
||||
*/
|
||||
int av_opt_set_dict(void *obj, struct AVDictionary **options);
|
||||
|
||||
#endif /* AVUTIL_OPT_H */
|
||||
|
|
Loading…
Reference in New Issue