X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fcommon.h;h=92f6b8aa726846a0855da74c16dc088934b6eb97;hb=647cca0ebb2e897a570018ba80483bb81a7d90c6;hp=1dc4551163785106a67484c727afefb2f5bc91d7;hpb=92c69994381c98ebe52701143af65c44b49d4549;p=vlc diff --git a/include/common.h b/include/common.h index 1dc4551163..92f6b8aa72 100644 --- a/include/common.h +++ b/include/common.h @@ -1,49 +1,101 @@ -/******************************************************************************* +/***************************************************************************** * common.h: common definitions - * (c)1998 VideoLAN - ******************************************************************************* - * Collection of usefull common types and macros definitions - ******************************************************************************* + * Collection of useful common types and macros definitions + ***************************************************************************** + * Copyright (C) 1998, 1999, 2000 VideoLAN + * $Id: common.h,v 1.25 2001/01/18 05:13:22 sam Exp $ + * + * Authors: Samuel Hocevar + * Vincent Seguin + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + *****************************************************************************/ + +/***************************************************************************** * required headers: * config.h - *******************************************************************************/ + *****************************************************************************/ -/******************************************************************************* +/***************************************************************************** * Basic types definitions - *******************************************************************************/ - -/* Basic types definitions */ -typedef signed char s8; -typedef signed short s16; -typedef signed int s32; -typedef signed long long s64; -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; -typedef unsigned long long u64; + *****************************************************************************/ + +#include "int_types.h" typedef u8 byte_t; - + /* Boolean type */ +#ifdef BOOLEAN_T_IN_SYS_TYPES_H +# include +#else typedef int boolean_t; +#endif +#ifdef SYS_GNU +# define _MACH_I386_BOOLEAN_H_ +#endif + +/* ptrdiff_t definition */ +#ifdef HAVE_STDDEF_H +# include +#else +# include +# ifndef _PTRDIFF_T +# define _PTRDIFF_T +/* Not portable in a 64-bit environment. */ +typedef int ptrdiff_t; +# endif +#endif /* Counter for statistics and profiling */ typedef unsigned long count_t; -/******************************************************************************* +/* DCT elements types */ +#ifndef VDEC_DFT +typedef short dctelem_t; +#else +typedef int dctelem_t; +#endif + +/***************************************************************************** * Classes declaration - *******************************************************************************/ + *****************************************************************************/ + +/* Plugins */ +struct plugin_bank_s; +struct plugin_info_s; + +typedef struct plugin_bank_s * p_plugin_bank_t; +typedef struct plugin_info_s * p_plugin_info_t; + +/* Playlist */ +struct playlist_s; + +typedef struct playlist_s * p_playlist_t; /* Interface */ struct intf_thread_s; struct intf_sys_s; struct intf_console_s; struct intf_msg_s; +struct intf_channel_s; typedef struct intf_thread_s * p_intf_thread_t; typedef struct intf_sys_s * p_intf_sys_t; typedef struct intf_console_s * p_intf_console_t; typedef struct intf_msg_s * p_intf_msg_t; +typedef struct intf_channel_s * p_intf_channel_t; /* Input */ struct input_thread_s; @@ -56,25 +108,38 @@ typedef struct input_cfg_s * p_input_cfg_t; /* Audio */ struct aout_thread_s; +struct aout_sys_s; typedef struct aout_thread_s * p_aout_thread_t; +typedef struct aout_sys_s * p_aout_sys_t; /* Video */ struct vout_thread_s; +struct vout_font_s; struct vout_sys_s; struct vdec_thread_s; struct vpar_thread_s; struct video_parser_s; typedef struct vout_thread_s * p_vout_thread_t; +typedef struct vout_font_s * p_vout_font_t; typedef struct vout_sys_s * p_vout_sys_t; typedef struct vdec_thread_s * p_vdec_thread_t; typedef struct vpar_thread_s * p_vpar_thread_t; typedef struct video_parser_s * p_video_parser_t; -/******************************************************************************* +/* Misc */ +struct macroblock_s; + +/***************************************************************************** * Macros and inline functions - *******************************************************************************/ + *****************************************************************************/ + +#ifdef NTOHL_IN_SYS_PARAM_H +# include +#else +# include +#endif /* CEIL: division with round to nearest greater integer */ #define CEIL(n, d) ( ((n) / (d)) + ( ((n) % (d)) ? 1 : 0) ) @@ -83,34 +148,62 @@ typedef struct video_parser_s * p_video_parser_t; #define PAD(n, d) ( ((n) % (d)) ? ((((n) / (d)) + 1) * (d)) : (n) ) /* MAX and MIN: self explanatory */ +#ifndef MAX #define MAX(a, b) ( ((a) > (b)) ? (a) : (b) ) +#endif +#ifndef MIN #define MIN(a, b) ( ((a) < (b)) ? (a) : (b) ) +#endif -/* MSB (big endian)/LSB (little endian) convertions - network order is always +/* + * This is stolen from the livid source who stole it from the kernel + */ + +#if defined(SYS_BEOS) +# define swab32(x) B_BENDIAN_TO_HOST_INT32(x) +#else +# ifdef WORDS_BIG_ENDIAN +# define swab32(x) (x) +# else +# if defined (HAVE_X86_BSWAP) +static __inline__ const u32 __i386_swab32( u32 x ) +{ + __asm__("bswap %0" : "=r" (x) : "0" (x)); + return x; +} +# define swab32(x) __i386_swab32(x) +# else +# define swab32(x) \ + ( ( (u32)(((u8*)&x)[0]) << 24 ) | ( (u32)(((u8*)&x)[1]) << 16 ) |\ + ( (u32)(((u8*)&x)[2]) << 8 ) | ( (u32)(((u8*)&x)[3])) ) +# endif +# endif +#endif + +/* MSB (big endian)/LSB (little endian) conversions - network order is always * MSB, and should be used for both network communications and files. Note that * byte orders other than little and big endians are not supported, but only * the VAX seems to have such exotic properties - note that these 'functions' * needs or the local equivalent. */ -/* ?? hton64 should be declared as an extern inline function to avoid border - * effects (see byteorder.h) */ -#if __BYTE_ORDER == __LITTLE_ENDIAN +/* FIXME: hton64 should be declared as an extern inline function to avoid + * border effects (see byteorder.h) */ +#if WORDS_BIGENDIAN #define hton16 htons #define hton32 htonl -#define hton64(i) ( ((u64)(htonl((i) & 0xffffffff)) << 32) | htonl(((i) >> 32) & 0xffffffff ) ) -#define ntoh16 ntohs +#define hton64(i) ( i ) +#define ntoh16 ntohs #define ntoh32 ntohl -#define ntoh64 hton64 -#elif __BYTE_ORDER == __BIG_ENDIAN +#define ntoh64(i) ( i ) +#else #define hton16 htons #define hton32 htonl -#define hton64(i) ( i ) +#define hton64(i) ( ((u64)(htonl((i) & 0xffffffff)) << 32) | htonl(((i) >> 32) & 0xffffffff ) ) #define ntoh16 ntohs #define ntoh32 ntohl -#define ntoh64(i) ( i ) -#else -/* ?? cause a compilation error */ +#define ntoh64 hton64 #endif -/* Macros used by input to access the TS buffer */ -#define U32_AT(p) ( ntohl ( *( (u32 *)(p) ) ) ) +/* Macros with automatic casts */ +#define U32_AT(p) ( swab32 ( *( (u32 *)(p) ) ) ) #define U16_AT(p) ( ntohs ( *( (u16 *)(p) ) ) ) +