/***************************************************************************** * osdep.h: h264 encoder ***************************************************************************** * Copyright (C) 2007-2008 x264 project * * Authors: Loren Merritt * Laurent Aimar * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. *****************************************************************************/ #ifndef X264_OSDEP_H #define X264_OSDEP_H #define _LARGEFILE_SOURCE 1 #define _FILE_OFFSET_BITS 64 #include #ifdef HAVE_STDINT_H #include #else #include #endif #ifdef _WIN32 #include // _setmode() #include // _O_BINARY #endif #ifdef _MSC_VER #define inline __inline #define strcasecmp stricmp #define strncasecmp strnicmp #define snprintf _snprintf #define fseek _fseeki64 #define ftell _ftelli64 #define isfinite _finite #define _CRT_SECURE_NO_DEPRECATE #define X264_VERSION "" // no configure script for msvc #endif #ifdef SYS_OPENBSD #define isfinite finite #endif #if defined(_MSC_VER) || defined(SYS_SunOS) || defined(SYS_MACOSX) #define sqrtf sqrt #endif #ifdef _WIN32 #define rename(src,dst) (unlink(dst), rename(src,dst)) // POSIX says that rename() removes the destination, but win32 doesn't. #ifndef strtok_r #define strtok_r(str,delim,save) strtok(str,delim) #endif #endif #ifdef _MSC_VER #define DECLARE_ALIGNED( var, n ) __declspec(align(n)) var #else #define DECLARE_ALIGNED( var, n ) var __attribute__((aligned(n))) #endif #define DECLARE_ALIGNED_16( var ) DECLARE_ALIGNED( var, 16 ) #define DECLARE_ALIGNED_8( var ) DECLARE_ALIGNED( var, 8 ) #define DECLARE_ALIGNED_4( var ) DECLARE_ALIGNED( var, 4 ) #if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) #define UNUSED __attribute__((unused)) #define ALWAYS_INLINE __attribute__((always_inline)) inline #define NOINLINE __attribute__((noinline)) #else #define UNUSED #define ALWAYS_INLINE inline #define NOINLINE #endif /* threads */ #if defined(SYS_BEOS) #include #define x264_pthread_t thread_id #define x264_pthread_create(t,u,f,d) { *(t)=spawn_thread(f,"",10,d); \ resume_thread(*(t)); } #define x264_pthread_join(t,s) { long tmp; \ wait_for_thread(t,(s)?(long*)(s):&tmp); } #ifndef usleep #define usleep(t) snooze(t) #endif #define HAVE_PTHREAD 1 #elif defined(HAVE_PTHREAD) #include #define USE_REAL_PTHREAD #else #define x264_pthread_t int #define x264_pthread_create(t,u,f,d) #define x264_pthread_join(t,s) #endif //SYS_* #ifdef USE_REAL_PTHREAD #define x264_pthread_t pthread_t #define x264_pthread_create pthread_create #define x264_pthread_join pthread_join #define x264_pthread_mutex_t pthread_mutex_t #define x264_pthread_mutex_init pthread_mutex_init #define x264_pthread_mutex_destroy pthread_mutex_destroy #define x264_pthread_mutex_lock pthread_mutex_lock #define x264_pthread_mutex_unlock pthread_mutex_unlock #define x264_pthread_cond_t pthread_cond_t #define x264_pthread_cond_init pthread_cond_init #define x264_pthread_cond_destroy pthread_cond_destroy #define x264_pthread_cond_broadcast pthread_cond_broadcast #define x264_pthread_cond_wait pthread_cond_wait #else #define x264_pthread_mutex_t int #define x264_pthread_mutex_init(m,f) #define x264_pthread_mutex_destroy(m) #define x264_pthread_mutex_lock(m) #define x264_pthread_mutex_unlock(m) #define x264_pthread_cond_t int #define x264_pthread_cond_init(c,f) #define x264_pthread_cond_destroy(c) #define x264_pthread_cond_broadcast(c) #define x264_pthread_cond_wait(c,m) #endif #define WORD_SIZE sizeof(void*) #if !defined(_WIN64) && !defined(__LP64__) #if defined(_MSC_VER) || defined(__INTEL_COMPILER) #define BROKEN_STACK_ALIGNMENT /* define it if stack is not mod16 */ #endif #endif #ifdef WORDS_BIGENDIAN #define endian_fix(x) (x) #define endian_fix32(x) (x) #elif defined(__GNUC__) && defined(HAVE_MMX) static ALWAYS_INLINE uint32_t endian_fix32( uint32_t x ) { asm("bswap %0":"+r"(x)); return x; } static ALWAYS_INLINE intptr_t endian_fix( intptr_t x ) { asm("bswap %0":"+r"(x)); return x; } #else static ALWAYS_INLINE uint32_t endian_fix32( uint32_t x ) { return (x<<24) + ((x<<8)&0xff0000) + ((x>>8)&0xff00) + (x>>24); } static ALWAYS_INLINE intptr_t endian_fix( intptr_t x ) { if( WORD_SIZE == 8 ) return endian_fix32(x>>32) + ((uint64_t)endian_fix32(x)<<32); else return endian_fix32(x); } #endif #endif /* X264_OSDEP_H */