From 0a95a4ea248047a51c665d6214236c560d2aa46f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?= =?UTF-8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Sun, 26 Apr 2015 20:55:03 +0000 Subject: [PATCH] libde265: W32 thread count support This code is imported from GLib g_get_num_processors(). This function was added in 2.36 but we depend on 2.32. https://bugzilla.gnome.org/show_bug.cgi?id=748495 --- ext/libde265/libde265-dec.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ext/libde265/libde265-dec.c b/ext/libde265/libde265-dec.c index c47917b198..d52e8ce253 100644 --- a/ext/libde265/libde265-dec.c +++ b/ext/libde265/libde265-dec.c @@ -42,6 +42,9 @@ #ifdef HAVE_UNISTD_H #include #endif +#ifdef G_OS_WIN32 +#include +#endif #include "libde265-dec.h" @@ -378,6 +381,30 @@ gst_libde265_dec_start (GstVideoDecoder * decoder) threads = sysconf (_SC_NPROC_ONLN); #elif defined(_SC_NPROCESSORS_ONLN) threads = sysconf (_SC_NPROCESSORS_ONLN); +#elif defined(G_OS_WIN32) + /* FIXME 2.0, use g_get_num_processors() */ + SYSTEM_INFO sysinfo; + DWORD_PTR process_cpus; + DWORD_PTR system_cpus; + + /* This *never* fails, but doesn't take CPU affinity into account */ + GetSystemInfo (&sysinfo); + threads = (int) sysinfo.dwNumberOfProcessors; + + /* This *can* fail, but produces correct results if affinity mask is used, + * unlike the simpler code above. + */ + if (GetProcessAffinityMask (GetCurrentProcess (), + &process_cpus, &system_cpus)) { + unsigned int count; + + for (count = 0; process_cpus != 0; process_cpus >>= 1) + if (process_cpus & 1) + count++; + + if (count > 0) + threads = (int) count; + } #else #warning "Don't know how to get number of CPU cores, will use the default thread count" threads = DEFAULT_THREAD_COUNT;