Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>tags/n3.0
| @@ -666,12 +666,20 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) | |||||
| case AV_OPT_TYPE_RATIONAL: ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break; | case AV_OPT_TYPE_RATIONAL: ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational*)dst)->num, ((AVRational*)dst)->den);break; | ||||
| case AV_OPT_TYPE_CONST: ret = snprintf(buf, sizeof(buf), "%f" , o->default_val.dbl);break; | case AV_OPT_TYPE_CONST: ret = snprintf(buf, sizeof(buf), "%f" , o->default_val.dbl);break; | ||||
| case AV_OPT_TYPE_STRING: | case AV_OPT_TYPE_STRING: | ||||
| if (*(uint8_t**)dst) | |||||
| if (*(uint8_t**)dst) { | |||||
| *out_val = av_strdup(*(uint8_t**)dst); | *out_val = av_strdup(*(uint8_t**)dst); | ||||
| else | |||||
| } else if (search_flags & AV_OPT_ALLOW_NULL) { | |||||
| *out_val = NULL; | |||||
| return 0; | |||||
| } else { | |||||
| *out_val = av_strdup(""); | *out_val = av_strdup(""); | ||||
| } | |||||
| return *out_val ? 0 : AVERROR(ENOMEM); | return *out_val ? 0 : AVERROR(ENOMEM); | ||||
| case AV_OPT_TYPE_BINARY: | case AV_OPT_TYPE_BINARY: | ||||
| if (!*(uint8_t**)dst && (search_flags & AV_OPT_ALLOW_NULL)) { | |||||
| *out_val = NULL; | |||||
| return 0; | |||||
| } | |||||
| len = *(int*)(((uint8_t *)dst) + sizeof(uint8_t *)); | len = *(int*)(((uint8_t *)dst) + sizeof(uint8_t *)); | ||||
| if ((uint64_t)len*2 + 1 > INT_MAX) | if ((uint64_t)len*2 + 1 > INT_MAX) | ||||
| return AVERROR(EINVAL); | return AVERROR(EINVAL); | ||||
| @@ -563,6 +563,12 @@ int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational | |||||
| */ | */ | ||||
| #define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) | #define AV_OPT_SEARCH_FAKE_OBJ (1 << 1) | ||||
| /** | |||||
| * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, | |||||
| * rather than returning an empty string. | |||||
| */ | |||||
| #define AV_OPT_ALLOW_NULL (1 << 2) | |||||
| /** | /** | ||||
| * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than | * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than | ||||
| * one component for certain option types. | * one component for certain option types. | ||||
| @@ -722,6 +728,10 @@ int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, in | |||||
| */ | */ | ||||
| /** | /** | ||||
| * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller | * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller | ||||
| * | |||||
| * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the option has | |||||
| * AV_OPT_TYPE_STRING or AV_OPT_TYPE_BINARY and is set to NULL, *out_val will be set | |||||
| * to NULL instead of an allocated empty string. | |||||
| */ | */ | ||||
| int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); | int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val); | ||||
| int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); | int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val); | ||||
| @@ -56,7 +56,7 @@ | |||||
| */ | */ | ||||
| #define LIBAVUTIL_VERSION_MAJOR 55 | #define LIBAVUTIL_VERSION_MAJOR 55 | ||||
| #define LIBAVUTIL_VERSION_MINOR 2 | |||||
| #define LIBAVUTIL_VERSION_MINOR 3 | |||||
| #define LIBAVUTIL_VERSION_MICRO 100 | #define LIBAVUTIL_VERSION_MICRO 100 | ||||
| #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ | ||||