summaryrefslogtreecommitdiff
path: root/ext/libde265
diff options
context:
space:
mode:
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% */