123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /*
- * 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 "vp8_rtcd.h"
- #if ARCH_ARM
- #include "vpx_ports/arm.h"
- #elif ARCH_X86 || ARCH_X86_64
- #include "vpx_ports/x86.h"
- #elif ARCH_PPC
- #include "vpx_ports/ppc.h"
- #endif
- #include "vp8/common/onyxc_int.h"
- #include "vp8/common/systemdependent.h"
- #if CONFIG_MULTITHREAD
- #if HAVE_UNISTD_H && !defined(__OS2__)
- #include <unistd.h>
- #elif defined(_WIN32)
- #include <windows.h>
- typedef void(WINAPI *PGNSI)(LPSYSTEM_INFO);
- #elif defined(__OS2__)
- #define INCL_DOS
- #define INCL_DOSSPINLOCK
- #include <os2.h>
- #endif
- #endif
- #if CONFIG_MULTITHREAD
- static int get_cpu_count() {
- int core_count = 16;
- #if HAVE_UNISTD_H && !defined(__OS2__)
- #if defined(_SC_NPROCESSORS_ONLN)
- core_count = (int)sysconf(_SC_NPROCESSORS_ONLN);
- #elif defined(_SC_NPROC_ONLN)
- core_count = (int)sysconf(_SC_NPROC_ONLN);
- #endif
- #elif defined(_WIN32)
- {
- #if _WIN32_WINNT >= 0x0501
- SYSTEM_INFO sysinfo;
- GetNativeSystemInfo(&sysinfo);
- #else
- 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);
- #endif
- core_count = (int)sysinfo.dwNumberOfProcessors;
- }
- #elif defined(__OS2__)
- {
- ULONG proc_id;
- ULONG status;
- core_count = 0;
- for (proc_id = 1;; ++proc_id) {
- if (DosGetProcessorStatus(proc_id, &status)) break;
- if (status == PROC_ONLINE) core_count++;
- }
- }
- #else
- /* other platforms */
- #endif
- return core_count > 0 ? core_count : 1;
- }
- #endif
- void vp8_machine_specific_config(VP8_COMMON *ctx) {
- #if CONFIG_MULTITHREAD
- ctx->processor_core_count = get_cpu_count();
- #else
- (void)ctx;
- #endif /* CONFIG_MULTITHREAD */
- #if ARCH_ARM
- ctx->cpu_caps = arm_cpu_caps();
- #elif ARCH_X86 || ARCH_X86_64
- ctx->cpu_caps = x86_simd_caps();
- #elif ARCH_PPC
- ctx->cpu_caps = ppc_simd_caps();
- #endif
- }
|