summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
Diffstat (limited to 'player')
-rw-r--r--player/command.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/player/command.c b/player/command.c
index cdef20d7a3..9839185ac5 100644
--- a/player/command.c
+++ b/player/command.c
@@ -348,6 +348,7 @@ static char *format_delay(double time)
int mp_on_set_option(void *ctx, struct m_config_option *co, void *data, int flags)
{
struct MPContext *mpctx = ctx;
+ struct command_ctx *cmd = mpctx->command_ctx;
// Normalize "vf*" to "vf"
const char *name = co->name;
@@ -358,6 +359,14 @@ int mp_on_set_option(void *ctx, struct m_config_option *co, void *data, int flag
name = tmp;
}
+ // Skip going through mp_property_generic_option (typically), because the
+ // property implementation is trivial, and can break some obscure features
+ // like --profile and --include if non-trivial flags are involved (which
+ // the bridge would drop).
+ struct m_property *prop = m_property_list_find(cmd->properties, name);
+ if (prop && prop->is_option)
+ goto direct_option;
+
struct m_option type = {0};
int r = mp_property_do_silent(name, M_PROPERTY_GET_TYPE, &type, mpctx);
@@ -5680,11 +5689,13 @@ void command_init(struct MPContext *mpctx)
.call = co->opt->deprecation_message ?
mp_property_deprecated_alias : mp_property_alias,
.priv = (void *)alias,
+ .is_option = true,
};
} else {
prop = (struct m_property){
.name = co->name,
.call = mp_property_generic_option,
+ .is_option = true,
};
bstr bname = bstr0(prop.name);