From 0aa01ca7434ba94bcc3d4093458701d596690d50 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 2 Mar 2017 11:32:07 +0100 Subject: m_option: optionally allow passing "no" to imgfmt option types Needed for the following commit. Also, fix that uint32_t type - we always assumed int. --- options/m_option.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/options/m_option.c b/options/m_option.c index 11bb677b97..7f30b73a9a 100644 --- a/options/m_option.c +++ b/options/m_option.c @@ -2047,6 +2047,8 @@ const m_option_type_t m_option_type_size_box = { static int parse_imgfmt(struct mp_log *log, const m_option_t *opt, struct bstr name, struct bstr param, void *dst) { + bool accept_no = opt->min < 0; + if (param.len == 0) return M_OPT_MISSING_PARAM; @@ -2055,28 +2057,29 @@ static int parse_imgfmt(struct mp_log *log, const m_option_t *opt, char **list = mp_imgfmt_name_list(); for (int i = 0; list[i]; i++) mp_info(log, " %s", list[i]); + if (accept_no) + mp_info(log, " no"); mp_info(log, "\n"); talloc_free(list); return M_OPT_EXIT; } unsigned int fmt = mp_imgfmt_from_name(param, true); - if (!fmt) { + if (!fmt && !(accept_no && bstr_equals0(param, "no"))) { mp_err(log, "Option %.*s: unknown format name: '%.*s'\n", BSTR_P(name), BSTR_P(param)); return M_OPT_INVALID; } if (dst) - *((uint32_t *)dst) = fmt; + *((int *)dst) = fmt; return 1; } const m_option_type_t m_option_type_imgfmt = { - // Please report any missing colorspaces .name = "Image format", - .size = sizeof(uint32_t), + .size = sizeof(int), .parse = parse_imgfmt, .copy = copy_opt, }; -- cgit v1.2.3