diff options
author | wm4 <wm4@nowhere> | 2016-04-15 11:31:24 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-04-15 11:32:40 +0200 |
commit | a9bd4535d2eac283824d8598aa17f1f44f83a74a (patch) | |
tree | 808f3b0b6034f5fe74fbcaa103164520cbe4a6a6 /options/m_option.c | |
parent | 8c02c92ab962107ee43c71854bd9712cc492046e (diff) | |
download | mpv-a9bd4535d2eac283824d8598aa17f1f44f83a74a.tar.bz2 mpv-a9bd4535d2eac283824d8598aa17f1f44f83a74a.tar.xz |
client API: improve mpv_set_property() handling of MPV_FORMAT_NODE
If a mpv_node wrapped a string, the behavior was different from calling
mpv_set_property() with MPV_FORMAT_STRING directly. Change this.
The original intention was to be strict about types if MPV_FORMAT_NODE
is used. But I think the result was less than ideal, and the same change
towards less strict behavior was made to mpv_set_option() ages ago.
Diffstat (limited to 'options/m_option.c')
-rw-r--r-- | options/m_option.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/options/m_option.c b/options/m_option.c index 1d929269b0..1d8b1d0bf6 100644 --- a/options/m_option.c +++ b/options/m_option.c @@ -106,6 +106,21 @@ const m_option_t *m_option_list_find(const m_option_t *list, const char *name) return m_option_list_findb(list, bstr0(name)); } +int m_option_set_node_or_string(struct mp_log *log, const m_option_t *opt, + const char *name, void *dst, struct mpv_node *src) +{ + if (src->format == MPV_FORMAT_STRING) { + // The af and vf option unfortunately require this, because the + // option name includes the "action". + bstr optname = bstr0(name), a, b; + if (bstr_split_tok(optname, "/", &a, &b)) + optname = b; + return m_option_parse(log, opt, optname, bstr0(src->u.string), dst); + } else { + return m_option_set_node(opt, dst, src); + } +} + // Default function that just does a memcpy static void copy_opt(const m_option_t *opt, void *dst, const void *src) |