From 91f752f43f1f38223902cd1dadd272da5aab1ce9 Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 24 Feb 2014 20:10:26 +0100 Subject: m_property: add mechanism to access properties as mpv_node Allows retrieving properties by their native values (or something close to it), rather than having to go through string conversion. The caller could actually just copy the value itself and then use the m_option functions to convert it to mpv_node, but maybe it's more flexible this way. --- options/m_property.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'options/m_property.c') diff --git a/options/m_property.c b/options/m_property.c index 9ac5ab43bd..d678601648 100644 --- a/options/m_property.c +++ b/options/m_property.c @@ -29,6 +29,8 @@ #include +#include "libmpv/client.h" + #include "talloc.h" #include "m_option.h" #include "m_property.h" @@ -192,6 +194,40 @@ int m_property_do(struct mp_log *log, const m_option_t *prop_list, } return do_action(prop_list, name, M_PROPERTY_SET, arg, ctx); } + case M_PROPERTY_GET_NODE: { + if ((r = do_action(prop_list, name, M_PROPERTY_GET_NODE, arg, ctx)) != + M_PROPERTY_NOT_IMPLEMENTED) + return r; + if ((r = do_action(prop_list, name, M_PROPERTY_GET, &val, ctx)) <= 0) + return r; + struct mpv_node *node = arg; + int err = m_option_get_node(&opt, NULL, node, &val); + if (err == M_OPT_UNKNOWN) { + r = M_PROPERTY_NOT_IMPLEMENTED; + } else if (r < 0) { + r = M_PROPERTY_INVALID_FORMAT; + } else { + r = M_PROPERTY_OK; + } + m_option_free(&opt, &val); + return r; + } + case M_PROPERTY_SET_NODE: { + if ((r = do_action(prop_list, name, M_PROPERTY_SET_NODE, arg, ctx)) != + M_PROPERTY_NOT_IMPLEMENTED) + return r; + struct mpv_node *node = arg; + int err = m_option_set_node(&opt, &val, node); + if (err == M_OPT_UNKNOWN) { + r = M_PROPERTY_NOT_IMPLEMENTED; + } else if (r < 0) { + r = M_PROPERTY_INVALID_FORMAT; + } else { + r = do_action(prop_list, name, M_PROPERTY_SET, &val, ctx); + } + m_option_free(&opt, &val); + return r; + } default: return do_action(prop_list, name, action, arg, ctx); } -- cgit v1.2.3