X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fvlc_common.h;h=1ca86bdfa81527b57b61ed069f67dfcbcc6dc8e4;hb=0afa4317178d8585ea7ee74bfc8c17b0dd7fddbb;hp=876ef24697555279d4eb2a484a642348863232ba;hpb=5b165b7369efb2c31466e0ed0a120ef16a838cc6;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index 876ef24697..1ca86bdfa8 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.69 2003/07/23 21:45:13 hartman Exp $ + * $Id$ * * Authors: Samuel Hocevar * Vincent Seguin @@ -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 *****************************************************************************/ @@ -38,6 +43,8 @@ # undef HAVE_STDINT_H # undef HAVE_INTTYPES_H # undef off_t +#elif defined( _MSC_VER ) +# pragma warning( disable : 4244 ) #endif #include "vlc_config.h" @@ -46,6 +53,9 @@ /***************************************************************************** * Required system headers *****************************************************************************/ +#include +#include + #ifdef HAVE_STRING_H # include /* strerror() */ #endif @@ -85,6 +95,8 @@ typedef unsigned long long uint64_t; typedef signed long long int64_t; # endif + typedef uint32_t uintptr_t; + typedef int32_t intptr_t; #endif typedef uint8_t byte_t; @@ -103,10 +115,12 @@ typedef int ptrdiff_t; #if defined( WIN32 ) # include -#define PATH_MAX MAX_PATH +# ifndef PATH_MAX +# define PATH_MAX MAX_PATH +# endif #endif -#if defined( WIN32 ) || defined( UNDER_CE ) +#if (defined( WIN32 ) || defined( UNDER_CE )) && !defined( _SSIZE_T_ ) typedef int ssize_t; #endif @@ -126,39 +140,23 @@ typedef uint16_t audio_volume_t; typedef int socklen_t; #endif -/***************************************************************************** - * Old types definitions - ***************************************************************************** - * We still provide these types because most of the VLC code uses them - * instead of the C9x types. They should be removed when the transition is - * complete (probably in 10 years). - *****************************************************************************/ -typedef uint8_t u8; -typedef int8_t s8; -typedef uint16_t u16; -typedef int16_t s16; -typedef uint32_t u32; -typedef int32_t s32; -typedef uint64_t u64; -typedef int64_t s64; - -/***************************************************************************** - * mtime_t: high precision date or time interval - ***************************************************************************** +/** + * High precision date or time interval + * * Store a high precision date or time interval. The maximum precision is the * microsecond, and a 64 bits integer is used to avoid overflows (maximum * time interval is then 292271 years, which should be long enough for any * video). Dates are stored as microseconds since a common date (usually the * epoch). Note that date and time intervals can be manipulated using regular * arithmetic operators, and that no special functions are required. - *****************************************************************************/ + */ typedef int64_t mtime_t; -/***************************************************************************** +/** * The vlc_fourcc_t type. - ***************************************************************************** + * * See http://www.webartz.com/fourcc/ for a very detailed list. - *****************************************************************************/ + */ typedef uint32_t vlc_fourcc_t; #ifdef WORDS_BIGENDIAN @@ -193,6 +191,10 @@ typedef struct msg_subscription_t msg_subscription_t; /* Playlist */ typedef struct playlist_t playlist_t; typedef struct playlist_item_t playlist_item_t; +typedef struct playlist_group_t playlist_group_t; +typedef struct item_info_t item_info_t; +typedef struct item_info_category_t item_info_category_t; +typedef struct playlist_export_t playlist_export_t; /* Modules */ typedef struct module_bank_t module_bank_t; @@ -209,7 +211,7 @@ typedef struct intf_channel_t intf_channel_t; /* Input */ typedef struct input_thread_t input_thread_t; -typedef struct input_channel_t input_channel_t; +typedef struct input_thread_sys_t input_thread_sys_t; typedef struct input_area_t input_area_t; typedef struct input_buffers_t input_buffers_t; typedef struct input_socket_t input_socket_t; @@ -222,7 +224,21 @@ typedef struct es_sys_t es_sys_t; typedef struct pgrm_descriptor_t pgrm_descriptor_t; typedef struct pgrm_sys_t pgrm_sys_t; typedef struct stream_descriptor_t stream_descriptor_t; + +/* Format */ +typedef struct audio_format_t audio_format_t; +typedef struct video_format_t video_format_t; +typedef struct subs_format_t subs_format_t; +typedef struct es_format_t es_format_t; +typedef struct video_palette_t video_palette_t; + +/* NInput */ typedef struct stream_sys_t stream_sys_t; +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; +typedef struct demux_t demux_t; /* Audio */ typedef struct aout_instance_t aout_instance_t; @@ -230,14 +246,15 @@ typedef struct aout_sys_t aout_sys_t; typedef struct aout_fifo_t aout_fifo_t; typedef struct aout_input_t aout_input_t; typedef struct aout_buffer_t aout_buffer_t; -typedef struct audio_sample_format_t audio_sample_format_t; +typedef audio_format_t audio_sample_format_t; typedef struct audio_date_t audio_date_t; +typedef struct aout_filter_t aout_filter_t; /* Video */ typedef struct vout_thread_t vout_thread_t; -typedef struct vout_font_t vout_font_t; typedef struct vout_sys_t vout_sys_t; typedef struct chroma_sys_t chroma_sys_t; +typedef video_format_t video_frame_format_t; typedef struct picture_t picture_t; typedef struct picture_sys_t picture_sys_t; typedef struct picture_heap_t picture_heap_t; @@ -257,10 +274,16 @@ 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 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; + +/* Encoders */ +typedef struct encoder_t encoder_t; +typedef struct encoder_sys_t encoder_sys_t; /* Misc */ typedef struct data_packet_t data_packet_t; @@ -268,10 +291,31 @@ typedef struct data_buffer_t data_buffer_t; typedef struct stream_position_t stream_position_t; typedef struct stream_ctrl_t stream_ctrl_t; typedef struct pes_packet_t pes_packet_t; -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; + +/* httpd */ +typedef struct httpd_t httpd_t; +typedef struct httpd_host_t httpd_host_t; +typedef struct httpd_url_t httpd_url_t; +typedef struct httpd_client_t httpd_client_t; +typedef struct httpd_callback_sys_t httpd_callback_sys_t; +typedef struct httpd_message_t httpd_message_t; +typedef int (*httpd_callback_t)( httpd_callback_sys_t *, httpd_client_t *, httpd_message_t *answer, httpd_message_t *query ); +typedef struct httpd_file_t httpd_file_t; +typedef struct httpd_file_sys_t httpd_file_sys_t; +typedef int (*httpd_file_callback_t)( httpd_file_sys_t*, httpd_file_t *, uint8_t *psz_request, uint8_t **pp_data, int *pi_data ); +typedef struct httpd_redirect_t httpd_redirect_t; +typedef struct httpd_stream_t httpd_stream_t; + +/* divers */ +typedef struct vlc_meta_t vlc_meta_t; + + /***************************************************************************** * Variable callbacks *****************************************************************************/ @@ -427,22 +471,69 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ while( 0 ) +#define TAB_APPEND( count, tab, p ) \ + if( (count) > 0 ) \ + { \ + (void *)(tab) = realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \ + } \ + else \ + { \ + (void *)(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* ) );\ + } \ + (count)--; \ + if( (count) == 0 ) \ + { \ + free( tab ); \ + (tab) = NULL; \ + } \ + } \ + } + /* 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. */ -static inline uint16_t U16_AT( void * _p ) +static inline uint16_t U16_AT( void const * _p ) { uint8_t * p = (uint8_t *)_p; return ( ((uint16_t)p[0] << 8) | p[1] ); } -static inline uint32_t U32_AT( void * _p ) +static inline uint32_t U32_AT( void const * _p ) { uint8_t * p = (uint8_t *)_p; return ( ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16) | ((uint32_t)p[2] << 8) | p[3] ); } -static inline uint64_t U64_AT( void * _p ) +static inline uint64_t U64_AT( void const * _p ) { uint8_t * p = (uint8_t *)_p; return ( ((uint64_t)p[0] << 56) | ((uint64_t)p[1] << 48) @@ -450,6 +541,55 @@ 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 const * _p ) +{ + uint8_t * p = (uint8_t *)_p; + return ( ((uint16_t)p[1] << 8) | p[0] ); +} +static inline uint32_t GetDWLE( void const * _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 const * _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 ) + +/* Helper writer functions */ + +#define SetWLE( p, v ) _SetWLE( (uint8_t*)p, v) +static inline void _SetWLE( uint8_t *p, uint16_t i_dw ) +{ + p[1] = ( i_dw >> 8 )&0xff; + p[0] = ( i_dw )&0xff; +} + +#define SetDWLE( p, v ) _SetDWLE( (uint8_t*)p, v) +static inline void _SetDWLE( uint8_t *p, uint32_t i_dw ) +{ + p[3] = ( i_dw >> 24 )&0xff; + p[2] = ( i_dw >> 16 )&0xff; + p[1] = ( i_dw >> 8 )&0xff; + p[0] = ( i_dw )&0xff; +} +#define SetQWLE( p, v ) _SetQWLE( (uint8_t*)p, v) +static inline void _SetQWLE( uint8_t *p, uint64_t i_qw ) +{ + SetDWLE( p, i_qw&0xffffffff ); + SetDWLE( p+4, ( i_qw >> 32)&0xffffffff ); +} + #if WORDS_BIGENDIAN # define hton16(i) ( i ) # define hton32(i) ( i ) @@ -516,6 +656,20 @@ static inline uint64_t U64_AT( void * _p ) # define vlc_strdup NULL #endif +#if !defined(HAVE_VASPRINTF) || defined(SYS_DARWIN) || defined(SYS_BEOS) +# define vasprintf vlc_vasprintf + VLC_EXPORT( int, vlc_vasprintf, (char **, const char *, va_list ) ); +#elif !defined(__PLUGIN__) +# define vlc_vasprintf NULL +#endif + +#if !defined(HAVE_ASPRINTF) || defined(SYS_DARWIN) || defined(SYS_BEOS) +# define asprintf vlc_asprintf + VLC_EXPORT( int, vlc_asprintf, (char **, const char *, ... ) ); +#elif !defined(__PLUGIN__) +# define vlc_asprintf NULL +#endif + #ifndef HAVE_STRNDUP # if defined(STRNDUP_IN_GNOME_H) && \ (defined(MODULE_NAME_IS_gnome)||defined(MODULE_NAME_IS_gnome_main)||\ @@ -536,6 +690,13 @@ static inline uint64_t U64_AT( void * _p ) # 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 + #ifndef HAVE_GETENV # define getenv vlc_getenv VLC_EXPORT( char *, vlc_getenv, ( const char *name ) ); @@ -591,8 +752,10 @@ static inline uint64_t U64_AT( void * _p ) /* 64 bits integer constant suffix */ #if defined( __MINGW32__ ) || (!defined(WIN32) && !defined(UNDER_CE)) # define I64C(x) x##LL +# define UI64C(x) x##ULL #else # define I64C(x) x##i64 +# define UI64C(x) x##ui64 #endif /* defined(WIN32)||defined(UNDER_CE) */ #if defined(WIN32) || defined(UNDER_CE) @@ -661,6 +824,10 @@ typedef __int64 off_t; # define vlc_lseek NULL #endif +/* vlc_wraptext (defined in src/extras/libc.c) */ +#define wraptext vlc_wraptext +VLC_EXPORT( char *, vlc_wraptext, ( const char *, int, vlc_bool_t ) ); + /***************************************************************************** * CPU capabilities *****************************************************************************/ @@ -672,6 +839,7 @@ typedef __int64 off_t; #define CPU_CAPABILITY_3DNOW (1<<4) #define CPU_CAPABILITY_MMXEXT (1<<5) #define CPU_CAPABILITY_SSE (1<<6) +#define CPU_CAPABILITY_SSE2 (1<<7) #define CPU_CAPABILITY_ALTIVEC (1<<16) #define CPU_CAPABILITY_FPU (1<<31) @@ -682,7 +850,8 @@ 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)) + defined(MODULE_NAME_IS_gnome2)||defined(MODULE_NAME_IS_gnome2_main)||\ + defined(MODULE_NAME_IS_pda)) /* Declare nothing: gnome.h will do it for us */ #elif defined( ENABLE_NLS ) #if defined( HAVE_INCLUDED_GETTEXT )