Home | History | Annotate | Download | only in generic
      1 /*
      2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 
     12 #include "vpx_config.h"
     13 #include "vp8_rtcd.h"
     14 #if ARCH_ARM
     15 #include "vpx_ports/arm.h"
     16 #elif ARCH_X86 || ARCH_X86_64
     17 #include "vpx_ports/x86.h"
     18 #endif
     19 #include "vp8/common/onyxc_int.h"
     20 
     21 #if CONFIG_MULTITHREAD
     22 #if HAVE_UNISTD_H && !defined(__OS2__)
     23 #include <unistd.h>
     24 #elif defined(_WIN32)
     25 #include <windows.h>
     26 typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
     27 #elif defined(__OS2__)
     28 #define INCL_DOS
     29 #define INCL_DOSSPINLOCK
     30 #include <os2.h>
     31 #endif
     32 #endif
     33 
     34 #if CONFIG_MULTITHREAD
     35 static int get_cpu_count()
     36 {
     37     int core_count = 16;
     38 
     39 #if HAVE_UNISTD_H && !defined(__OS2__)
     40 #if defined(_SC_NPROCESSORS_ONLN)
     41     core_count = sysconf(_SC_NPROCESSORS_ONLN);
     42 #elif defined(_SC_NPROC_ONLN)
     43     core_count = sysconf(_SC_NPROC_ONLN);
     44 #endif
     45 #elif defined(_WIN32)
     46     {
     47         PGNSI pGNSI;
     48         SYSTEM_INFO sysinfo;
     49 
     50         /* Call GetNativeSystemInfo if supported or
     51          * GetSystemInfo otherwise. */
     52 
     53         pGNSI = (PGNSI) GetProcAddress(
     54                 GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
     55         if (pGNSI != NULL)
     56             pGNSI(&sysinfo);
     57         else
     58             GetSystemInfo(&sysinfo);
     59 
     60         core_count = sysinfo.dwNumberOfProcessors;
     61     }
     62 #elif defined(__OS2__)
     63     {
     64         ULONG proc_id;
     65         ULONG status;
     66 
     67         core_count = 0;
     68         for (proc_id = 1; ; proc_id++)
     69         {
     70             if (DosGetProcessorStatus(proc_id, &status))
     71                 break;
     72 
     73             if (status == PROC_ONLINE)
     74                 core_count++;
     75         }
     76     }
     77 #else
     78     /* other platforms */
     79 #endif
     80 
     81     return core_count > 0 ? core_count : 1;
     82 }
     83 #endif
     84 
     85 void vp8_clear_system_state_c() {};
     86 
     87 void vp8_machine_specific_config(VP8_COMMON *ctx)
     88 {
     89 #if CONFIG_MULTITHREAD
     90     ctx->processor_core_count = get_cpu_count();
     91 #endif /* CONFIG_MULTITHREAD */
     92 
     93 #if ARCH_ARM
     94     ctx->cpu_caps = arm_cpu_caps();
     95 #elif ARCH_X86 || ARCH_X86_64
     96     ctx->cpu_caps = x86_simd_caps();
     97 #endif
     98 }
     99