diff options
Diffstat (limited to 'options/m_property.c')
-rw-r--r-- | options/m_property.c | 36 |
1 files changed, 36 insertions, 0 deletions
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 <libavutil/common.h> +#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); } |