diff options
author | Nicolas George <nicolas.george@normalesup.org> | 2012-06-05 12:32:19 +0200 |
---|---|---|
committer | Nicolas George <nicolas.george@normalesup.org> | 2012-06-07 22:13:59 +0200 |
commit | d9b0d75c56b07839976734e67507255a39e31e1c (patch) | |
tree | 237b1b8307c659b515b2a8120cf1448eeedb2c7e /libavutil/opt.c | |
parent | 9f7b014ad32fd87efcada0297d83546decb48fe7 (diff) | |
download | ffmpeg-d9b0d75c56b07839976734e67507255a39e31e1c.tar.gz |
opt: add AV_OPT_TYPE_PIXEL_FMT.
Diffstat (limited to 'libavutil/opt.c')
-rw-r--r-- | libavutil/opt.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libavutil/opt.c b/libavutil/opt.c index 9d9cd1f485..f59bad352f 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -32,6 +32,7 @@ #include "dict.h" #include "log.h" #include "parseutils.h" +#include "pixdesc.h" #if FF_API_FIND_OPT //FIXME order them and do a bin search @@ -249,6 +250,18 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) 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: + ret = av_get_pix_fmt(val); + if (ret == PIX_FMT_NONE) { + char *tail; + ret = strtol(val, &tail, 0); + if (*tail || (unsigned)ret >= PIX_FMT_NB) { + av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as pixel format\n", val); + return AVERROR(EINVAL); + } + } + *(enum PixelFormat *)dst = ret; + return 0; } av_log(obj, AV_LOG_ERROR, "Invalid option type.\n"); @@ -434,6 +447,9 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) case AV_OPT_TYPE_IMAGE_SIZE: 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), "?")); + break; default: return AVERROR(EINVAL); } @@ -606,6 +622,9 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, case AV_OPT_TYPE_IMAGE_SIZE: av_log(av_log_obj, AV_LOG_INFO, "%-7s ", "<image_size>"); break; + case AV_OPT_TYPE_PIXEL_FMT: + av_log(av_log_obj, AV_LOG_INFO, "%-7s ", "<pix_fmt>"); + break; case AV_OPT_TYPE_CONST: default: av_log(av_log_obj, AV_LOG_INFO, "%-7s ", ""); @@ -684,6 +703,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags) break; case AV_OPT_TYPE_STRING: case AV_OPT_TYPE_IMAGE_SIZE: + case AV_OPT_TYPE_PIXEL_FMT: av_opt_set(s, opt->name, opt->default_val.str, 0); break; case AV_OPT_TYPE_BINARY: |