mirror of https://github.com/mpv-player/mpv
m_option: fix skipping of missing -vo/-ao entries
The -vo/-ao options support skipping of unknown entries for the sake of allowing using the same config on possibly very different systems, which have different sets of VO/AOs available. Unfortunately skipping didn't quite work, possibly a rebase error when this was originally committed. Fix it.
This commit is contained in:
parent
a8a0c5023b
commit
d6592dd2e2
|
@ -2040,7 +2040,7 @@ static int get_obj_params(struct bstr opt_name, struct bstr name,
|
||||||
num_args++;
|
num_args++;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct m_config *config = m_config_from_obj_desc(NULL, desc);
|
struct m_config *config = desc ? m_config_from_obj_desc(NULL, desc) : NULL;
|
||||||
|
|
||||||
while (pstr->len > 0) {
|
while (pstr->len > 0) {
|
||||||
bstr fname, fval;
|
bstr fname, fval;
|
||||||
|
@ -2121,6 +2121,7 @@ static int parse_obj_settings(struct bstr opt, struct bstr *pstr,
|
||||||
if (bstr_eatstart0(pstr, "=") || bstr_eatstart0(pstr, ":"))
|
if (bstr_eatstart0(pstr, "=") || bstr_eatstart0(pstr, ":"))
|
||||||
has_param = true;
|
has_param = true;
|
||||||
|
|
||||||
|
bool skip = false;
|
||||||
if (!m_obj_list_find(&desc, list, str)) {
|
if (!m_obj_list_find(&desc, list, str)) {
|
||||||
if (!list->allow_unknown_entries) {
|
if (!list->allow_unknown_entries) {
|
||||||
mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %.*s: %.*s doesn't exist.\n",
|
mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Option %.*s: %.*s doesn't exist.\n",
|
||||||
|
@ -2128,9 +2129,10 @@ static int parse_obj_settings(struct bstr opt, struct bstr *pstr,
|
||||||
return M_OPT_INVALID;
|
return M_OPT_INVALID;
|
||||||
}
|
}
|
||||||
desc = (struct m_obj_desc){0};
|
desc = (struct m_obj_desc){0};
|
||||||
|
skip = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (desc.init_options && desc.options && _ret) {
|
if (desc.init_options && _ret) {
|
||||||
bstr s = bstr0(desc.init_options);
|
bstr s = bstr0(desc.init_options);
|
||||||
r = get_obj_params(opt, str, &s, &desc, &plist);
|
r = get_obj_params(opt, str, &s, &desc, &plist);
|
||||||
if (r < 0 || s.len > 0) {
|
if (r < 0 || s.len > 0) {
|
||||||
|
@ -2140,7 +2142,11 @@ static int parse_obj_settings(struct bstr opt, struct bstr *pstr,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (has_param) {
|
if (has_param) {
|
||||||
if (!desc.options && list->legacy_hacks) {
|
if (skip) {
|
||||||
|
r = get_obj_params(opt, str, pstr, NULL, _ret ? &plist : NULL);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
} else if (!desc.priv_size && list->legacy_hacks) {
|
||||||
// Should perhaps be parsed as escape-able string. But this is a
|
// Should perhaps be parsed as escape-able string. But this is a
|
||||||
// compatibility path, so it's not worth the trouble.
|
// compatibility path, so it's not worth the trouble.
|
||||||
int next = bstrcspn(*pstr, ",");
|
int next = bstrcspn(*pstr, ",");
|
||||||
|
|
Loading…
Reference in New Issue