summaryrefslogtreecommitdiffstats
path: root/options
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2019-11-25 19:07:55 +0100
committerwm4 <wm4@nowhere>2019-11-25 20:29:42 +0100
commit37ac43847eddc42f51e348a81c73bb1b42481ad0 (patch)
tree292c59e0b816bf3a18e4ab0530a7c5b536b7fb25 /options
parent13afc2150beeb1117e9c1724b2910e41ee4cc28b (diff)
downloadmpv-37ac43847eddc42f51e348a81c73bb1b42481ad0.tar.bz2
mpv-37ac43847eddc42f51e348a81c73bb1b42481ad0.tar.xz
options: pre-check filter names when using vf/af libavfilter bridge
Until now, using a filter not in mpv's builtin filter list would assume it's a libavfilter filter. If it wasn't, the option value was still accepted, but creating the filter simply failed. But since this happens after option parsing, so the result is confusing. Improve this slightly by checking filter names. This will reject truly unknown filters at option parsing time. Unfortunately, this still does not check filter arguments. This would be much more complex, because you'd have to create a dummy filter graph and allocate the filter. Maybe another time.
Diffstat (limited to 'options')
-rw-r--r--options/m_option.c6
-rw-r--r--options/m_option.h3
2 files changed, 8 insertions, 1 deletions
diff --git a/options/m_option.c b/options/m_option.c
index 892016c935..d0f5e7a418 100644
--- a/options/m_option.c
+++ b/options/m_option.c
@@ -3021,7 +3021,11 @@ static int parse_obj_settings(struct mp_log *log, struct bstr opt, int op,
mp_warn(log, "Driver '%s' has been replaced with '%s'!\n",
desc.replaced_name, desc.name);
} else {
- if (!list->allow_unknown_entries) {
+ char name[80];
+ snprintf(name, sizeof(name), "%.*s", BSTR_P(str));
+ if (!list->allow_unknown_entries ||
+ (list->check_unknown_entry && !list->check_unknown_entry(name)))
+ {
mp_err(log, "Option %.*s: %.*s doesn't exist.\n",
BSTR_P(opt), BSTR_P(str));
return M_OPT_INVALID;
diff --git a/options/m_option.h b/options/m_option.h
index 4289fa5a2e..a5f9618462 100644
--- a/options/m_option.h
+++ b/options/m_option.h
@@ -149,6 +149,9 @@ struct m_obj_list {
// Allow unknown entries, for which a dummy entry is inserted, and whose
// options are skipped and ignored.
bool allow_unknown_entries;
+ // Callback to test whether an unknown entry should be allowed. (This can
+ // be useful if adding them as explicit entries is too much work.)
+ bool (*check_unknown_entry)(const char *name);
// Allow syntax for disabling entries.
bool allow_disable_entries;
// This helps with confusing error messages if unknown flag options are used.