text: /*
   *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
   *
   *  Use of this source code is governed by a BSD-style license
   *  that can be found in the LICENSE file in the root of the source
   *  tree. An additional intellectual property rights grant can be found
   *  in the file PATENTS.  All contributing project authors may
   *  be found in the AUTHORS file in the root of the source tree.
   */
  
  
  #include "vpx_config.h"
  #include "vpx_rtcd.h"
  #if ARCH_ARM
  #include "vpx_ports/arm.h"
  #elif ARCH_X86 || ARCH_X86_64
  #include "vpx_ports/x86.h"
  #endif
  #include "vp8/common/onyxc_int.h"
  
  #if CONFIG_MULTITHREAD
  #if HAVE_UNISTD_H
  #include <unistd.h>
  #elif defined(_WIN32)
  #include <windows.h>
  typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
  #endif
  #endif
  
  extern void vp8_arch_opencl_common_init(VP8_COMMON *ctx);
  
  #if CONFIG_MULTITHREAD
  static int get_cpu_count()
  {
      int core_count = 16;
  
  #if HAVE_UNISTD_H
  #if defined(_SC_NPROCESSORS_ONLN)
      core_count = sysconf(_SC_NPROCESSORS_ONLN);
  #elif defined(_SC_NPROC_ONLN)
      core_count = sysconf(_SC_NPROC_ONLN);
  #endif
  #elif defined(_WIN32)
      {
          PGNSI pGNSI;
          SYSTEM_INFO sysinfo;
  
          /* Call GetNativeSystemInfo if supported or
           * GetSystemInfo otherwise. */
  
          pGNSI = (PGNSI) GetProcAddress(
                  GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
          if (pGNSI != NULL)
              pGNSI(&sysinfo);
          else
              GetSystemInfo(&sysinfo);
  
          core_count = sysinfo.dwNumberOfProcessors;
      }
  #else
      /* other platforms */
  #endif
  
      return core_count > 0 ? core_count : 1;
  }
  #endif
  
  void vp8_machine_specific_config(VP8_COMMON *ctx)
  {
  #if CONFIG_OPENCL && (ENABLE_CL_IDCT_DEQUANT || ENABLE_CL_SUBPIXEL || ENABLE_CL_LOOPFILTER)
      vp8_arch_opencl_common_init(ctx);
  #endif
  
  #if CONFIG_MULTITHREAD
      ctx->processor_core_count = get_cpu_count();
  #endif /* CONFIG_MULTITHREAD */
  
  #if ARCH_ARM
      ctx->cpu_caps = arm_cpu_caps();
  #elif ARCH_X86 || ARCH_X86_64
      ctx->cpu_caps = x86_simd_caps();
  #endif
  
      vpx_rtcd();
  }
  