# else /* WIN32 */
# define check_capability(name, flag, code) \
- do { \
- i_capabilities |= (flag); \
- } while(0)
+ i_capabilities |= (flag);
# endif
#endif
#endif
};
+/**
+ * Return the number of available logical CPU.
+ */
+unsigned vlc_GetCPUCount(void)
+{
+#if defined(WIN32) && !defined(UNDER_CE)
+ 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;
+#elif defined(__APPLE__)
+ int count;
+ size_t size = sizeof(count) ;
+ if (sysctlbyname("hw.ncpu", &count, &size, NULL, 0))
+ return 1; /* Failure */
+ return count;
+#else
+# warning "vlc_GetCPUCount is not implemented for your platform"
+ return 1;
+#endif
+}
+
/**
* Check if a directory name contains usable plugins w.r.t. the hardware
* capabilities. Loading a plugin when the hardware has insufficient