summaryrefslogtreecommitdiff
path: root/ext/libde265
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.com>2015-04-28 16:06:47 +0100
committerTim-Philipp Müller <tim@centricular.com>2015-04-28 16:08:31 +0100
commitc754b8526b32cffe397308567127313bf993c86d (patch)
treeeeb498e6f06c5860690ed5cbaa860750c0f8f240 /ext/libde265
parentf0a9c246a37eaf7ba67338f5362ceddf9a74676d (diff)
downloadgstreamer-plugins-bad-c754b8526b32cffe397308567127313bf993c86d.tar.gz
de265dec: use g_get_num_processors() if available
And provide home-made fallback for older GLib versions, so that we can later find these and remove them when we bump the GLib requirement (which is certainly going to happen before 2.0). https://bugzilla.gnome.org/show_bug.cgi?id=748495
Diffstat (limited to 'ext/libde265')
-rw-r--r--ext/libde265/libde265-dec.c84
1 files changed, 48 insertions, 36 deletions
diff --git a/ext/libde265/libde265-dec.c b/ext/libde265/libde265-dec.c
index d52e8ce25..a57bd5bf7 100644
--- a/ext/libde265/libde265-dec.c
+++ b/ext/libde265/libde265-dec.c
@@ -36,17 +36,62 @@
#include "config.h"
#endif
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+
+#include "libde265-dec.h"
+
+#if !GLIB_CHECK_VERSION(2, 36, 0)
+#include <stdio.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef G_OS_WIN32
#include <windows.h>
#endif
+#define g_get_num_processors gst_g_get_num_processors
+static guint
+gst_g_get_num_processors (void)
+{
+ guint threads = 0;
-#include "libde265-dec.h"
+#if defined(_SC_NPROC_ONLN)
+ threads = sysconf (_SC_NPROC_ONLN);
+#elif defined(_SC_NPROCESSORS_ONLN)
+ threads = sysconf (_SC_NPROCESSORS_ONLN);
+#elif defined(G_OS_WIN32)
+ {
+ 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++;
+ }
+ }
+#else
+#warning "Don't know how to get number of CPU cores, will use the default thread count"
+ threads = DEFAULT_THREAD_COUNT;
+#endif
+
+ if (threads > 0)
+ return threads;
+
+ return 1;
+}
+#endif /* !GLIB_CHECK_VERSION(2, 36, 0) */
/* use two decoder threads if no information about
* available CPU cores can be retrieved */
@@ -377,41 +422,8 @@ gst_libde265_dec_start (GstVideoDecoder * decoder)
return FALSE;
}
if (threads == 0) {
-#if defined(_SC_NPROC_ONLN)
- 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;
+ threads = g_get_num_processors ();
- /* 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;
-#endif
- if (threads <= 0) {
- threads = DEFAULT_THREAD_COUNT;
- }
/* NOTE: We start more threads than cores for now, as some threads
* might get blocked while waiting for dependent data. Having more
* threads increases decoding speed by about 10% */