X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=include%2Fvlc_common.h;h=bb2901b0a30cc85e311ee4ee78d06ca707370316;hb=bc650c59ca6d2edbf555dc0cec11091f274b42f5;hp=a8dcde954ffc78015df15f7839576263ff30a35f;hpb=9f30d0acf049cccdc34b7992f6b3298f5fd0ba1d;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index a8dcde954f..bb2901b0a3 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -24,7 +24,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ - /** * \file * This file is a collection of common definitions and types @@ -65,9 +64,8 @@ #include #include -#ifdef HAVE_STRING_H -# include /* strerror() */ -#endif +#include /* strerror() */ +#include #ifdef HAVE_SYS_TYPES_H # include @@ -193,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 *****************************************************************************/ @@ -273,6 +289,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; @@ -383,7 +400,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 ); @@ -426,8 +443,6 @@ typedef struct osd_menu_state_t osd_menu_state_t; /* VLM */ typedef struct vlm_t vlm_t; typedef struct vlm_message_t vlm_message_t; -typedef struct vlm_media_t vlm_media_t; -typedef struct vlm_schedule_t vlm_schedule_t; /* divers */ typedef struct vlc_meta_t vlc_meta_t; @@ -471,19 +486,46 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ * Plug-in stuff *****************************************************************************/ -#include "modules_inner.h" - -#if !defined (__PLUGIN__) || defined (HAVE_SHARED_LIBVLC) -# ifdef __cplusplus -# define VLC_EXPORT( type, name, args ) extern "C" type name args -# else -# define VLC_EXPORT( type, name, args ) type name args -# endif +#include "vlc_modules_macros.h" + +#if defined (WIN32) && defined (DLL_EXPORT) +# ifdef __cplusplus +# 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_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 -# define VLC_EXPORT( type, name, args ) struct _u_n_u_s_e_d_ - extern module_symbols_t* p_symbols; +# 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 +# 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 +# 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 -#define VLC_INTERNAL( type, name, args ) VLC_EXPORT (type, name, args) /***************************************************************************** * OS-specific headers and thread types @@ -500,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 *****************************************************************************/ @@ -510,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; \ @@ -519,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; \ @@ -531,16 +572,9 @@ 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 */ \ - libvlc_global_data_t *p_libvlc_global; /**< root of all evil */ \ libvlc_int_t *p_libvlc; /**< (root of all evil) - 1 */ \ \ volatile int i_refcount; /**< usage count */ \ @@ -628,6 +662,13 @@ static int64_t GCD( int64_t a, int64_t b ) else return a; } +/* function imported from libavutil/common.h */ +static inline uint8_t clip_uint8_vlc( int32_t a ) +{ + if( a&(~255) ) return (-a)>>31; + else return a; +} + /* Malloc with automatic error */ #define MALLOC_VOID( var, type ) { var = (type*)malloc( sizeof( type) ); \ if( !var ) return; } @@ -649,6 +690,8 @@ static int64_t GCD( int64_t a, int64_t b ) #define EMPTY_STR(str) (!str || !*str) +VLC_EXPORT( char const *, vlc_error, ( int ) ); + #include /* MSB (big endian)/LSB (little endian) conversions - network order is always @@ -700,14 +743,14 @@ static inline uint64_t GetQWLE( const void * _p ) #define GetQWBE( p ) U64_AT( p ) /* Helper writer functions */ -#define SetWLE( p, v ) _SetWLE( (uint8_t*)p, v) +#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) +#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; @@ -715,20 +758,20 @@ static inline void _SetDWLE( uint8_t *p, uint32_t i_dw ) p[1] = ( i_dw >> 8 )&0xff; p[0] = ( i_dw )&0xff; } -#define SetQWLE( p, v ) _SetQWLE( (uint8_t*)p, v) +#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 ); } -#define SetWBE( p, v ) _SetWBE( (uint8_t*)p, v) +#define SetWBE( p, v ) _SetWBE( (uint8_t*)(p), v) static inline void _SetWBE( uint8_t *p, uint16_t i_dw ) { p[0] = ( i_dw >> 8 )&0xff; p[1] = ( i_dw )&0xff; } -#define SetDWBE( p, v ) _SetDWBE( (uint8_t*)p, v) +#define SetDWBE( p, v ) _SetDWBE( (uint8_t*)(p), v) static inline void _SetDWBE( uint8_t *p, uint32_t i_dw ) { p[0] = ( i_dw >> 24 )&0xff; @@ -736,7 +779,7 @@ static inline void _SetDWBE( uint8_t *p, uint32_t i_dw ) p[2] = ( i_dw >> 8 )&0xff; p[3] = ( i_dw )&0xff; } -#define SetQWBE( p, v ) _SetQWBE( (uint8_t*)p, v) +#define SetQWBE( p, v ) _SetQWBE( (uint8_t*)(p), v) static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) { SetDWBE( p+4, i_qw&0xffffffff ); @@ -818,7 +861,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 @@ -836,6 +879,13 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # define vlc_strndup NULL #endif +#ifndef HAVE_STRNLEN +# define strnlen vlc_strnlen + VLC_EXPORT( size_t, vlc_strnlen, ( const char *, size_t ) ); +#elif !defined(__PLUGIN__) +# define vlc_strnlen NULL +#endif + #ifndef HAVE_STRLCPY # define strlcpy vlc_strlcpy VLC_EXPORT( size_t, vlc_strlcpy, ( char *, const char *, size_t ) ); @@ -957,11 +1007,16 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) # define opendir vlc_opendir # define readdir vlc_readdir # define closedir vlc_closedir +# define rewinddir vlc_rewindir +# define seekdir vlc_seekdir +# define telldir vlc_telldir VLC_EXPORT( void *, vlc_opendir, ( const char * ) ); VLC_EXPORT( void *, vlc_readdir, ( void * ) ); VLC_EXPORT( int, vlc_closedir, ( void * ) ); + VLC_INTERNAL( void, vlc_rewinddir, ( void * ) ); + 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 @@ -974,13 +1029,19 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) VLC_INTERNAL( void *, vlc_wopendir, ( const wchar_t * ) ); VLC_INTERNAL( struct _wdirent *, vlc_wreaddir, ( void * ) ); VLC_EXPORT( int, vlc_wclosedir, ( void * ) ); +VLC_INTERNAL( void, vlc_rewinddir, ( void * ) ); +VLC_INTERNAL( void, vlc_seekdir, ( void *, long ) ); +VLC_INTERNAL( long, vlc_telldir, ( void * ) ); # define opendir Use_utf8_opendir_or_vlc_wopendir_instead! # define readdir Use_utf8_readdir_or_vlc_wreaddir_instead! # define closedir vlc_wclosedir # define _wopendir vlc_wopendir # define _wreaddir vlc_wreaddir # define _wclosedir vlc_wclosedir -#else +# define rewinddir vlc_rewinddir +# define seekdir vlc_seekdir +# define telldir vlc_telldir +#elif !defined(__PLUGIN__) # define vlc_wclosedir NULL #endif @@ -1098,7 +1159,7 @@ VLC_EXPORT( size_t, vlc_iconv, ( vlc_iconv_t, const char **, size_t *, char **, VLC_EXPORT( int, vlc_iconv_close, ( vlc_iconv_t ) ); /* execve wrapper (defined in src/extras/libc.c) */ -VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char **pp_argv, char **pp_env, char *psz_cwd, char *p_in, int i_in, char **pp_data, int *pi_data ) ); +VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char *const *pp_argv, char *const *pp_env, const char *psz_cwd, const char *p_in, size_t i_in, char **pp_data, size_t *pi_data ) ); #define vlc_execve(a,b,c,d,e,f,g,h,i) __vlc_execve(VLC_OBJECT(a),b,c,d,e,f,g,h,i) /***************************************************************************** @@ -1115,11 +1176,12 @@ VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char **pp_a #define CPU_CAPABILITY_SSE2 (1<<7) #define CPU_CAPABILITY_ALTIVEC (1<<16) #define CPU_CAPABILITY_FPU (1<<31) +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 @@ -1135,7 +1197,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) @@ -1155,28 +1217,28 @@ VLC_EXPORT( const char *, VLC_CompileHost, ( void ) ); VLC_EXPORT( const char *, VLC_CompileDomain, ( void ) ); VLC_EXPORT( const char *, VLC_Compiler, ( void ) ); VLC_EXPORT( const char *, VLC_Error, ( int ) ); +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 -VLC_EXPORT( const char *, VLC_Changeset, ( void ) ); -# include "vlc_symbols.h" -#else -# define VLC_Changeset( ) ("exported") -#endif -#include "os_specific.h" +#include "vlc_os_specific.h" #include "vlc_messages.h" -#include "variables.h" +#include "vlc_variables.h" #include "vlc_objects.h" +#include "vlc_mtime.h" #include "vlc_threads_funcs.h" -#include "mtime.h" -#include "modules.h" +#include "vlc_modules.h" #include "main.h" -#include "configuration.h" +#include "vlc_configuration.h" + +/** The global thread var for msg stack context + * We store this as a static global variable so we don't need a vlc_object_t + * everywhere. + * This key is created in vlc_threads_init and is therefore ready to use at + * the very beginning of the universe */ +extern vlc_threadvar_t msg_context_global_key; + #if defined( __BORLANDC__ ) # undef PACKAGE