blob: beb750ba65c0841cfac49976c3f9a525d1f2d06b [file] [log] [blame]
Shri Borde7cd81492011-11-02 13:20:24 -07001/*
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -08002 * Copyright 2011 The LibYuv Project Authors. All rights reserved.
Shri Borde7cd81492011-11-02 13:20:24 -07003 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
Hangyu Kuangf047e7c2016-07-06 14:21:45 -07007 * in the file PATENTS. All contributing project authors may
Shri Borde7cd81492011-11-02 13:20:24 -07008 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080011#ifndef INCLUDE_LIBYUV_BASIC_TYPES_H_ // NOLINT
Shri Borde7cd81492011-11-02 13:20:24 -070012#define INCLUDE_LIBYUV_BASIC_TYPES_H_
13
14#include <stddef.h> // for NULL, size_t
15
Hangyu Kuangf047e7c2016-07-06 14:21:45 -070016#if defined(__ANDROID__) || (defined(_MSC_VER) && (_MSC_VER < 1600))
17#include <sys/types.h> // for uintptr_t on x86
18#else
Shri Borde7cd81492011-11-02 13:20:24 -070019#include <stdint.h> // for uintptr_t
20#endif
21
Hangyu Kuangf047e7c2016-07-06 14:21:45 -070022#ifndef GG_LONGLONG
Shri Borde7cd81492011-11-02 13:20:24 -070023#ifndef INT_TYPES_DEFINED
24#define INT_TYPES_DEFINED
25#ifdef COMPILER_MSVC
Shri Borde7cd81492011-11-02 13:20:24 -070026typedef unsigned __int64 uint64;
27typedef __int64 int64;
28#ifndef INT64_C
29#define INT64_C(x) x ## I64
30#endif
31#ifndef UINT64_C
32#define UINT64_C(x) x ## UI64
33#endif
34#define INT64_F "I64"
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080035#else // COMPILER_MSVC
Hangyu Kuangf047e7c2016-07-06 14:21:45 -070036#if defined(__LP64__) && !defined(__OpenBSD__) && !defined(__APPLE__)
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080037typedef unsigned long uint64; // NOLINT
38typedef long int64; // NOLINT
39#ifndef INT64_C
40#define INT64_C(x) x ## L
41#endif
42#ifndef UINT64_C
43#define UINT64_C(x) x ## UL
44#endif
45#define INT64_F "l"
Hangyu Kuangf047e7c2016-07-06 14:21:45 -070046#else // defined(__LP64__) && !defined(__OpenBSD__) && !defined(__APPLE__)
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080047typedef unsigned long long uint64; // NOLINT
48typedef long long int64; // NOLINT
Shri Borde7cd81492011-11-02 13:20:24 -070049#ifndef INT64_C
50#define INT64_C(x) x ## LL
51#endif
52#ifndef UINT64_C
53#define UINT64_C(x) x ## ULL
54#endif
55#define INT64_F "ll"
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080056#endif // __LP64__
57#endif // COMPILER_MSVC
Shri Borde7cd81492011-11-02 13:20:24 -070058typedef unsigned int uint32;
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080059typedef int int32;
60typedef unsigned short uint16; // NOLINT
61typedef short int16; // NOLINT
Shri Borde7cd81492011-11-02 13:20:24 -070062typedef unsigned char uint8;
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080063typedef signed char int8;
Shri Borde7cd81492011-11-02 13:20:24 -070064#endif // INT_TYPES_DEFINED
Hangyu Kuangf047e7c2016-07-06 14:21:45 -070065#endif // GG_LONGLONG
Shri Borde7cd81492011-11-02 13:20:24 -070066
67// Detect compiler is for x86 or x64.
68#if defined(__x86_64__) || defined(_M_X64) || \
69 defined(__i386__) || defined(_M_IX86)
70#define CPU_X86 1
71#endif
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080072// Detect compiler is for ARM.
73#if defined(__arm__) || defined(_M_ARM)
74#define CPU_ARM 1
75#endif
Shri Borde7cd81492011-11-02 13:20:24 -070076
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080077#ifndef ALIGNP
Hangyu Kuangf047e7c2016-07-06 14:21:45 -070078#ifdef __cplusplus
Shri Borde7cd81492011-11-02 13:20:24 -070079#define ALIGNP(p, t) \
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080080 (reinterpret_cast<uint8*>(((reinterpret_cast<uintptr_t>(p) + \
81 ((t) - 1)) & ~((t) - 1))))
Hangyu Kuangf047e7c2016-07-06 14:21:45 -070082#else
83#define ALIGNP(p, t) \
84 ((uint8*)((((uintptr_t)(p) + ((t) - 1)) & ~((t) - 1)))) /* NOLINT */
85#endif
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080086#endif
Shri Borde7cd81492011-11-02 13:20:24 -070087
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -080088#if !defined(LIBYUV_API)
89#if defined(_WIN32) || defined(__CYGWIN__)
90#if defined(LIBYUV_BUILDING_SHARED_LIBRARY)
91#define LIBYUV_API __declspec(dllexport)
92#elif defined(LIBYUV_USING_SHARED_LIBRARY)
93#define LIBYUV_API __declspec(dllimport)
94#else
95#define LIBYUV_API
96#endif // LIBYUV_BUILDING_SHARED_LIBRARY
97#elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__APPLE__) && \
98 (defined(LIBYUV_BUILDING_SHARED_LIBRARY) || \
99 defined(LIBYUV_USING_SHARED_LIBRARY))
100#define LIBYUV_API __attribute__ ((visibility ("default")))
101#else
102#define LIBYUV_API
103#endif // __GNUC__
104#endif // LIBYUV_API
105
Hangyu Kuangf047e7c2016-07-06 14:21:45 -0700106#define LIBYUV_BOOL int
107#define LIBYUV_FALSE 0
108#define LIBYUV_TRUE 1
109
110// Visual C x86 or GCC little endian.
111#if defined(__x86_64__) || defined(_M_X64) || \
112 defined(__i386__) || defined(_M_IX86) || \
113 defined(__arm__) || defined(_M_ARM) || \
114 (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
115#define LIBYUV_LITTLE_ENDIAN
116#endif
117
Hendrik Dahlkamp33cfdeb2013-01-23 18:27:37 -0800118#endif // INCLUDE_LIBYUV_BASIC_TYPES_H_ NOLINT