+/**
+ * Return the number of available logical CPU.
+ */
+unsigned vlc_GetCPUCount(void)
+{
+#ifdef WIN32
+ DWORD process_mask;
+ DWORD system_mask;
+ if (!GetProcessAffinityMask(GetCurrentProcess(), &process_mask, &system_mask))
+ return 1;
+
+ unsigned count = 0;
+ while (system_mask) {
+ count++;
+ system_mask >>= 1;
+ }
+ return count;
+#elif HAVE_SCHED_GETAFFINITY
+ cpu_set_t cpu;
+ CPU_ZERO(&cpu);
+ if (sched_getaffinity(0, sizeof(cpu), &cpu) < 0)
+ return 1;
+ unsigned count = 0;
+ for (unsigned i = 0; i < CPU_SETSIZE; i++)
+ count += CPU_ISSET(i, &cpu) != 0;
+ return count;
+#else
+# warning "vlc_GetCPUCount is not implemented for your platform"
+ return 1;
+#endif
+}
+