X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_common.h;h=b00424a3d4ed38bffc3184cf71b603f37f89cf21;hb=22053c46a80be0c28a9e07730bc9888b14618503;hp=2a7330d148194b5ddcaf9924f7563105143d5137;hpb=11884b884c536d7f6305ff3459f630bb458ebda2;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index 2a7330d148..b00424a3d4 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -64,9 +64,8 @@ #include #include -#ifdef HAVE_STRING_H -# include /* strerror() */ -#endif +#include +#include #ifdef HAVE_SYS_TYPES_H # include @@ -192,6 +191,24 @@ typedef uint32_t vlc_fourcc_t; #endif +static inline void __vlc_fourcc_to_char( vlc_fourcc_t fcc, char *psz_fourcc ) +{ +#ifdef WORDS_BIGENDIAN + psz_fourcc[0] = (uint32_t) (fcc >> 24); + psz_fourcc[1] = (uint32_t) (fcc >> 16); + psz_fourcc[2] = (uint32_t) (fcc >> 8); + psz_fourcc[3] = (uint32_t) (fcc); +#else + psz_fourcc[3] = (uint32_t) (fcc >> 24); + psz_fourcc[2] = (uint32_t) (fcc >> 16); + psz_fourcc[1] = (uint32_t) (fcc >> 8); + psz_fourcc[0] = (uint32_t) (fcc); +#endif +} + +#define vlc_fourcc_to_char( a, b ) \ + __vlc_fourcc_to_char( (vlc_fourcc_t)(a), (char *)(b) ) + /***************************************************************************** * Classes declaration *****************************************************************************/ @@ -264,6 +281,7 @@ typedef struct access_sys_t access_sys_t; typedef struct stream_t stream_t; typedef struct stream_sys_t stream_sys_t; typedef struct demux_t demux_t; +typedef struct demux_meta_t demux_meta_t; typedef struct demux_sys_t demux_sys_t; typedef struct es_out_t es_out_t; typedef struct es_out_id_t es_out_id_t; @@ -272,6 +290,7 @@ typedef struct es_descriptor_t es_descriptor_t; typedef struct seekpoint_t seekpoint_t; typedef struct info_t info_t; typedef struct info_category_t info_category_t; +typedef struct input_attachment_t input_attachment_t; /* Format */ typedef struct audio_format_t audio_format_t; @@ -293,7 +312,6 @@ typedef struct aout_filter_t aout_filter_t; /* Video */ typedef struct vout_thread_t vout_thread_t; typedef struct vout_sys_t vout_sys_t; -typedef struct vout_synchro_t vout_synchro_t; typedef struct chroma_sys_t chroma_sys_t; typedef video_format_t video_frame_format_t; @@ -347,8 +365,9 @@ typedef struct sout_gui_descr_t sout_gui_descr_t; typedef struct profile_parser_t profile_parser_t; /* Decoders */ -typedef struct decoder_t decoder_t; -typedef struct decoder_sys_t decoder_sys_t; +typedef struct decoder_t decoder_t; +typedef struct decoder_sys_t decoder_sys_t; +typedef struct decoder_synchro_t decoder_synchro_t; /* Encoders */ typedef struct encoder_t encoder_t; @@ -382,7 +401,7 @@ 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 int (*httpd_callback_t)( httpd_callback_sys_t *, httpd_client_t *, httpd_message_t *answer, const 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 ); @@ -393,7 +412,6 @@ typedef struct httpd_redirect_t httpd_redirect_t; typedef struct httpd_stream_t httpd_stream_t; /* TLS support */ -typedef struct tls_t tls_t; typedef struct tls_server_t tls_server_t; typedef struct tls_session_t tls_session_t; @@ -472,42 +490,40 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ #if defined (WIN32) && defined (DLL_EXPORT) # ifdef __cplusplus -# define VLC_PUBLIC_API __declspec(dllexport) +# define VLC_PUBLIC_API __declspec(dllexport) +# define VLC_PRIVATE_API __declspec(dllexport) # define VLC_EXPORT( type, name, args ) extern "C" __declspec(dllexport) type name args # define VLC_INTERNAL( type, name, args ) extern "C" type name args # else -# define VLC_PUBLIC_API extern __declspec(dllexport) +# define VLC_PUBLIC_API extern __declspec(dllexport) +# define VLC_PRIVATE_API extern __declspec(dllexport) # define VLC_EXPORT( type, name, args ) __declspec(dllexport) type name args # define VLC_INTERNAL( type, name, args ) type name args # endif #else -# if !defined (__PLUGIN__) || defined (HAVE_SHARED_LIBVLC) -# ifdef __cplusplus -# if HAVE_ATTRIBUTE_VISIBILITY -# define VLC_PUBLIC_API __attribute__((visibility("default"))) -# define VLC_EXPORT( type, name, args ) extern "C" __attribute__((visibility("default"))) type name args -# define VLC_INTERNAL( type, name, args ) extern "C" __attribute__((visibility("hidden"))) type name args -# else -# define VLC_PUBLIC_API -# define VLC_EXPORT( type, name, args ) extern "C" type name args -# define VLC_INTERNAL( type, name, args ) extern "C" type name args -# endif +# ifdef __cplusplus +# if HAVE_ATTRIBUTE_VISIBILITY +# define VLC_PUBLIC_API __attribute__((visibility("default"))) +# define VLC_PRIVATE_API __attribute__((visibility("default"))) +# define VLC_EXPORT( type, name, args ) extern "C" __attribute__((visibility("default"))) type name args +# define VLC_INTERNAL( type, name, args ) extern "C" __attribute__((visibility("hidden"))) type name args # else -# if HAVE_ATTRIBUTE_VISIBILITY -# define VLC_PUBLIC_API extern __attribute__((visibility("default"))) -# define VLC_EXPORT( type, name, args ) __attribute__((visibility("default"))) type name args -# define VLC_INTERNAL( type, name, args ) __attribute__((visibility("hidden"))) type name args -# else -# define VLC_PUBLIC_API extern -# define VLC_EXPORT( type, name, args ) type name args -# define VLC_INTERNAL( type, name, args ) type name args -# endif +# define VLC_PUBLIC_API +# define VLC_EXPORT( type, name, args ) extern "C" type name args +# define VLC_INTERNAL( type, name, args ) extern "C" type name args # endif # else -# define VLC_PUBLIC_API -# define VLC_EXPORT( type, name, args ) struct _u_n_u_s_e_d_ -# define VLC_INTERNAL( type, name, args ) struct _u_n_u_s_e_d_ - extern module_symbols_t* p_symbols; +# if HAVE_ATTRIBUTE_VISIBILITY +# define VLC_PUBLIC_API extern __attribute__((visibility("default"))) +# define VLC_PRIVATE_API extern __attribute__((visibility("default"))) +# define VLC_EXPORT( type, name, args ) __attribute__((visibility("default"))) type name args +# define VLC_INTERNAL( type, name, args ) __attribute__((visibility("hidden"))) type name args +# else +# define VLC_PUBLIC_API extern +# define VLC_PRIVATE_API extern +# define VLC_EXPORT( type, name, args ) type name args +# define VLC_INTERNAL( type, name, args ) type name args +# endif # endif #endif @@ -526,6 +542,8 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ #include "vlc_threads.h" +typedef struct vlc_object_internals_t vlc_object_internals_t; + /***************************************************************************** * Common structure members *****************************************************************************/ @@ -536,6 +554,7 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ * these members are common for all vlc objects \ */ \ /**@{*/ \ + vlc_object_internals_t *p_internals; \ int i_object_id; \ int i_object_type; \ const char *psz_object_type; \ @@ -545,10 +564,6 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ char *psz_header; \ int i_flags; \ \ - /* Thread properties, if any */ \ - vlc_bool_t b_thread; \ - vlc_thread_t thread_id; \ - \ /* Object access lock */ \ vlc_mutex_t object_lock; \ vlc_cond_t object_wait; \ @@ -557,19 +572,11 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's 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 */ \ vlc_bool_t b_force; /**< set by the outside (eg. module_Need()) */ \ \ - /* Object variables */ \ - vlc_mutex_t var_lock; \ - int i_vars; \ - variable_t * p_vars; \ - \ /* Stuff related to the libvlc structure */ \ - vlc_object_t *p_libvlc_global; /**< root of all evil */ \ libvlc_int_t *p_libvlc; /**< (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_children; \ @@ -662,23 +669,22 @@ static inline uint8_t clip_uint8_vlc( int32_t a ) } /* Malloc with automatic error */ -#define MALLOC_VOID( var, type ) { var = (type*)malloc( sizeof( type) ); \ - if( !var ) return; } -#define MALLOC_NULL( var, type ) { var = (type*)malloc( sizeof( type) ); \ - if( !var ) return NULL; } -#define MALLOC_ERR( var, type ) { var = (type*)malloc( sizeof( type) ); \ - if( !var ) return VLC_ENOMEM; } -#define MALLOC_GOTOERR( var, type ) { var = (type*)malloc( sizeof( type) ); \ - if( !var ) goto error; } +#define MALLOC_VOID( var, type ) do { var = (type*)malloc( sizeof( type) ); \ + if( !var ) return; } while(0) +#define MALLOC_NULL( var, type ) do { var = (type*)malloc( sizeof( type) ); \ + if( !var ) return NULL; } while(0) +#define MALLOC_ERR( var, type ) do { var = (type*)malloc( sizeof( type) ); \ + if( !var ) return VLC_ENOMEM; } while(0) +#define MALLOC_GOTOERR( var, type ) do { var = (type*)malloc( sizeof( type) ); \ + if( !var ) goto error; } while(0) #define DECMALLOC_VOID( var, type ) type* var = (type*)malloc( sizeof(type) );\ if( !var ) return; -#define DECMALLOC_ERR( var, type ) type* var = (type*)malloc( sizeof(type) );\ +#define DECMALLOC_ERR( var, type ) type* var = (type*)malloc( sizeof(type) );\ if( !var ) return VLC_ENOMEM; #define DECMALLOC_NULL( var, type ) type* var = (type*)malloc( sizeof(type) );\ if( !var ) return NULL; -#define FREENULL(a) if( a ) { free( a ); a = NULL; } -#define FREE(a) if( a ) { free( a ); } +#define FREENULL(a) do { free( a ); a = NULL; } while(0) #define EMPTY_STR(str) (!str || !*str) @@ -808,6 +814,9 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # define ATTR_ALIGN(align) #endif +/* */ +#define VLC_UNUSED(x) (void)(x) + /* Alignment of critical dynamic data structure * * Not all platforms support memalign so we provide a vlc_memalign wrapper @@ -853,7 +862,7 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) #if !defined(HAVE_ASPRINTF) || defined(__APPLE__) || defined(SYS_BEOS) # define asprintf vlc_asprintf - VLC_EXPORT( int, vlc_asprintf, (char **, const char *, ... ) ); + VLC_EXPORT( int, vlc_asprintf, (char **, const char *, ... ) ATTRIBUTE_FORMAT( 2, 3 ) ); #elif !defined(__PLUGIN__) # define vlc_asprintf NULL #endif @@ -1009,7 +1018,6 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) VLC_INTERNAL( void, vlc_seekdir, ( void *, long ) ); VLC_INTERNAL( long, vlc_telldir, ( void * ) ); #else - struct dirent; /* forward declaration for vlc_symbols.h */ # if !defined(__PLUGIN__) # define vlc_opendir NULL # define vlc_readdir NULL @@ -1174,7 +1182,7 @@ VLC_EXPORT( unsigned, vlc_CPU, ( void ) ); /***************************************************************************** * I18n stuff *****************************************************************************/ -#if defined (WIN32) || !defined (HAVE_SHARED_LIBVLC) +#ifdef WIN32 VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) ); #endif @@ -1190,7 +1198,7 @@ VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) ); # include # endif # undef _ -# if defined (WIN32) || !defined (HAVE_SHARED_LIBVLC) +# ifdef WIN32 # define _(String) vlc_dgettext (PACKAGE_NAME, String) # else # define _(String) dgettext(PACKAGE_NAME, String) @@ -1215,18 +1223,12 @@ VLC_EXPORT( const char *, VLC_Changeset, ( void ) ); /***************************************************************************** * Additional vlc stuff *****************************************************************************/ -#ifndef HAVE_SHARED_LIBVLC -# ifdef HAVE_DIRENT_H -# include /* for DIR typedef in vlc_symbols.h */ -# endif -# include "vlc_symbols.h" -#endif #include "vlc_os_specific.h" #include "vlc_messages.h" #include "vlc_variables.h" #include "vlc_objects.h" -#include "vlc_threads_funcs.h" #include "vlc_mtime.h" +#include "vlc_threads_funcs.h" #include "vlc_modules.h" #include "main.h" #include "vlc_configuration.h"