mirror of https://github.com/mpv-player/mpv
win32: request MMCSS "Playback" profile
This commit is contained in:
parent
8f7b12d9ae
commit
16cd20c46f
|
@ -24,6 +24,7 @@
|
|||
#include <initguid.h>
|
||||
#include <ole2.h>
|
||||
#include <shobjidl.h>
|
||||
#include <avrt.h>
|
||||
|
||||
#include "options/options.h"
|
||||
#include "input/keycodes.h"
|
||||
|
@ -107,6 +108,8 @@ struct vo_w32_state {
|
|||
|
||||
// updates on move/resize/displaychange
|
||||
double display_fps;
|
||||
|
||||
HANDLE avrt_handle;
|
||||
};
|
||||
|
||||
typedef struct tagDropTarget {
|
||||
|
@ -1263,6 +1266,11 @@ int vo_w32_init(struct vo *vo)
|
|||
goto fail;
|
||||
}
|
||||
|
||||
// While the UI runs in its own thread, the thread in which this function
|
||||
// runs in will be the renderer thread. Apply magic MMCSS cargo-cult,
|
||||
// which might stop Windows from throttling clock rate and so on.
|
||||
w32->avrt_handle = AvSetMmThreadCharacteristicsW(L"Playback", &(DWORD){0});
|
||||
|
||||
return 1;
|
||||
fail:
|
||||
talloc_free(w32);
|
||||
|
@ -1393,6 +1401,8 @@ void vo_w32_uninit(struct vo *vo)
|
|||
mp_dispatch_run(w32->dispatch, do_terminate, w32);
|
||||
pthread_join(w32->thread, NULL);
|
||||
|
||||
AvRevertMmThreadCharacteristics(w32->avrt_handle);
|
||||
|
||||
talloc_free(w32);
|
||||
vo->w32 = NULL;
|
||||
}
|
||||
|
|
2
wscript
2
wscript
|
@ -130,7 +130,7 @@ main_dependencies = [
|
|||
'name': 'win32',
|
||||
'desc': 'win32',
|
||||
'deps_any': [ 'os-win32', 'os-cygwin' ],
|
||||
'func': check_cc(lib=['winmm', 'gdi32', 'ole32', 'uuid']),
|
||||
'func': check_cc(lib=['winmm', 'gdi32', 'ole32', 'uuid', 'avrt']),
|
||||
}, {
|
||||
'name': '--win32-internal-pthreads',
|
||||
'desc': 'internal pthread wrapper for win32 (Vista+)',
|
||||
|
|
Loading…
Reference in New Issue