1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 12167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include "vpx_config.h" 136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vp8_rtcd.h" 145c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#if ARCH_ARM 155c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vpx_ports/arm.h" 165c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#elif ARCH_X86 || ARCH_X86_64 175c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vpx_ports/x86.h" 185c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#endif 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "vp8/common/onyxc_int.h" 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MULTITHREAD 225c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#if HAVE_UNISTD_H && !defined(__OS2__) 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <unistd.h> 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#elif defined(_WIN32) 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <windows.h> 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgtypedef void (WINAPI *PGNSI)(LPSYSTEM_INFO); 275c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#elif defined(__OS2__) 285c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#define INCL_DOS 295c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#define INCL_DOSSPINLOCK 305c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include <os2.h> 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MULTITHREAD 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic int get_cpu_count() 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{ 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int core_count = 16; 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 395c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#if HAVE_UNISTD_H && !defined(__OS2__) 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(_SC_NPROCESSORS_ONLN) 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org core_count = sysconf(_SC_NPROCESSORS_ONLN); 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#elif defined(_SC_NPROC_ONLN) 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org core_count = sysconf(_SC_NPROC_ONLN); 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#elif defined(_WIN32) 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org { 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org PGNSI pGNSI; 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org SYSTEM_INFO sysinfo; 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org /* Call GetNativeSystemInfo if supported or 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * GetSystemInfo otherwise. */ 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pGNSI = (PGNSI) GetProcAddress( 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo"); 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org if (pGNSI != NULL) 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pGNSI(&sysinfo); 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org else 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org GetSystemInfo(&sysinfo); 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org core_count = sysinfo.dwNumberOfProcessors; 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org } 625c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#elif defined(__OS2__) 635c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org { 645c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org ULONG proc_id; 655c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org ULONG status; 665c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 675c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org core_count = 0; 685c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org for (proc_id = 1; ; proc_id++) 695c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org { 705c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org if (DosGetProcessorStatus(proc_id, &status)) 715c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org break; 725c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 735c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org if (status == PROC_ONLINE) 745c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org core_count++; 755c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org } 765c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org } 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org /* other platforms */ 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org return core_count > 0 ? core_count : 1; 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 85c5f1170a5e91ab6e48cc9d66a6b21e9a1088b229johannkoenig@chromium.orgvoid vp8_clear_system_state_c() {}; 865c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 875c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgvoid vp8_machine_specific_config(VP8_COMMON *ctx) 885c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org{ 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_MULTITHREAD 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ctx->processor_core_count = get_cpu_count(); 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /* CONFIG_MULTITHREAD */ 925c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org 935c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#if ARCH_ARM 945c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org ctx->cpu_caps = arm_cpu_caps(); 955c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#elif ARCH_X86 || ARCH_X86_64 965c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org ctx->cpu_caps = x86_simd_caps(); 975c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#endif 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 99