diff options
author | Stefano Sabatini <stefasab@gmail.com> | 2012-08-09 22:55:49 +0200 |
---|---|---|
committer | Stefano Sabatini <stefasab@gmail.com> | 2012-09-05 16:08:06 +0200 |
commit | 5666a1b270ffffb2f7d5485b9176758cab399df5 (patch) | |
tree | c60e4ea27c1b0ea8e3aa5475b81c9ac46835d8b9 /libavutil | |
parent | b21b5b04cca0633bd88db972ff1187ab7825b667 (diff) | |
download | ffmpeg-5666a1b270ffffb2f7d5485b9176758cab399df5.tar.gz |
lavu/opt: support NULL and special "none" values for size and pixel format options
Allow to specify NULL values explicitly, thus overriding the default
values set in the context.
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/opt.c | 12 | ||||
-rw-r--r-- | libavutil/version.h | 2 |
2 files changed, 11 insertions, 3 deletions
diff --git a/libavutil/opt.c b/libavutil/opt.c index 960170b86f..5f8aaad6a1 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -241,7 +241,7 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); if (!o || !target_obj) return AVERROR_OPTION_NOT_FOUND; - if (!val && o->type != AV_OPT_TYPE_STRING) + if (!val && (o->type != AV_OPT_TYPE_STRING && o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_IMAGE_SIZE)) return AVERROR(EINVAL); dst = ((uint8_t*)target_obj) + o->offset; @@ -255,11 +255,18 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) case AV_OPT_TYPE_DOUBLE: case AV_OPT_TYPE_RATIONAL: return set_string_number(obj, o, val, dst); case AV_OPT_TYPE_IMAGE_SIZE: + if (!val || !strcmp(val, "none")) { + *(int *)dst = *((int *)dst + 1) = 0; + return 0; + } ret = av_parse_video_size(dst, ((int *)dst) + 1, val); if (ret < 0) av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as image size\n", val); return ret; case AV_OPT_TYPE_PIXEL_FMT: + if (!val || !strcmp(val, "none")) + ret = PIX_FMT_NONE; + else { ret = av_get_pix_fmt(val); if (ret == PIX_FMT_NONE) { char *tail; @@ -269,6 +276,7 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) return AVERROR(EINVAL); } } + } *(enum PixelFormat *)dst = ret; return 0; } @@ -457,7 +465,7 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) ret = snprintf(buf, sizeof(buf), "%dx%d", ((int *)dst)[0], ((int *)dst)[1]); break; case AV_OPT_TYPE_PIXEL_FMT: - ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_pix_fmt_name(*(enum PixelFormat *)dst), "?")); + ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_pix_fmt_name(*(enum PixelFormat *)dst), "none")); break; default: return AVERROR(EINVAL); diff --git a/libavutil/version.h b/libavutil/version.h index f8cc602e8d..535c1af7e3 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -40,7 +40,7 @@ #define LIBAVUTIL_VERSION_MAJOR 51 #define LIBAVUTIL_VERSION_MINOR 71 -#define LIBAVUTIL_VERSION_MICRO 100 +#define LIBAVUTIL_VERSION_MICRO 101 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ |