X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_common.h;h=fa177d538b10e420380444c2815ed5cfe46740be;hb=b6880d76665de38f089c387eed9bb9a91f72d2a1;hp=c91d74f4e832af778493108defa1a2fc68a3ff71;hpb=6fdd1765b76ce1414cb0a1d13b790b2b26b08288;p=vlc diff --git a/include/vlc_common.h b/include/vlc_common.h index c91d74f4e8..fa177d538b 100644 --- a/include/vlc_common.h +++ b/include/vlc_common.h @@ -63,8 +63,9 @@ *****************************************************************************/ #include #include +#include -#include /* strerror() */ +#include #include #ifdef HAVE_SYS_TYPES_H @@ -191,6 +192,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 *****************************************************************************/ @@ -263,6 +282,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; @@ -293,7 +313,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 +366,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; @@ -364,6 +384,7 @@ typedef struct virtual_socket_t v_socket_t; typedef struct sockaddr sockaddr; typedef struct addrinfo addrinfo; typedef struct vlc_acl_t vlc_acl_t; +typedef struct vlc_url_t vlc_url_t; /* Misc */ typedef struct iso639_lang_t iso639_lang_t; @@ -393,7 +414,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,13 +492,13 @@ 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_PRIVATE_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_PRIVATE_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 @@ -501,7 +521,7 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ # 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_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 @@ -559,7 +579,6 @@ typedef struct vlc_object_internals_t vlc_object_internals_t; /* Stuff related to the libvlc structure */ \ 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; \ @@ -592,25 +611,38 @@ struct gc_object_t static inline void __vlc_gc_incref( gc_object_t * p_gc ) { + assert( p_gc->i_gc_refcount > 0 ); + p_gc->i_gc_refcount ++; }; static inline void __vlc_gc_decref( gc_object_t *p_gc ) { + if( !p_gc ) return; + + assert( p_gc->i_gc_refcount > 0 ); + p_gc->i_gc_refcount -- ; if( p_gc->i_gc_refcount == 0 ) { p_gc->pf_destructor( p_gc ); /* Do not use the p_gc pointer from now on ! */ - } + } +} + +static inline void +__vlc_gc_init( gc_object_t * p_gc, void (*pf_destructor)( gc_object_t * ), + void * arg) +{ + p_gc->i_gc_refcount = 1; + p_gc->pf_destructor = pf_destructor; + p_gc->p_destructor_arg = arg; } #define vlc_gc_incref( a ) __vlc_gc_incref( (gc_object_t *)a ) #define vlc_gc_decref( a ) __vlc_gc_decref( (gc_object_t *)a ) -#define vlc_gc_init( a,b,c ) { ((gc_object_t *)a)->i_gc_refcount = 0; \ - ((gc_object_t *)a)->pf_destructor = b; \ - ((gc_object_t *)a)->p_destructor_arg = c; } +#define vlc_gc_init( a,b,c ) __vlc_gc_init( (gc_object_t *)a,b,c ) /***************************************************************************** @@ -652,23 +684,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) @@ -798,6 +829,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 @@ -843,7 +877,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 @@ -1008,12 +1042,12 @@ static inline void _SetQWBE( uint8_t *p, uint64_t i_qw ) #if defined (WIN32) # include -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 * ) ); + 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 @@ -1164,7 +1198,7 @@ VLC_EXPORT( unsigned, vlc_CPU, ( void ) ); * I18n stuff *****************************************************************************/ #ifdef WIN32 -VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) ); + VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) ); #endif #if defined( ENABLE_NLS ) && \ @@ -1208,8 +1242,8 @@ VLC_EXPORT( const char *, VLC_Changeset, ( void ) ); #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"