shithub: openh264

Download patch

ref: 5e10951c476f6af1eda5ae253805b51f0b257050
parent: af6feaa45c4a865f91eb8c1b049e51dffa2e7456
author: Martin Storsjö <martin@martin.st>
date: Tue Jan 21 07:07:16 EST 2014

Use sysctl instead of the deprecated Gestalt API for getting the number of cores on OS X

Also use the __APPLE__ predefined define instead of MACOS for enabling
these code paths.

This also avoids having to link to the CoreServices framework in
order to get the Gestalt function.

--- a/codec/common/WelsThreadLib.cpp
+++ b/codec/common/WelsThreadLib.cpp
@@ -182,10 +182,11 @@
 
 #elif   defined(__GNUC__)
 
-#ifdef MACOS
-#include <CoreServices/CoreServices.h>
-//#include <Gestalt.h>
-#endif//MACOS
+#ifdef __APPLE__
+#include <sys/sysctl.h>
+#include <sys/param.h>
+#include <unistd.h>
+#endif//__APPLE__
 
 void WelsSleep (uint32_t dwMilliseconds) {
   usleep (dwMilliseconds * 1000);	// microseconds
@@ -306,7 +307,7 @@
   if (dwMilliseconds != (uint32_t) - 1) {
     return sem_wait (event);
   } else {
-#if defined(MACOS)
+#if defined(__APPLE__)
     int32_t err = 0;
     int32_t wait_count = 0;
     do {
@@ -329,7 +330,7 @@
     ts.tv_nsec = tv.tv_usec * 1000 + (dwMilliseconds % 1000) * 1000000;
 
     return sem_timedwait (event, &ts);
-#endif//MACOS
+#endif//__APPLE__
   }
 }
 
@@ -348,7 +349,7 @@
     nIdx = 0;	// access each event by order
     while (nIdx < nCount) {
       int32_t err = 0;
-//#if defined(MACOS)	// clock_gettime(CLOCK_REALTIME) & sem_timedwait not supported on mac, so have below impl
+//#if defined(__APPLE__)	// clock_gettime(CLOCK_REALTIME) & sem_timedwait not supported on mac, so have below impl
       int32_t wait_count = 0;
 //			struct timespec ts;
 //			struct timeval tv;
@@ -462,10 +463,10 @@
 
 #else
 
-  SInt32 cpunumber;
-  Gestalt (gestaltCountOfCPUs, &cpunumber);
+  size_t len = sizeof (pInfo->ProcessorCount);
 
-  pInfo->ProcessorCount	= cpunumber;
+  if (sysctlbyname ("hw.logicalcpu", &pInfo->ProcessorCount, &len, NULL, 0) == -1)
+    pInfo->ProcessorCount = 1;
 
   return WELS_THREAD_ERROR_OK;