17cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde/*
233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
37cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *
47cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  Use of this source code is governed by a BSD-style license
57cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  that can be found in the LICENSE file in the root of the source
67cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  tree. An additional intellectual property rights grant can be found
77cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  in the file PATENTS.  All contributing project authors may
87cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde *  be found in the AUTHORS file in the root of the source tree.
97cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde */
107cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
1133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifndef INCLUDE_LIBYUV_BASIC_TYPES_H_  // NOLINT
127cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define INCLUDE_LIBYUV_BASIC_TYPES_H_
137cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
147cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#include <stddef.h>  // for NULL, size_t
157cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
1633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#if !(defined(_MSC_VER) && (_MSC_VER < 1600))
177cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#include <stdint.h>  // for uintptr_t
187cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#endif
197cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
207cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#ifndef INT_TYPES_DEFINED
217cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define INT_TYPES_DEFINED
227cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#ifdef COMPILER_MSVC
237cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordetypedef unsigned __int64 uint64;
247cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordetypedef __int64 int64;
257cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#ifndef INT64_C
267cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define INT64_C(x) x ## I64
277cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#endif
287cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#ifndef UINT64_C
297cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define UINT64_C(x) x ## UI64
307cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#endif
317cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define INT64_F "I64"
3233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#else  // COMPILER_MSVC
3333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifdef __LP64__
3433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef unsigned long uint64;  // NOLINT
3533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef long int64;  // NOLINT
3633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifndef INT64_C
3733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define INT64_C(x) x ## L
3833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
3933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifndef UINT64_C
4033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define UINT64_C(x) x ## UL
4133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
4233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define INT64_F "l"
4333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#else  // __LP64__
4433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef unsigned long long uint64;  // NOLINT
4533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef long long int64;  // NOLINT
467cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#ifndef INT64_C
477cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define INT64_C(x) x ## LL
487cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#endif
497cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#ifndef UINT64_C
507cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define UINT64_C(x) x ## ULL
517cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#endif
527cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define INT64_F "ll"
5333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif  // __LP64__
5433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif  // COMPILER_MSVC
557cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordetypedef unsigned int uint32;
5633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef int int32;
5733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef unsigned short uint16;  // NOLINT
5833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef short int16;  // NOLINT
597cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Bordetypedef unsigned char uint8;
6033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamptypedef signed char int8;
617cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#endif  // INT_TYPES_DEFINED
627cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
637cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde// Detect compiler is for x86 or x64.
647cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#if defined(__x86_64__) || defined(_M_X64) || \
657cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde    defined(__i386__) || defined(_M_IX86)
667cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define CPU_X86 1
677cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#endif
6833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp// Detect compiler is for ARM.
6933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#if defined(__arm__) || defined(_M_ARM)
7033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define CPU_ARM 1
7133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
727cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
7333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#ifndef ALIGNP
747cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde#define ALIGNP(p, t) \
7533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp    (reinterpret_cast<uint8*>(((reinterpret_cast<uintptr_t>(p) + \
7633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp    ((t) - 1)) & ~((t) - 1))))
7733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif
7833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp
7933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#if !defined(LIBYUV_API)
8033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#if defined(_WIN32) || defined(__CYGWIN__)
8133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#if defined(LIBYUV_BUILDING_SHARED_LIBRARY)
8233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define LIBYUV_API __declspec(dllexport)
8333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#elif defined(LIBYUV_USING_SHARED_LIBRARY)
8433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define LIBYUV_API __declspec(dllimport)
8533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#else
8633cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define LIBYUV_API
8733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif  // LIBYUV_BUILDING_SHARED_LIBRARY
8833cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__APPLE__) && \
8933cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp    (defined(LIBYUV_BUILDING_SHARED_LIBRARY) || \
9033cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp    defined(LIBYUV_USING_SHARED_LIBRARY))
9133cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define LIBYUV_API __attribute__ ((visibility ("default")))
9233cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#else
9333cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#define LIBYUV_API
9433cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif  // __GNUC__
9533cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif  // LIBYUV_API
967cd8149e2cbad8b1ff6d481c37a4775d3c8cf2faShri Borde
9733cfdeb7b267ab635413797fffb046b73272f7ecHendrik Dahlkamp#endif  // INCLUDE_LIBYUV_BASIC_TYPES_H_  NOLINT
98