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 "avstring.h"
|
||||||
#include "opt.h"
|
#include "opt.h"
|
||||||
#include "eval.h"
|
#include "eval.h"
|
||||||
|
#include "dict.h"
|
||||||
|
|
||||||
//FIXME order them and do a bin search
|
//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)
|
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);
|
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
|
#ifdef TEST
|
||||||
|
|
||||||
#undef printf
|
#undef printf
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
#include "rational.h"
|
#include "rational.h"
|
||||||
#include "avutil.h"
|
#include "avutil.h"
|
||||||
|
#include "dict.h"
|
||||||
|
|
||||||
enum AVOptionType{
|
enum AVOptionType{
|
||||||
FF_OPT_TYPE_FLAGS,
|
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);
|
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 */
|
#endif /* AVUTIL_OPT_H */
|
||||||
|
|
Loading…
Reference in New Issue