summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Ross-Gowan <rossymiles@gmail.com>2016-09-28 21:47:30 +1000
committerJames Ross-Gowan <rossymiles@gmail.com>2016-09-28 21:47:30 +1000
commitb712095d894c1ee8aba833e0263c40ce0a59e9c5 (patch)
treeb512d942a235317b69963e0ba59de7bfc3893e98
parent3751065f9740244c95da963c0dd16a0bcd5b419c (diff)
downloadmpv-b712095d894c1ee8aba833e0263c40ce0a59e9c5.tar.bz2
mpv-b712095d894c1ee8aba833e0263c40ce0a59e9c5.tar.xz
win32: make --priority runtime-settable
I'm not sure if this option affects anything or if it's a placebo, especially since the VO thread is now registered with MMCSS. Still, I think --priority=high may have helped back when I used mplayer2 on a netbook. It's also possible that encoding-mode users would want to set --priority=idle. Anyway, it was one of the last M_OPT_FIXED options, so fix that.
-rw-r--r--options/m_option.h3
-rw-r--r--options/options.c2
-rw-r--r--player/command.c16
-rw-r--r--player/main.c9
4 files changed, 19 insertions, 11 deletions
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 <windows.h>
+#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 <windows.h>
-#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;