summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-04-26 16:52:54 +0200
committerwm4 <wm4@nowhere>2013-04-26 20:44:18 +0200
commit28a971e26f7318d2081dff8c95a3844823ed7c9d (patch)
tree24828ac3c63097671da34dec8ec5118dc9c3939a
parentca08ce77a95c91868a872671c4eca1438f905bb1 (diff)
downloadmpv-28a971e26f7318d2081dff8c95a3844823ed7c9d.tar.bz2
mpv-28a971e26f7318d2081dff8c95a3844823ed7c9d.tar.xz
options: allow using [ ] for quoting in sub-options
This is an attempt to make quoting of sub-option values less awkward, even if it works only with some shells. This is needed mainly for vf_lavfi. Also update the vf_lavfi manpage section.
-rw-r--r--DOCS/man/en/vf.rst19
-rw-r--r--core/m_option.c9
2 files changed, 21 insertions, 7 deletions
diff --git a/DOCS/man/en/vf.rst b/DOCS/man/en/vf.rst
index e534c73ec3..846d3ffac6 100644
--- a/DOCS/man/en/vf.rst
+++ b/DOCS/man/en/vf.rst
@@ -383,14 +383,21 @@ lavfi=graph[:sws_flags]
*EXAMPLE*:
- ``'--vf=lavfi="gradfun=20:30"'``
- gradfun filter with non-sensical parameters. The ``'`` quotes are
- for the shell. Otherwise, the shell would remove the ``"`` quotes.
+ ``-vf lavfi=[gradfun=20:30,vflip]``
+ gradfun filter with nonsense parameters, followed by a vflip
+ filter. (This demonstrates how libavfilter takes a graph and not
+ just a single filter.) The filter graph string is quoted with
+ ``[`` and ``]``. This requires no additional quoting or escaping
+ with some shells (like bash), while others (like zsh) require
+ additional ``"`` quotes around the option string.
+
+ ``'--vf=lavfi="gradfun=20:30,vflip"'``
+ same as before, but uses quoting that should be safe with all
+ shells. The outer ``'`` quotes make sure that the shell doesn't
+ remove the ``"`` quotes needed by mpv.
``'--vf=lavfi=graph="gradfun=radius=30:strength=20,vflip"'``
- same as before, but uses named parameters. Also a vflip filter is
- appended, demonstrating how libavfilter actually takes a graph
- description and not a single filter.
+ same as before, but uses named parameters for everything.
<sws_flags>
If libavfilter inserts filters for pixel format conversion, this
diff --git a/core/m_option.c b/core/m_option.c
index a0b4808e2e..a667471407 100644
--- a/core/m_option.c
+++ b/core/m_option.c
@@ -1167,6 +1167,13 @@ static int read_subparam(bstr optname, bstr *str, bstr *out_subparam)
return M_OPT_INVALID;
}
p = bstr_cut(p, 1);
+ } else if (bstr_eatstart0(&p, "[")) {
+ if (!bstr_split_tok(p, "]", &subparam, &p)) {
+ mp_msg(MSGT_CFGPARSER, MSGL_ERR,
+ "Terminating ']' missing for '%.*s'\n",
+ BSTR_P(optname));
+ return M_OPT_INVALID;
+ }
} else if (bstr_eatstart0(&p, "%")) {
int optlen = bstrtoll(p, &p, 0);
if (!bstr_startswith0(p, "%") || (optlen > p.len - 1)) {
@@ -1180,7 +1187,7 @@ static int read_subparam(bstr optname, bstr *str, bstr *out_subparam)
} else {
// Skip until the next character that could possibly be a meta
// character in option parsing.
- int optlen = bstrcspn(p, ":=,\\%\"'");
+ int optlen = bstrcspn(p, ":=,\\%\"'[]");
subparam = bstr_splice(p, 0, optlen);
p = bstr_cut(p, optlen);
}