* common.h: common definitions
* Collection of useful common types and macros definitions
*****************************************************************************
- * Copyright (C) 1998-2005 the VideoLAN team
- * $Id$
+ * Copyright (C) 1998-2011 the VideoLAN team
*
* Authors: Samuel Hocevar <sam@via.ecp.fr>
* Vincent Seguin <seguin@via.ecp.fr>
* Gildas Bazin <gbazin@videolan.org>
+ * RĂ©mi Denis-Courmont
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
/* Format string sanity checks */
#ifdef __GNUC__
# if defined( _WIN32 ) && (__GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 4 ) )
-# define LIBVLC_FORMAT(x,y) __attribute__ ((format(gnu_printf,x,y)))
+# define VLC_FORMAT(x,y) __attribute__ ((format(gnu_printf,x,y)))
# else
-# define LIBVLC_FORMAT(x,y) __attribute__ ((format(printf,x,y)))
+# define VLC_FORMAT(x,y) __attribute__ ((format(printf,x,y)))
# endif
-# define LIBVLC_FORMAT_ARG(x) __attribute__ ((format_arg(x)))
+# define VLC_FORMAT_ARG(x) __attribute__ ((format_arg(x)))
# if __GNUC__ > 3 || (__GNUC__ == 3 && (__GNUC_MINOR__ >= 4))
-# define LIBVLC_USED __attribute__ ((warn_unused_result))
+# define VLC_USED __attribute__ ((warn_unused_result))
# else
-# define LIBVLC_USED
+# define VLC_USED
# endif
-# define LIBVLC_MALLOC __attribute__ ((malloc))
+# define VLC_MALLOC __attribute__ ((malloc))
#else
-# define LIBVLC_FORMAT(x,y)
-# define LIBVLC_FORMAT_ARG(x)
-# define LIBVLC_USED
-# define LIBVLC_MALLOC
+# define VLC_FORMAT(x,y)
+# define VLC_FORMAT_ARG(x)
+# define VLC_USED
+# define VLC_MALLOC
#endif
/* Branch prediction */
# define unlikely(p) (!!(p))
#endif
+#if defined(__GNUC__) && !defined __cplusplus
+# define VLC_DEPRECATED __attribute__((deprecated))
+#else
+# define VLC_DEPRECATED
+#endif
+
+/* Linkage */
+#ifdef __cplusplus
+# define VLC_EXTERN extern "C"
+#else
+# define VLC_EXTERN
+#endif
+
+#if defined (WIN32) && defined (DLL_EXPORT)
+# define VLC_EXPORT __declspec(dllexport)
+#elif defined (__GNUC__) && (__GNUC__ >= 4)
+# define VLC_EXPORT __attribute__((visibility("default")))
+#else
+# define VLC_EXPORT
+#endif
+
+#define VLC_API VLC_EXTERN VLC_EXPORT
+
+
/*****************************************************************************
* Basic types definitions
*****************************************************************************/
# endif
#endif
+#ifdef __SYMBIAN32__
+ #include <sys/syslimits.h>
+#endif
+
/* Counter for statistics and profiling */
typedef unsigned long count_t;
typedef struct video_palette_t video_palette_t;
/* Audio */
-typedef struct aout_instance_t aout_instance_t;
+typedef struct audio_output audio_output_t;
typedef struct aout_sys_t aout_sys_t;
typedef struct aout_fifo_t aout_fifo_t;
typedef struct aout_input_t aout_input_t;
typedef struct block_t aout_buffer_t;
typedef audio_format_t audio_sample_format_t;
-typedef struct aout_filter_t aout_filter_t;
/* Video */
typedef struct vout_thread_t vout_thread_t;
typedef struct config_chain_t config_chain_t;
typedef struct session_descriptor_t session_descriptor_t;
-typedef struct announce_method_t announce_method_t;
/* Decoders */
typedef struct decoder_t decoder_t;
typedef struct httpd_redirect_t httpd_redirect_t;
typedef struct httpd_stream_t httpd_stream_t;
-/* TLS support */
-typedef struct tls_server_t tls_server_t;
-typedef struct tls_session_t tls_session_t;
-
/* Hashing */
typedef struct md5_s md5_t;
};
-/**
- * \defgroup var_type Variable types
- * These are the different types a vlc variable can have.
- * @{
- */
-#define VLC_VAR_VOID 0x0010
-#define VLC_VAR_BOOL 0x0020
-#define VLC_VAR_INTEGER 0x0030
-#define VLC_VAR_HOTKEY 0x0031
-#define VLC_VAR_STRING 0x0040
-#define VLC_VAR_VARIABLE 0x0044
-#define VLC_VAR_FLOAT 0x0050
-#define VLC_VAR_TIME 0x0060
-#define VLC_VAR_ADDRESS 0x0070
-#define VLC_VAR_MUTEX 0x0080
-#define VLC_VAR_COORDS 0x00A0
-/**@}*/
-
/*****************************************************************************
* Error values (shouldn't be exposed)
*****************************************************************************/
vlc_value_t, /* new value */
void * ); /* callback data */
-/*****************************************************************************
- * Plug-in stuff
- *****************************************************************************/
-
-#ifdef __cplusplus
-# define LIBVLC_EXTERN extern "C"
-#else
-# define LIBVLC_EXTERN extern
-#endif
-#if defined (WIN32) && defined (DLL_EXPORT)
-#if defined (UNDER_CE)
-# include <windef.h>
-#endif
-# define LIBVLC_EXPORT __declspec(dllexport)
-#else
-# define LIBVLC_EXPORT
-#endif
-#define VLC_EXPORT( type, name, args ) \
- LIBVLC_EXTERN LIBVLC_EXPORT type name args
-
/*****************************************************************************
* OS-specific headers and thread types
*****************************************************************************/
#if defined( __GNUC__ ) && __GNUC__ > 3
# ifndef __cplusplus
# define VLC_OBJECT( x ) \
- __builtin_choose_expr(__builtin_offsetof(__typeof__(*x), psz_object_type), \
- (void)0 /* screw you */, (vlc_object_t *)(x))
+ __builtin_choose_expr( \
+ __builtin_offsetof(__typeof__(*(x)), psz_object_type), \
+ (void)0 /* screw you */, \
+ (vlc_object_t *)(x))
# else
# define VLC_OBJECT( x ) \
((vlc_object_t *)(x) \
- + 0 * __builtin_offsetof(__typeof__(*x), psz_object_type))
+ + 0 * __builtin_offsetof(__typeof__(*(x)), psz_object_type))
# endif
#else
# define VLC_OBJECT( x ) ((vlc_object_t *)(x))
*/
#define VLC_GC_MEMBERS gc_object_t vlc_gc_data;
-VLC_EXPORT(void *, vlc_gc_init, (gc_object_t *, void (*)(gc_object_t *)));
-VLC_EXPORT(void *, vlc_hold, (gc_object_t *));
-VLC_EXPORT(void, vlc_release, (gc_object_t *));
+VLC_API void * vlc_gc_init(gc_object_t *, void (*)(gc_object_t *));
+VLC_API void * vlc_hold(gc_object_t *);
+VLC_API void vlc_release(gc_object_t *);
#define vlc_gc_init( a,b ) vlc_gc_init( &(a)->vlc_gc_data, (b) )
#define vlc_gc_incref( a ) vlc_hold( &(a)->vlc_gc_data )
# define __MIN(a, b) ( ((a) < (b)) ? (a) : (b) )
#endif
-LIBVLC_USED
+VLC_USED
static inline int64_t GCD ( int64_t a, int64_t b )
{
while( b )
}
/* function imported from libavutil/common.h */
-LIBVLC_USED
+VLC_USED
static inline uint8_t clip_uint8_vlc( int32_t a )
{
if( a&(~255) ) return (-a)>>31;
}
/* Count leading zeroes */
-LIBVLC_USED
+VLC_USED
static inline unsigned clz (unsigned x)
{
#ifdef __GNUC_
/* XXX: this assumes that int is 32-bits or more */
#define clz32( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint32_t)) * 8))
+/* Bit weight */
+VLC_USED
+static inline unsigned popcount (unsigned x)
+{
+#ifdef __GNUC_
+ return __builtin_popcount (x);
+#else
+ unsigned count = 0;
+ while (x)
+ {
+ count += x & 1;
+ x = x >> 1;
+ }
+ return count;
+#endif
+}
+
/* Free and set set the variable to NULL */
#define FREENULL(a) do { free( a ); a = NULL; } while(0)
#define EMPTY_STR(str) (!str || !*str)
-VLC_EXPORT( char const *, vlc_error, ( int ) LIBVLC_USED );
+VLC_API char const * vlc_error( int ) VLC_USED;
#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. */
-LIBVLC_USED
+VLC_USED
static inline uint16_t U16_AT( const void * _p )
{
const uint8_t * p = (const uint8_t *)_p;
return ( ((uint16_t)p[0] << 8) | p[1] );
}
-LIBVLC_USED
+VLC_USED
static inline uint32_t U32_AT( const void * _p )
{
const uint8_t * p = (const uint8_t *)_p;
| ((uint32_t)p[2] << 8) | p[3] );
}
-LIBVLC_USED
+VLC_USED
static inline uint64_t U64_AT( const void * _p )
{
const uint8_t * p = (const uint8_t *)_p;
| ((uint64_t)p[6] << 8) | p[7] );
}
-LIBVLC_USED
+VLC_USED
static inline uint16_t GetWLE( const void * _p )
{
const uint8_t * p = (const uint8_t *)_p;
return ( ((uint16_t)p[1] << 8) | p[0] );
}
-LIBVLC_USED
+VLC_USED
static inline uint32_t GetDWLE( const void * _p )
{
const uint8_t * p = (const uint8_t *)_p;
| ((uint32_t)p[1] << 8) | p[0] );
}
-LIBVLC_USED
+VLC_USED
static inline uint64_t GetQWLE( const void * _p )
{
const uint8_t * p = (const uint8_t *)_p;
#define ntoh16(i) ntohs(i)
#define ntoh32(i) ntohl(i)
-LIBVLC_USED
+VLC_USED
static inline uint64_t ntoh64 (uint64_t ll)
{
union { uint64_t qw; uint8_t b[16]; } v = { ll };
/* win32, cl and icl support */
# if defined( _MSC_VER ) || !defined( __MINGW32__ )
# define __attribute__(x)
-# define __inline__ __inline
# define S_IFBLK 0x3000 /* Block */
# define S_ISBLK(m) (0)
# define S_ISCHR(m) (0)
# include <tchar.h>
#endif
-VLC_EXPORT( bool, vlc_ureduce, ( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t ) );
+VLC_API bool vlc_ureduce( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t );
-VLC_EXPORT( void *, vlc_memalign, ( void **base, size_t alignment, size_t size ) LIBVLC_USED );
+VLC_API void * vlc_memalign( void **base, size_t alignment, size_t size ) VLC_USED;
-/* execve wrapper (defined in src/extras/libc.c) */
-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 ) LIBVLC_USED );
-#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)
+VLC_API void vlc_tdestroy( void *, void (*)(void *) );
/* Fast large memory copy and memory set */
-VLC_EXPORT( void *, vlc_memcpy, ( void *, const void *, size_t ) );
-VLC_EXPORT( void *, vlc_memset, ( void *, int, size_t ) );
+VLC_API void * vlc_memcpy( void *, const void *, size_t );
+#define vlc_memset memset
/*****************************************************************************
* I18n stuff
*****************************************************************************/
-VLC_EXPORT( char *, vlc_gettext, ( const char *msgid ) LIBVLC_FORMAT_ARG(1) );
+VLC_API char * vlc_gettext( const char *msgid ) VLC_FORMAT_ARG(1);
#define vlc_pgettext( ctx, id ) \
vlc_pgettext_aux( ctx "\004" id, id )
-LIBVLC_FORMAT_ARG(2)
+VLC_FORMAT_ARG(2)
static inline const char *vlc_pgettext_aux( const char *ctx, const char *id )
{
const char *tr = vlc_gettext( ctx );
return nptr;
}
+static inline void *xcalloc (size_t n, size_t size)
+{
+ void *ptr = calloc (n, size);
+ if (unlikely (ptr == NULL))
+ abort ();
+ return ptr;
+}
+
/*****************************************************************************
* libvlc features
*****************************************************************************/
-VLC_EXPORT( const char *, VLC_CompileBy, ( void ) LIBVLC_USED );
-VLC_EXPORT( const char *, VLC_CompileHost, ( void ) LIBVLC_USED );
-VLC_EXPORT( const char *, VLC_Compiler, ( void ) LIBVLC_USED );
+VLC_API const char * VLC_CompileBy( void ) VLC_USED;
+VLC_API const char * VLC_CompileHost( void ) VLC_USED;
+VLC_API const char * VLC_Compiler( void ) VLC_USED;
/*****************************************************************************
* Additional vlc stuff
#include "vlc_main.h"
#include "vlc_configuration.h"
-#if defined( WIN32 ) || defined( UNDER_CE )
+#if defined( WIN32 ) || defined( UNDER_CE ) || defined( __SYMBIAN32__ ) || defined( __OS2__ )
# define DIR_SEP_CHAR '\\'
# define DIR_SEP "\\"
# define PATH_SEP_CHAR ';'