X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_common.h;h=506a3341f47cdc941a1706a1662373adc4ed864b;hb=a1b3ffaedfc8e91a6e8146790204091601f4a70f;hp=00e3badf94bbf2a75c4874e9b9f85ddce0432268;hpb=5de3e045e3d5cae53d526d2c6898926a7f1e43c9;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index 00e3badf94..506a3341f4 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -3,7 +3,7 @@ * Collection of useful common types and macros definitions ***************************************************************************** * Copyright (C) 1998, 1999, 2000 VideoLAN - * $Id: vlc_common.h,v 1.38 2002/11/13 15:28:24 sam Exp $ + * $Id: vlc_common.h,v 1.80 2003/09/21 10:23:59 gbazin Exp $ * * Authors: Samuel Hocevar * Vincent Seguin @@ -13,7 +13,7 @@ * 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 @@ -24,6 +24,11 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ +/** + * \file + * This file is a collection of common definitions and types + */ + /***************************************************************************** * Required vlc headers *****************************************************************************/ @@ -36,6 +41,8 @@ #if defined( __BORLANDC__ ) # undef HAVE_VARIADIC_MACROS # undef HAVE_STDINT_H +# undef HAVE_INTTYPES_H +# undef off_t #endif #include "vlc_config.h" @@ -44,6 +51,8 @@ /***************************************************************************** * Required system headers *****************************************************************************/ +#include + #ifdef HAVE_STRING_H # include /* strerror() */ #endif @@ -99,7 +108,12 @@ typedef int ptrdiff_t; # endif #endif -#if defined( WIN32 ) || defined( UNDER_CE ) +#if defined( WIN32 ) +# include +#define PATH_MAX MAX_PATH +#endif + +#if (defined( WIN32 ) || defined( UNDER_CE )) && !defined( _SSIZE_T_ ) typedef int ssize_t; #endif @@ -115,6 +129,10 @@ typedef uint8_t yuv_data_t; /* Audio volume */ typedef uint16_t audio_volume_t; +#ifndef HAVE_SOCKLEN_T +typedef int socklen_t; +#endif + /***************************************************************************** * Old types definitions ***************************************************************************** @@ -173,8 +191,6 @@ typedef uint32_t vlc_fourcc_t; /* Internal types */ typedef struct libvlc_t libvlc_t; typedef struct vlc_t vlc_t; -typedef struct vlc_list_t vlc_list_t; -typedef struct vlc_object_t vlc_object_t; typedef struct variable_t variable_t; /* Messages */ @@ -200,6 +216,7 @@ typedef struct intf_channel_t intf_channel_t; /* Input */ typedef struct input_thread_t input_thread_t; +typedef struct input_thread_sys_t input_thread_sys_t; typedef struct input_channel_t input_channel_t; typedef struct input_area_t input_area_t; typedef struct input_buffers_t input_buffers_t; @@ -215,6 +232,13 @@ typedef struct pgrm_sys_t pgrm_sys_t; typedef struct stream_descriptor_t stream_descriptor_t; typedef struct stream_sys_t stream_sys_t; +/* NInput */ +typedef struct stream_t stream_t; +typedef struct es_out_t es_out_t; +typedef struct es_out_id_t es_out_id_t; +typedef struct es_out_sys_t es_out_sys_t; + + /* Audio */ typedef struct aout_instance_t aout_instance_t; typedef struct aout_sys_t aout_sys_t; @@ -234,13 +258,28 @@ typedef struct picture_sys_t picture_sys_t; typedef struct picture_heap_t picture_heap_t; typedef struct subpicture_t subpicture_t; typedef struct subpicture_sys_t subpicture_sys_t; +typedef struct vout_synchro_t vout_synchro_t; +typedef struct text_renderer_sys_t text_renderer_sys_t; +typedef struct text_style_t text_style_t; /* Stream output */ typedef struct sout_instance_t sout_instance_t; typedef struct sout_fifo_t sout_fifo_t; +typedef struct sout_input_t sout_input_t; +typedef struct sout_packetizer_input_t sout_packetizer_input_t; +typedef struct sout_buffer_t sout_buffer_t; +typedef struct sout_access_out_t sout_access_out_t; +typedef struct sout_mux_t sout_mux_t; +typedef struct sout_stream_t sout_stream_t; +typedef struct sout_cfg_t sout_cfg_t; +typedef struct sout_format_t sout_format_t; +/*typedef struct sap_session_t sap_session_t; +typedef struct slp_session_t slp_session_t;*/ /* Decoders */ typedef struct decoder_fifo_t decoder_fifo_t; +typedef struct decoder_t decoder_t; +typedef struct decoder_sys_t decoder_sys_t; /* Misc */ typedef struct data_packet_t data_packet_t; @@ -252,6 +291,10 @@ typedef struct bit_stream_t bit_stream_t; typedef struct network_socket_t network_socket_t; typedef struct iso639_lang_t iso639_lang_t; +/* block */ +typedef struct block_t block_t; +typedef struct block_fifo_t block_fifo_t; + /***************************************************************************** * Variable callbacks *****************************************************************************/ @@ -277,6 +320,7 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ #if defined( WIN32 ) || defined( UNDER_CE ) # define WIN32_LEAN_AND_MEAN # include +# define IS_WINNT ( GetVersion() < 0x80000000 ) #endif #include "vlc_threads.h" @@ -287,6 +331,10 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ /* VLC_COMMON_MEMBERS : members common to all basic vlc objects */ #define VLC_COMMON_MEMBERS \ +/** \name VLC_COMMON_MEMBERS \ + * these members are common for all vlc objects \ + */ \ +/**@{*/ \ int i_object_id; \ int i_object_type; \ char *psz_object_type; \ @@ -301,10 +349,10 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ vlc_cond_t object_wait; \ \ /* Object properties */ \ - volatile vlc_bool_t b_error; /* set by the object */ \ - volatile vlc_bool_t b_die; /* set by the outside */ \ - volatile vlc_bool_t b_dead; /* set by the object */ \ - volatile vlc_bool_t b_attached; /* set by the object */ \ + volatile vlc_bool_t b_error; /**< set by the object */ \ + volatile vlc_bool_t b_die; /**< set by the outside */ \ + volatile vlc_bool_t b_dead; /**< set by the object */ \ + volatile vlc_bool_t b_attached; /**< set by the object */ \ \ /* Object variables */ \ vlc_mutex_t var_lock; \ @@ -312,19 +360,20 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ variable_t * p_vars; \ \ /* Stuff related to the libvlc structure */ \ - libvlc_t * p_libvlc; /* root of all evil */ \ - vlc_t * p_vlc; /* (root of all evil) - 1 */ \ + libvlc_t * p_libvlc; /**< root of all evil */ \ + vlc_t * p_vlc; /**< (root of all evil) - 1 */ \ \ - volatile int i_refcount; /* usage count */ \ - vlc_object_t * p_parent; /* our parent */ \ - vlc_object_t ** pp_children; /* our children */ \ + volatile int i_refcount; /**< usage count */ \ + vlc_object_t * p_parent; /**< our parent */ \ + vlc_object_t ** pp_children; /**< our children */ \ volatile int i_children; \ \ /* Private data */ \ void * p_private; \ \ - /* Just a reminder so that people don't cast garbage */ \ + /** Just a reminder so that people don't cast garbage */ \ int be_sure_to_add_VLC_COMMON_MEMBERS_to_struct; \ +/**@}*/ \ /* VLC_OBJECT: attempt at doing a clever cast */ #define VLC_OBJECT( x ) \ @@ -367,9 +416,12 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ { \ (p_ar) = malloc( ((i_oldsize) + 1) * sizeof( *(p_ar) ) ); \ } \ - memmove( (p_ar) + (i_pos) + 1, \ - (p_ar) + (i_pos), \ - ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \ + if( (i_oldsize) - (i_pos) ) \ + { \ + memmove( (p_ar) + (i_pos) + 1, \ + (p_ar) + (i_pos), \ + ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \ + } \ (p_ar)[i_pos] = elem; \ (i_oldsize)++; \ } \ @@ -378,9 +430,12 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ #define REMOVE_ELEM( p_ar, i_oldsize, i_pos ) \ do \ { \ - memmove( (p_ar) + (i_pos), \ - (p_ar) + (i_pos) + 1, \ - ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \ + if( (i_oldsize) - (i_pos) - 1 ) \ + { \ + memmove( (p_ar) + (i_pos), \ + (p_ar) + (i_pos) + 1, \ + ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \ + } \ if( i_oldsize > 1 ) \ { \ (p_ar) = realloc( p_ar, ((i_oldsize) - 1) * sizeof( *(p_ar) ) ); \ @@ -395,6 +450,53 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ while( 0 ) +#define TAB_APPEND( count, tab, p ) \ + if( (count) > 0 ) \ + { \ + (tab) = realloc( (tab), sizeof( void ** ) * ( (count) + 1 ) ); \ + } \ + else \ + { \ + (tab) = malloc( sizeof( void ** ) ); \ + } \ + (void**)(tab)[(count)] = (void*)(p); \ + (count)++ + +#define TAB_FIND( count, tab, p, index ) \ + { \ + int _i_; \ + (index) = -1; \ + for( _i_ = 0; _i_ < (count); _i_++ ) \ + { \ + if((void**)(tab)[_i_]==(void*)(p)) \ + { \ + (index) = _i_; \ + break; \ + } \ + } \ + } + +#define TAB_REMOVE( count, tab, p ) \ + { \ + int _i_index_; \ + TAB_FIND( count, tab, p, _i_index_ ); \ + if( _i_index_ >= 0 ) \ + { \ + if( (count) > 1 ) \ + { \ + memmove( ((void**)(tab) + _i_index_), \ + ((void**)(tab) + _i_index_+1), \ + ( (count) - _i_index_ - 1 ) * sizeof( void* ) );\ + } \ + else \ + { \ + free( tab ); \ + (tab) = NULL; \ + } \ + (count)--; \ + } \ + } + /* 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 @@ -418,6 +520,32 @@ static inline uint64_t U64_AT( void * _p ) | ((uint64_t)p[4] << 24) | ((uint64_t)p[5] << 16) | ((uint64_t)p[6] << 8) | p[7] ); } + +static inline uint16_t GetWLE( void * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint16_t)p[1] << 8) | p[0] ); +} +static inline uint32_t GetDWLE( void * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint32_t)p[3] << 24) | ((uint32_t)p[2] << 16) + | ((uint32_t)p[1] << 8) | p[0] ); +} +static inline uint64_t GetQWLE( void * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint64_t)p[7] << 56) | ((uint64_t)p[6] << 48) + | ((uint64_t)p[5] << 40) | ((uint64_t)p[4] << 32) + | ((uint64_t)p[3] << 24) | ((uint64_t)p[2] << 16) + | ((uint64_t)p[1] << 8) | p[0] ); +} + +#define GetWBE( p ) U16_AT( p ) +#define GetDWBE( p ) U32_AT( p ) +#define GetQWBE( p ) U64_AT( p ) + + #if WORDS_BIGENDIAN # define hton16(i) ( i ) # define hton32(i) ( i ) @@ -434,6 +562,13 @@ static inline uint64_t U64_AT( void * _p ) # define ntoh64(i) U64_AT(&i) #endif +/* Format string sanity checks */ +#ifdef HAVE_ATTRIBUTE_FORMAT +# define ATTRIBUTE_FORMAT(x,y) __attribute__ ((format(printf,x,y))) +#else +# define ATTRIBUTE_FORMAT(x,y) +#endif + /* Alignment of critical static data structures */ #ifdef ATTRIBUTE_ALIGNED_MAX # define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align))) @@ -469,39 +604,74 @@ static inline uint64_t U64_AT( void * _p ) #endif -/* strdup/strndup (defined in src/extras/libc.c) */ +/* Stuff defined in src/extras/libc.c */ #ifndef HAVE_STRDUP - char * strdup( const char *s ); +# define strdup vlc_strdup + VLC_EXPORT( char *, vlc_strdup, ( const char *s ) ); +#elif !defined(__PLUGIN__) +# define vlc_strdup NULL #endif + #ifndef HAVE_STRNDUP - char * strndup( const char *s, size_t n ); +# if defined(STRNDUP_IN_GNOME_H) && \ + (defined(MODULE_NAME_IS_gnome)||defined(MODULE_NAME_IS_gnome_main)||\ + defined(MODULE_NAME_IS_gnome2)||defined(MODULE_NAME_IS_gnome2_main)) + /* Do nothing: gnome.h defines strndup for us */ +# else +# define strndup vlc_strndup + VLC_EXPORT( char *, vlc_strndup, ( const char *s, size_t n ) ); +# endif +#elif !defined(__PLUGIN__) +# define vlc_strndup NULL #endif -/* atof (defined in src/extras/libc.c) */ #ifndef HAVE_ATOF - double atof( const char *nptr ); +# define atof vlc_atof + VLC_EXPORT( double, vlc_atof, ( const char *nptr ) ); +#elif !defined(__PLUGIN__) +# define vlc_atof NULL +#endif + +#ifndef HAVE_ATOLL +# define atoll vlc_atoll + VLC_EXPORT( int64_t, vlc_atoll, ( const char *nptr ) ); +#elif !defined(__PLUGIN__) +# define vlc_atoll NULL #endif -/* getenv - always returns NULL */ #ifndef HAVE_GETENV - char *getenv( const char *name ); +# define getenv vlc_getenv + VLC_EXPORT( char *, vlc_getenv, ( const char *name ) ); +#elif !defined(__PLUGIN__) +# define vlc_getenv NULL #endif -/* strncasecmp/strcasecmp (defined in src/extras/libc.c) */ #ifndef HAVE_STRCASECMP # ifdef HAVE_STRICMP # define strcasecmp stricmp -# else - int strcasecmp( const char *s1, const char *s2 ); +# if !defined(__PLUGIN__) +# define vlc_strcasecmp NULL +# endif +# elif !defined(__PLUGIN__) +# define strcasecmp vlc_strcasecmp + VLC_EXPORT( int, vlc_strcasecmp, ( const char *s1, const char *s2 ) ); # endif +#elif !defined(__PLUGIN__) +# define vlc_strcasecmp NULL #endif #ifndef HAVE_STRNCASECMP # ifdef HAVE_STRNICMP # define strncasecmp strnicmp -# else - int strncasecmp( const char *s1, const char *s2, size_t n ); +# if !defined(__PLUGIN__) +# define vlc_strncasecmp NULL +# endif +# elif !defined(__PLUGIN__) +# define strncasecmp vlc_strncasecmp + VLC_EXPORT( int, vlc_strncasecmp, ( const char *s1, const char *s2, size_t n ) ); # endif +#elif !defined(__PLUGIN__) +# define vlc_strncasecmp NULL #endif /* Format type specifiers for 64 bits numbers */ @@ -522,7 +692,7 @@ static inline uint64_t U64_AT( void * _p ) #endif /* defined(WIN32)||defined(UNDER_CE) */ /* 64 bits integer constant suffix */ -#if !defined(WIN32) && !defined(UNDER_CE) +#if defined( __MINGW32__ ) || (!defined(WIN32) && !defined(UNDER_CE)) # define I64C(x) x##LL #else # define I64C(x) x##i64 @@ -547,6 +717,9 @@ typedef long long _off_t; typedef _off_t off_t; # define _OFF_T_ # else +# ifdef off_t +# undef off_t +# endif # define off_t long long # endif # endif @@ -567,6 +740,10 @@ typedef __int64 off_t; # ifndef O_NONBLOCK # define O_NONBLOCK 0 +# endif + +# ifndef alloca +# define alloca _alloca # endif /* These two are not defined in mingw32 (bug?) */ @@ -581,7 +758,10 @@ typedef __int64 off_t; /* lseek (defined in src/extras/libc.c) */ #ifndef HAVE_LSEEK - off_t lseek( int fildes, off_t offset, int whence ); +# define lseek vlc_lseek + VLC_EXPORT( off_t, vlc_lseek, ( int fildes, off_t offset, int whence ) ); +#elif !defined(__PLUGIN__) +# define vlc_lseek NULL #endif /***************************************************************************** @@ -601,19 +781,28 @@ typedef __int64 off_t; /***************************************************************************** * I18n stuff *****************************************************************************/ -#if defined( ENABLE_NLS ) \ - && ( defined(HAVE_GETTEXT) || defined(HAVE_INCLUDED_GETTEXT) ) +VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) ); + +#if defined( ENABLE_NLS ) && \ + (defined(MODULE_NAME_IS_gnome)||defined(MODULE_NAME_IS_gnome_main)||\ + defined(MODULE_NAME_IS_gnome2)||defined(MODULE_NAME_IS_gnome2_main)) + /* Declare nothing: gnome.h will do it for us */ +#elif defined( ENABLE_NLS ) +#if defined( HAVE_INCLUDED_GETTEXT ) +# include "libintl.h" +#else # include +#endif # undef _ -# define _(String) dgettext (PACKAGE, String) -# ifdef gettext_noop -# define N_(String) gettext_noop (String) -# else -# define N_(String) (String) -# endif -#elif !defined( NEED_GNOMESUPPORT_H ) -# define _(String) (String) -# define N_(String) (String) +#if defined( __BORLANDC__ ) +#define _(String) vlc_dgettext (PACKAGE_TARNAME, String) +#else +# define _(String) vlc_dgettext (PACKAGE, String) +#endif +# define N_(String) ((char*)(String)) +#else +# define _(String) ((char*)(String)) +# define N_(String) ((char*)(String)) #endif /*****************************************************************************