From 8ed76d25611fab34b4a547729aab175153cc2403 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 23 Mar 2018 15:06:27 +0100 Subject: command: move property multiply code to m_property.c I think this will help with reducing code duplication (see following commit). The error messages loses the multiplication factor, but the error message will be replaced by a generic one in the following commit anyway. --- options/m_property.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'options/m_property.c') diff --git a/options/m_property.c b/options/m_property.c index 2ef5a62123..431e16a51a 100644 --- a/options/m_property.c +++ b/options/m_property.c @@ -36,6 +36,32 @@ #include "common/msg.h" #include "common/common.h" +static int m_property_multiply(struct mp_log *log, + const struct m_property *prop_list, + const char *property, double f, void *ctx) +{ + union m_option_value val = {0}; + struct m_option opt = {0}; + int r; + + r = m_property_do(log, prop_list, property, M_PROPERTY_GET_CONSTRICTED_TYPE, + &opt, ctx); + if (r != M_PROPERTY_OK) + return r; + assert(opt.type); + + if (!opt.type->multiply) + return M_PROPERTY_NOT_IMPLEMENTED; + + r = m_property_do(log, prop_list, property, M_PROPERTY_GET, &val, ctx); + if (r != M_PROPERTY_OK) + return r; + opt.type->multiply(&opt, &val, f); + r = m_property_do(log, prop_list, property, M_PROPERTY_SET, &val, ctx); + m_option_free(&opt, &val); + return r; +} + struct m_property *m_property_list_find(const struct m_property *list, const char *name) { @@ -107,6 +133,9 @@ int m_property_do(struct mp_log *log, const struct m_property *prop_list, struct mpv_node node = { .format = MPV_FORMAT_STRING, .u.string = arg }; return m_property_do(log, prop_list, name, M_PROPERTY_SET_NODE, &node, ctx); } + case M_PROPERTY_MULTIPLY: { + return m_property_multiply(log, prop_list, name, *(double *)arg, ctx); + } case M_PROPERTY_SWITCH: { if (!log) return M_PROPERTY_ERROR; -- cgit v1.2.3