-/**
- * 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 defined(__SYMBIAN32__)
- return 1;
-#elif defined(HAVE_SCHED_GETAFFINITY)
- cpu_set_t cpu;
- CPU_ZERO(&cpu);
- if (sched_getaffinity(getpid(), 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;
-#elif defined(__OpenBSD__)
- int selectors[2] = { CTL_HW, HW_NCPU };
- int count;
- size_t size = sizeof(count) ;
- if (sysctl(selectors, 2, &count, &size, NULL, 0))
- return 1; /* Failure */
- return count;
-#elif defined(__SunOS)
- unsigned count = 0;
- int type;
- u_int numcpus;
- processorid_t *cpulist;
- processor_info_t cpuinfo;
- cpulist = malloc(sizeof(processorid_t) * sysconf(_SC_NPROCESSORS_MAX));
- if (!cpulist) return 1;
- if (pset_info(PS_MYID, &type, &numcpus, cpulist)==0)
- {
- for (u_int i = 0; i < numcpus; i++)
- {
- if (!processor_info(cpulist[i], &cpuinfo))
- count += (cpuinfo.pi_state == P_ONLINE)?1:0;
- }
- } else {
- count = sysconf(_SC_NPROCESSORS_ONLN);
- }
- free(cpulist);
- return (count>0)?count:1;
-#else
-# warning "vlc_GetCPUCount is not implemented for your platform"
- return 1;
-#endif