]> git.sesse.net Git - vlc/blobdiff - include/vlc_common.h
Partially abstract module_t: add module_IsCapable()
[vlc] / include / vlc_common.h
index 63e214b6e95a69f1e680cfebf470e1ee23311201..8ef6ff2dd769924672358f39ac19191e21d9f6ce 100644 (file)
@@ -272,6 +272,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;
@@ -425,8 +426,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;
@@ -474,24 +473,41 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *,      /* variable's object */
 
 #if defined (WIN32) && defined (DLL_EXPORT)
 #  ifdef __cplusplus
-#    define VLC_EXPORT( type, name, args ) extern "C" __declspec(dllexport) type name args
+#    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_EXPORT( type, name, args ) __declspec(dllexport) type name args
+#    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
-#      define VLC_EXPORT( type, name, args ) extern "C" type name args
-#   else
-#      define VLC_EXPORT( type, name, args ) 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
+#      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_EXPORT( 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
-#  define VLC_INTERNAL( type, name, args ) VLC_EXPORT (type, name, args)
 #endif
 
 /*****************************************************************************
@@ -549,7 +565,7 @@ typedef int ( * vlc_callback_t ) ( vlc_object_t *,      /* variable's object */
     variable_t *    p_vars;                                                 \
                                                                             \
     /* Stuff related to the libvlc structure */                             \
-    libvlc_global_data_t *p_libvlc_global;         /**< root of all evil */ \
+    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 */ \
@@ -718,14 +734,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;
@@ -733,20 +749,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;
@@ -754,7 +770,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 );
@@ -854,6 +870,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 ) );
@@ -985,7 +1008,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
@@ -1010,6 +1032,8 @@ VLC_INTERNAL( long, vlc_telldir, ( void * ) );
 #   define rewinddir vlc_rewinddir
 #   define seekdir vlc_seekdir
 #   define telldir vlc_telldir
+#elif !defined(__PLUGIN__)
+#   define vlc_wclosedir NULL
 #endif
 
 /* Format type specifiers for 64 bits numbers */
@@ -1126,7 +1150,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)
 
 /*****************************************************************************
@@ -1143,11 +1167,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
 
@@ -1163,7 +1188,7 @@ VLC_EXPORT( char *, vlc_dgettext, ( const char *package, const char *msgid ) );
 #       include <libintl.h>
 #   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)
@@ -1183,19 +1208,11 @@ 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 <dirent.h>  /* 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 "vlc_os_specific.h"
 #include "vlc_messages.h"
 #include "vlc_variables.h"