diff --git a/options/m_option.h b/options/m_option.h index 6a7b4accc9..69113bbd8c 100644 --- a/options/m_option.h +++ b/options/m_option.h @@ -389,7 +389,8 @@ struct m_option { #define UPDATE_IMGPAR (1 << 12) // video image params overrides #define UPDATE_INPUT (1 << 13) // mostly --input-* options #define UPDATE_AUDIO (1 << 14) // --audio-channels etc. -#define UPDATE_OPT_LAST (1 << 14) +#define UPDATE_PRIORITY (1 << 15) // --priority (Windows-only) +#define UPDATE_OPT_LAST (1 << 15) // All bits between _FIRST and _LAST (inclusive) #define UPDATE_OPTS_MASK \ diff --git a/options/options.c b/options/options.c index a91775ddf4..b7cc7443d2 100644 --- a/options/options.c +++ b/options/options.c @@ -269,7 +269,7 @@ const m_option_t mp_opts[] = { OPT_FLAG("msg-module", msg_module, UPDATE_TERM), OPT_FLAG("msg-time", msg_time, UPDATE_TERM), #ifdef _WIN32 - OPT_CHOICE("priority", w32_priority, M_OPT_FIXED, + OPT_CHOICE("priority", w32_priority, UPDATE_PRIORITY, ({"no", 0}, {"realtime", REALTIME_PRIORITY_CLASS}, {"high", HIGH_PRIORITY_CLASS}, diff --git a/player/command.c b/player/command.c index be6b31d1b3..9b771a2e1d 100644 --- a/player/command.c +++ b/player/command.c @@ -68,6 +68,10 @@ #include "core.h" +#ifdef _WIN32 +#include +#endif + struct command_ctx { // All properties, terminated with a {0} item. struct m_property *properties; @@ -5649,6 +5653,15 @@ void mp_notify(struct MPContext *mpctx, int event, void *arg) mp_client_broadcast_event(mpctx, event, arg); } +static void update_priority(struct MPContext *mpctx) +{ +#ifdef _WIN32 + struct MPOpts *opts = mpctx->opts; + if (opts->w32_priority > 0) + SetPriorityClass(GetCurrentProcess(), opts->w32_priority); +#endif +} + void mp_option_change_callback(void *ctx, struct m_config_option *co, int flags) { struct MPContext *mpctx = ctx; @@ -5704,6 +5717,9 @@ void mp_option_change_callback(void *ctx, struct m_config_option *co, int flags) uninit_audio_out(mpctx); mp_wakeup_core(mpctx); } + + if (flags & UPDATE_PRIORITY) + update_priority(mpctx); } void mp_notify_property(struct MPContext *mpctx, const char *property) diff --git a/player/main.c b/player/main.c index ad907e034a..7dcc266094 100644 --- a/player/main.c +++ b/player/main.c @@ -66,10 +66,6 @@ static const char def_config[] = #include "player/builtin_conf.inc" ; -#ifdef _WIN32 -#include -#endif - #if HAVE_COCOA #include "osdep/macosx_events.h" #endif @@ -472,11 +468,6 @@ int mp_initialize(struct MPContext *mpctx, char **options) if (opts->force_vo == 2 && handle_force_window(mpctx, false) < 0) return -1; -#ifdef _WIN32 - if (opts->w32_priority > 0) - SetPriorityClass(GetCurrentProcess(), opts->w32_priority); -#endif - MP_STATS(mpctx, "end init"); return 0;