|
|
|
@ -1742,14 +1742,14 @@ void av_opt_free(void *obj) |
|
|
|
|
|
|
|
|
|
int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags) |
|
|
|
|
{ |
|
|
|
|
AVDictionaryEntry *t = NULL; |
|
|
|
|
const AVDictionaryEntry *t = NULL; |
|
|
|
|
AVDictionary *tmp = NULL; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
if (!options) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) { |
|
|
|
|
while ((t = av_dict_iterate(*options, t))) { |
|
|
|
|
ret = av_opt_set(obj, t->key, t->value, search_flags); |
|
|
|
|
if (ret == AVERROR_OPTION_NOT_FOUND) |
|
|
|
|
ret = av_dict_set(&tmp, t->key, t->value, 0); |
|
|
|
@ -2137,16 +2137,16 @@ FF_ENABLE_DEPRECATION_WARNINGS |
|
|
|
|
case AV_OPT_TYPE_DICT: { |
|
|
|
|
AVDictionary *dict1 = NULL; |
|
|
|
|
AVDictionary *dict2 = *(AVDictionary **)dst; |
|
|
|
|
AVDictionaryEntry *en1 = NULL; |
|
|
|
|
AVDictionaryEntry *en2 = NULL; |
|
|
|
|
const AVDictionaryEntry *en1 = NULL; |
|
|
|
|
const AVDictionaryEntry *en2 = NULL; |
|
|
|
|
ret = av_dict_parse_string(&dict1, o->default_val.str, "=", ":", 0); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
av_dict_free(&dict1); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
do { |
|
|
|
|
en1 = av_dict_get(dict1, "", en1, AV_DICT_IGNORE_SUFFIX); |
|
|
|
|
en2 = av_dict_get(dict2, "", en2, AV_DICT_IGNORE_SUFFIX); |
|
|
|
|
en1 = av_dict_iterate(dict1, en1); |
|
|
|
|
en2 = av_dict_iterate(dict2, en2); |
|
|
|
|
} while (en1 && en2 && !strcmp(en1->key, en2->key) && !strcmp(en1->value, en2->value)); |
|
|
|
|
av_dict_free(&dict1); |
|
|
|
|
return (!en1 && !en2); |
|
|
|
|