* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-
/**
* \file
* This file is a collection of common definitions and types
#endif
#include "vlc_config.h"
-#include "modules_inner.h"
/*****************************************************************************
* Required system headers
*****************************************************************************/
/* Internal types */
-typedef struct libvlc_t libvlc_t;
-typedef struct vlc_t vlc_t;
+typedef struct libvlc_global_data_t libvlc_global_data_t;
+typedef struct libvlc_int_t libvlc_int_t;
typedef struct variable_t variable_t;
typedef struct date_t date_t;
typedef struct dict_entry_t dict_entry_t;
typedef struct services_discovery_sys_t services_discovery_sys_t;
typedef struct playlist_add_t playlist_add_t;
typedef struct playlist_preparse_t playlist_preparse_t;
+typedef struct playlist_fetcher_t playlist_fetcher_t;
/* Modules */
typedef struct module_bank_t module_bank_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;
typedef struct sout_stream_t sout_stream_t;
typedef struct sout_stream_sys_t sout_stream_sys_t;
-typedef struct sout_cfg_t sout_cfg_t;
+typedef struct config_chain_t config_chain_t;
typedef struct sap_session_t sap_session_t;
typedef struct sap_address_t sap_address_t;
typedef struct session_descriptor_t session_descriptor_t;
typedef struct announce_handler_t announce_handler_t;
typedef struct sap_handler_t sap_handler_t;
+typedef struct sout_param_t sout_param_t;
+typedef struct sout_pcat_t sout_pcat_t;
typedef struct sout_std_t sout_std_t;
typedef struct sout_display_t sout_display_t;
typedef struct sout_duplicate_t sout_duplicate_t;
typedef struct device_t device_t;
typedef struct device_probe_t device_probe_t;
typedef struct probe_sys_t probe_sys_t;
-typedef struct localized_string_t localized_string_t;
-typedef struct i18n_string_t i18n_string_t;
/* block */
typedef struct block_t block_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;
+typedef struct meta_export_t meta_export_t;
/* Stats */
typedef struct counter_t counter_t;
typedef struct update_t update_t;
typedef struct update_iterator_t update_iterator_t;
+/* Meta engine */
+typedef struct meta_engine_t meta_engine_t;
+
+/* stat/lstat/fstat */
+#ifdef WIN32
+#include <sys/stat.h>
+struct _stati64;
+#define stat _stati64
+#define fstat _fstati64
+/* You should otherwise use utf8_stat and utf8_lstat. */
+#else
+struct stat;
+#endif
+
/*****************************************************************************
* Variable callbacks
*****************************************************************************/
/*****************************************************************************
* Plug-in stuff
*****************************************************************************/
-#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;
+# if !defined (__PLUGIN__) || defined (HAVE_SHARED_LIBVLC)
+# 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
+# else
+# define VLC_PUBLIC_API
+# define VLC_PRIVATE_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;
+# endif
#endif
/*****************************************************************************
int i_object_id; \
int i_object_type; \
const char *psz_object_type; \
- char *psz_object_name; \
+ const char *psz_object_name; \
\
/* Messages header */ \
char *psz_header; \
variable_t * p_vars; \
\
/* Stuff related to the libvlc structure */ \
- libvlc_t * p_libvlc; /**< root of all evil */ \
- vlc_t * p_vlc; /**< (root of all evil) - 1 */ \
+ 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 */ \
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; }
#define FREENULL(a) if( a ) { free( a ); a = NULL; }
#define FREE(a) if( a ) { free( a ); }
-/* Dynamic array handling: realloc array, move data, increment position */
-#if defined( _MSC_VER ) && _MSC_VER < 1300 && !defined( UNDER_CE )
-# define VLCCVP (void**) /* Work-around for broken compiler */
-#else
-# define VLCCVP
-#endif
-#define INSERT_ELEM( p_ar, i_oldsize, i_pos, elem ) \
- do \
- { \
- if( !i_oldsize ) (p_ar) = NULL; \
- (p_ar) = VLCCVP realloc( p_ar, ((i_oldsize) + 1) * sizeof(*(p_ar)) ); \
- if( (i_oldsize) - (i_pos) ) \
- { \
- memmove( (p_ar) + (i_pos) + 1, (p_ar) + (i_pos), \
- ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \
- } \
- (p_ar)[i_pos] = elem; \
- (i_oldsize)++; \
- } \
- while( 0 )
-
-#define REMOVE_ELEM( p_ar, i_oldsize, i_pos ) \
- do \
- { \
- if( (i_oldsize) - (i_pos) - 1 ) \
- { \
- memmove( (p_ar) + (i_pos), \
- (p_ar) + (i_pos) + 1, \
- ((i_oldsize) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \
- } \
- if( i_oldsize > 1 ) \
- { \
- (p_ar) = realloc( p_ar, ((i_oldsize) - 1) * sizeof( *(p_ar) ) ); \
- } \
- else \
- { \
- free( p_ar ); \
- (p_ar) = NULL; \
- } \
- (i_oldsize)--; \
- } \
- while( 0 )
-
-
-#define TAB_APPEND( count, tab, p ) \
- if( (count) > 0 ) \
- { \
- (tab) = realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \
- } \
- else \
- { \
- (tab) = malloc( sizeof( void ** ) ); \
- } \
- (tab)[count] = (p); \
- (count)++
-
-#define TAB_FIND( count, tab, p, index ) \
- { \
- int _i_; \
- (index) = -1; \
- for( _i_ = 0; _i_ < (count); _i_++ ) \
- { \
- if( (tab)[_i_] == (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; \
- } \
- } \
- }
-
-/* Binary search in an array */
-#define BSEARCH( entries, count, elem, zetype, key, answer ) { \
- int low = 0, high = count - 1; \
- answer = -1; \
- while( low <= high ) {\
- int mid = (low + high ) / 2; /* Just don't care about 2^30 tables */ \
- zetype mid_val = entries[mid] elem;\
- if( mid_val < key ) \
- low = mid + 1; \
- else if ( mid_val > key ) \
- high = mid -1; \
- else \
- { \
- answer = mid; break; \
- }\
- } \
-}
-
-/* Dictionnary handling */
-struct dict_entry_t
-{
- int i_int;
- char *psz_string;
- uint64_t i_hash;
- void *p_data;
-};
+#define EMPTY_STR(str) (!str || !*str)
-struct dict_t
-{
- dict_entry_t *p_entries;
- int i_entries;
-};
+VLC_EXPORT( char const *, vlc_error, ( int ) );
-VLC_EXPORT( dict_t *, vlc_DictNew, (void) );
-VLC_EXPORT( void, vlc_DictClear, (dict_t * ) );
-VLC_EXPORT( void, vlc_DictInsert, (dict_t *, int, const char *, void * ) );
-VLC_EXPORT( void*, vlc_DictGet, (dict_t *, int, const char * ) );
-VLC_EXPORT( int, vlc_DictLookup, (dict_t *, int, const char * ) );
+#include <vlc_arrays.h>
/* 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 const * _p )
+static inline uint16_t U16_AT( const void * _p )
{
- uint8_t * p = (uint8_t *)_p;
+ const uint8_t * p = (const uint8_t *)_p;
return ( ((uint16_t)p[0] << 8) | p[1] );
}
-static inline uint32_t U32_AT( void const * _p )
+static inline uint32_t U32_AT( const void * _p )
{
- uint8_t * p = (uint8_t *)_p;
+ const uint8_t * p = (const 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 const * _p )
+static inline uint64_t U64_AT( const void * _p )
{
- uint8_t * p = (uint8_t *)_p;
+ const uint8_t * p = (const uint8_t *)_p;
return ( ((uint64_t)p[0] << 56) | ((uint64_t)p[1] << 48)
| ((uint64_t)p[2] << 40) | ((uint64_t)p[3] << 32)
| ((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 )
+static inline uint16_t GetWLE( const void * _p )
{
- uint8_t * p = (uint8_t *)_p;
+ const uint8_t * p = (const uint8_t *)_p;
return ( ((uint16_t)p[1] << 8) | p[0] );
}
-static inline uint32_t GetDWLE( void const * _p )
+static inline uint32_t GetDWLE( const void * _p )
{
- uint8_t * p = (uint8_t *)_p;
+ const uint8_t * p = (const 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 )
+static inline uint64_t GetQWLE( const void * _p )
{
- uint8_t * p = (uint8_t *)_p;
+ const uint8_t * p = (const 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)
#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;
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;
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 );
SetDWBE( p, ( i_qw >> 32)&0xffffffff );
}
-#if WORDS_BIGENDIAN
+#ifdef WORDS_BIGENDIAN
# define hton16(i) ( i )
# define hton32(i) ( i )
# define hton64(i) ( i )
# 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 ) );
# define vlc_strtoll NULL
#endif
-#if defined(SYS_BEOS)
+#if defined(SYS_BEOS) \
+ || (defined (__FreeBSD__) && (__FreeBSD__ < 5))
typedef struct {
long long quot; /* Quotient. */
long long rem; /* Remainder. */
# 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__)
# endif
#endif
- VLC_EXPORT( void *, vlc_opendir_wrapper, ( const char * ) );
- VLC_EXPORT( struct dirent *, vlc_readdir_wrapper, ( void * ) );
- VLC_EXPORT( int, vlc_closedir_wrapper, ( void * ) );
+#if defined (WIN32)
+# include <dirent.h>
+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
+# 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 */
#if defined(__CYGWIN32__) || (!defined(WIN32) && !defined(UNDER_CE))
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)
/*****************************************************************************
#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
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
-VLC_EXPORT( const char *, VLC_Changeset, ( void ) );
+# ifdef HAVE_DIRENT_H
+# include <dirent.h> /* for DIR typedef in vlc_symbols.h */
+# endif
# 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_threads_funcs.h"
-#include "mtime.h"
-#include "modules.h"
+#include "vlc_mtime.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
# define PACKAGE
#endif
+#if defined( WIN32 ) || defined( UNDER_CE )
+# define DIR_SEP_CHAR '\\'
+# define DIR_SEP "\\"
+#else
+# define DIR_SEP_CHAR '/'
+# define DIR_SEP "/"
+#endif