1167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org/*
288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
3167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *
4167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  Use of this source code is governed by a BSD-style license
5167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  that can be found in the LICENSE file in the root of the source
6167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  tree. An additional intellectual property rights grant can be found
788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *  in the file PATENTS. All contributing project authors may
8167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org *  be found in the AUTHORS file in the root of the source tree.
9167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org */
10167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
1188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifndef INCLUDE_LIBYUV_BASIC_TYPES_H_  // NOLINT
12167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define INCLUDE_LIBYUV_BASIC_TYPES_H_
13167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
14167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include <stddef.h>  // for NULL, size_t
15167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
1688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__ANDROID__) || (defined(_MSC_VER) && (_MSC_VER < 1600))
1788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#include <sys/types.h>  // for uintptr_t on x86
1888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#else
19167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#include <stdint.h>  // for uintptr_t
20167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
21167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
2288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifndef GG_LONGLONG
23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#ifndef INT_TYPES_DEFINED
24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define INT_TYPES_DEFINED
25167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#ifdef COMPILER_MSVC
26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtypedef unsigned __int64 uint64;
27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtypedef __int64 int64;
28167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#ifndef INT64_C
29167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define INT64_C(x) x ## I64
30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#ifndef UINT64_C
32167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define UINT64_C(x) x ## UI64
33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define INT64_F "I64"
35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#else  // COMPILER_MSVC
3688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__LP64__) && !defined(__OpenBSD__) && !defined(__APPLE__)
3788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef unsigned long uint64;  // NOLINT
3888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef long int64;  // NOLINT
39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#ifndef INT64_C
40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define INT64_C(x) x ## L
41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#ifndef UINT64_C
43167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define UINT64_C(x) x ## UL
44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
45167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define INT64_F "l"
4688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#else  // defined(__LP64__) && !defined(__OpenBSD__) && !defined(__APPLE__)
4788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef unsigned long long uint64;  // NOLINT
4888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef long long int64;  // NOLINT
49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#ifndef INT64_C
50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define INT64_C(x) x ## LL
51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#ifndef UINT64_C
53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define UINT64_C(x) x ## ULL
54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
55167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define INT64_F "ll"
56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif  // __LP64__
57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif  // COMPILER_MSVC
58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtypedef unsigned int uint32;
59167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtypedef int int32;
6088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef unsigned short uint16;  // NOLINT
6188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef short int16;  // NOLINT
62167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgtypedef unsigned char uint8;
6388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef signed char int8;
64167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif  // INT_TYPES_DEFINED
6588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // GG_LONGLONG
66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
67167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org// Detect compiler is for x86 or x64.
68167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#if defined(__x86_64__) || defined(_M_X64) || \
69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org    defined(__i386__) || defined(_M_IX86)
70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define CPU_X86 1
71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#endif
7288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Detect compiler is for ARM.
7388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__arm__) || defined(_M_ARM)
7488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define CPU_ARM 1
7588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
76167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
7788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifndef ALIGNP
7888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef __cplusplus
7988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define ALIGNP(p, t) \
8088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    (reinterpret_cast<uint8*>(((reinterpret_cast<uintptr_t>(p) + \
8188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ((t) - 1)) & ~((t) - 1))))
8288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#else
83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org#define ALIGNP(p, t) \
8488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ((uint8*)((((uintptr_t)(p) + ((t) - 1)) & ~((t) - 1))))  /* NOLINT */
8588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
8688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
8788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
8888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if !defined(LIBYUV_API)
8988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(_WIN32) || defined(__CYGWIN__)
9088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(LIBYUV_BUILDING_SHARED_LIBRARY)
9188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_API __declspec(dllexport)
9288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#elif defined(LIBYUV_USING_SHARED_LIBRARY)
9388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_API __declspec(dllimport)
9488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#else
9588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_API
9688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // LIBYUV_BUILDING_SHARED_LIBRARY
9788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__APPLE__) && \
9888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    (defined(LIBYUV_BUILDING_SHARED_LIBRARY) || \
9988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    defined(LIBYUV_USING_SHARED_LIBRARY))
10088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_API __attribute__ ((visibility ("default")))
10188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#else
10288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_API
10388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // __GNUC__
10488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // LIBYUV_API
10588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
10688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_BOOL int
10788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_FALSE 0
10888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_TRUE 1
10988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
11088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Visual C x86 or GCC little endian.
11188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__x86_64__) || defined(_M_X64) || \
11288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  defined(__i386__) || defined(_M_IX86) || \
11388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  defined(__arm__) || defined(_M_ARM) || \
11488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
11588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define LIBYUV_LITTLE_ENDIAN
11688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
117167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org
11888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // INCLUDE_LIBYUV_BASIC_TYPES_H_  NOLINT
119