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