diff options
Diffstat (limited to 'm_option.c')
-rw-r--r-- | m_option.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/m_option.c b/m_option.c index 55a58fc35c..0ca3ed9f29 100644 --- a/m_option.c +++ b/m_option.c @@ -266,13 +266,20 @@ const struct m_option_type m_option_type_intpair = { static int parse_choice(const struct m_option *opt, struct bstr name, struct bstr param, bool ambiguous_param, void *dst) { - if (param.len == 0) - return M_OPT_MISSING_PARAM; - - struct m_opt_choice_alternatives *alt; - for (alt = opt->priv; alt->name; alt++) - if (!bstrcasecmp0(param, alt->name)) - break; + bool allow_empty = opt->flags & M_OPT_IMPLICIT_DEFAULT; + int ret; + + struct m_opt_choice_alternatives *alt = opt->priv; + if (param.len == 0 || (ambiguous_param && allow_empty)) { + if (!allow_empty) + return M_OPT_MISSING_PARAM; + ret = 0; + } else { + for ( ; alt->name; alt++) + if (!bstrcasecmp0(param, alt->name)) + break; + ret = 1; + } if (!alt->name) { mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Invalid value for option %.*s: %.*s\n", @@ -286,7 +293,7 @@ static int parse_choice(const struct m_option *opt, struct bstr name, if (dst) *(int *)dst = alt->value; - return 1; + return ret; } static char *print_choice(const m_option_t *opt, const void *val) @@ -984,6 +991,7 @@ static struct { {"argb", IMGFMT_ARGB}, {"bgra", IMGFMT_BGRA}, {"abgr", IMGFMT_ABGR}, + {"gbrp", IMGFMT_GBRP}, {"mjpeg", IMGFMT_MJPEG}, {"mjpg", IMGFMT_MJPEG}, { NULL, 0 } |