diff options
author | Diogo Franco (Kovensky) <diogomfranco@gmail.com> | 2015-04-25 18:28:17 +0900 |
---|---|---|
committer | Diogo Franco (Kovensky) <diogomfranco@gmail.com> | 2015-04-25 18:28:17 +0900 |
commit | 5f1d6b6e5ae515abfb77c78c44d21ee21beb0fc3 (patch) | |
tree | 6b757d37d296709dfd5955ef9d4d41426cd47da6 /video/out/w32_common.c | |
parent | d64ff3aa51b49451348383a6ff6de7697a52dc62 (diff) | |
parent | 983d24e3b9ce9c9c7755279138c14170e85fbf37 (diff) | |
download | mpv-5f1d6b6e5ae515abfb77c78c44d21ee21beb0fc3.tar.bz2 mpv-5f1d6b6e5ae515abfb77c78c44d21ee21beb0fc3.tar.xz |
Merge branch 'master' into release/0.9
* master: (87 commits)
manpage: move --autosync description
player: add --window-scale option
player: flush decoder even if cover art is decoded
player: don't show A/V desync message in non-sense situations
w32_common: add more rounded-down frame rates
w32_common: use the current monitor's refresh rate
dxva2: fix broken build with gcc 5.1
terminal: printf() is not signal-safe
man: fix PDF build
DOCS/mplayer-changes: Eleborate on joystick input
osc: add nil check for element.eventresponder
mp_image: remove some unused interlacing flags
vf_vapoursynth: update _FieldBased semantics
options: remove unneeded hack from command line parser
manpage: document ff-index sub-property
demux_mkv: limit timestamp fixing to 1ms max
demux_mkv: attempt to fix rounded timestamps
demux_mkv: move global options to the demuxer
demux_mkv: better seeking after video end
lua: add utils.format_json() function
...
Diffstat (limited to 'video/out/w32_common.c')
-rw-r--r-- | video/out/w32_common.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/video/out/w32_common.c b/video/out/w32_common.c index e1ec3ad8e9..075bda586e 100644 --- a/video/out/w32_common.c +++ b/video/out/w32_common.c @@ -565,12 +565,15 @@ static void wakeup_gui_thread(void *ctx) PostMessage(w32->window, WM_USER, 0, 0); } -static double vo_w32_get_display_fps(void) +static double vo_w32_get_display_fps(struct vo_w32_state *w32) { - DEVMODE dm; - dm.dmSize = sizeof(DEVMODE); - dm.dmDriverExtra = 0; - if (!EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm)) + // Get the device name of the monitor containing the window + HMONITOR mon = MonitorFromWindow(w32->window, MONITOR_DEFAULTTOPRIMARY); + MONITORINFOEXW mi = { .cbSize = sizeof mi }; + GetMonitorInfoW(mon, (MONITORINFO*)&mi); + + DEVMODE dm = { .dmSize = sizeof dm }; + if (!EnumDisplaySettingsW(mi.szDevice, ENUM_CURRENT_SETTINGS, &dm)) return -1; // May return 0 or 1 which "represent the display hardware's default refresh rate" @@ -586,20 +589,22 @@ static double vo_w32_get_display_fps(void) switch (dm.dmDisplayFrequency) { case 23: case 29: + case 47: case 59: case 71: + case 89: + case 95: case 119: + case 143: rv = (rv + 1) / 1.001; } return rv; } -static void update_display_fps(void *ctx) +static void update_display_fps(struct vo_w32_state *w32) { - struct vo_w32_state *w32 = ctx; - - double fps = vo_w32_get_display_fps(); + double fps = vo_w32_get_display_fps(w32); if (fps != w32->display_fps) { w32->display_fps = fps; signal_events(w32, VO_EVENT_WIN_STATE); @@ -1316,7 +1321,8 @@ static int gui_thread_control(struct vo_w32_state *w32, int request, void *arg) return VO_TRUE; case VOCTRL_KILL_SCREENSAVER: w32->disable_screensaver = true; - SetThreadExecutionState(ES_CONTINUOUS | ES_DISPLAY_REQUIRED); + SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | + ES_DISPLAY_REQUIRED); return VO_TRUE; case VOCTRL_RESTORE_SCREENSAVER: w32->disable_screensaver = false; |