X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=inline;f=include%2Fcommon.h;h=a826869597697889ca687b281bacf1eddb442312;hb=31d966e00b3587fc620cacce8554ca95ded60529;hp=8861aee6075c8cb91c0281654c45df54d685a936;hpb=1a1ae383ad396a69373a8cf3b41ad6a5f3b8b822;p=vlc diff --git a/include/common.h b/include/common.h index 8861aee607..a826869597 100644 --- a/include/common.h +++ b/include/common.h @@ -1,80 +1,148 @@ -/******************************************************************************* +/***************************************************************************** * 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.28 2001/02/08 07:24:25 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; + +/* Plugins */ +struct playlist_s; +struct playlist_item_s; + +typedef struct playlist_s * p_playlist_t; +typedef struct playlist_item_s * p_playlist_item_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; -struct input_vlan_method_s; +struct input_vlan_s; struct input_cfg_s; typedef struct input_thread_s * p_input_thread_t; -typedef struct input_vlan_method_s * p_input_vlan_method_t; +typedef struct input_vlan_s * p_input_vlan_t; 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; +struct data_packet_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 +151,38 @@ 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 +/* 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) ) ) ) -#define U16_AT(p) ( ntohs ( *( (u16 *)(p) ) ) ) +/* Macros with automatic casts */ +#define U64_AT(p) ( ntoh64 ( *( (u64 *)(p) ) ) ) +#define U32_AT(p) ( ntoh32 ( *( (u32 *)(p) ) ) ) +#define U16_AT(p) ( ntoh16 ( *( (u16 *)(p) ) ) ) +