]> git.sesse.net Git - vlc/blobdiff - include/common.h
* Fixed a bug in the "make snapshot*" rules.
[vlc] / include / common.h
index 8b37b1f7ecd1675cf1466ddd661600cebbe57c6f..76193be5f368c3f69e98a7b89b4cf21b7e7aa2f4 100644 (file)
@@ -3,23 +3,24 @@
  * Collection of useful common types and macros definitions
  *****************************************************************************
  * Copyright (C) 1998, 1999, 2000 VideoLAN
+ * $Id: common.h,v 1.47 2001/11/08 21:07:24 jlj Exp $
  *
- * Authors:
+ * Authors: Samuel Hocevar <sam@via.ecp.fr>
+ *          Vincent Seguin <seguin@via.ecp.fr>
  *
  * 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
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- *
+ * 
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  *****************************************************************************/
 
 /*****************************************************************************
 typedef u8                  byte_t;
 
 /* Boolean type */
+#ifdef BOOLEAN_T_IN_SYS_TYPES_H
+#   include <sys/types.h>
+#elif defined(BOOLEAN_T_IN_PTHREAD_H)
+#   include <pthread.h>
+#elif defined(BOOLEAN_T_IN_CTHREADS_H)
+#   include <cthreads.h>
+#else
 typedef int                 boolean_t;
+#endif
 #ifdef SYS_GNU
-#define _MACH_I386_BOOLEAN_H_
+#   define _MACH_I386_BOOLEAN_H_
+#endif
+
+/* ptrdiff_t definition */
+#ifdef HAVE_STDDEF_H
+#   include <stddef.h>
+#else
+#   include <malloc.h>
+#   ifndef _PTRDIFF_T
+#       define _PTRDIFF_T
+/* Not portable in a 64-bit environment. */
+typedef int                 ptrdiff_t;
+#   endif
 #endif
 
 /* Counter for statistics and profiling */
 typedef unsigned long       count_t;
 
+/* DCT elements types */
+typedef s16                 dctelem_t;
+
+/* Video buffer types */
+typedef u8                  yuv_data_t;
+
 /*****************************************************************************
  * Classes declaration
  *****************************************************************************/
 
+/* Plugins */
+struct plugin_bank_s;
+struct plugin_info_s;
+
+typedef struct plugin_bank_s *          p_plugin_bank_t;
+typedef struct plugin_info_s *          p_plugin_info_t;
+
+/* Plugins */
+struct playlist_s;
+struct playlist_item_s;
+
+typedef struct playlist_s *             p_playlist_t;
+typedef struct playlist_item_s *        p_playlist_item_t;
+
 /* Interface */
 struct intf_thread_s;
 struct intf_sys_s;
@@ -63,11 +104,11 @@ typedef struct intf_channel_s *         p_intf_channel_t;
 
 /* Input */
 struct input_thread_s;
-struct input_vlan_s;
+struct input_channel_s;
 struct input_cfg_s;
 
 typedef struct input_thread_s *         p_input_thread_t;
-typedef struct input_vlan_s *           p_input_vlan_t;
+typedef struct input_channel_s *        p_input_channel_t;
 typedef struct input_cfg_s *            p_input_cfg_t;
 
 /* Audio */
@@ -92,9 +133,22 @@ typedef struct vdec_thread_s *          p_vdec_thread_t;
 typedef struct vpar_thread_s *          p_vpar_thread_t;
 typedef struct video_parser_s *         p_video_parser_t;
 
+/* Misc */
+struct macroblock_s;
+struct data_packet_s;
+struct es_descriptor_s;
+struct pgrm_descriptor_s;
+
 /*****************************************************************************
  * Macros and inline functions
  *****************************************************************************/
+#ifdef NTOHL_IN_SYS_PARAM_H
+#   include <sys/param.h>
+#elif defined(WIN32)
+#   include <winsock.h>
+#else
+#   include <netinet/in.h>
+#endif
 
 /* CEIL: division with round to nearest greater integer */
 #define CEIL(n, d)  ( ((n) / (d)) + ( ((n) % (d)) ? 1 : 0) )
@@ -103,40 +157,99 @@ typedef struct video_parser_s *         p_video_parser_t;
 #define PAD(n, d)   ( ((n) % (d)) ? ((((n) / (d)) + 1) * (d)) : (n) )
 
 /* MAX and MIN: self explanatory */
-//#ifndef SYS_BEOS
 #ifndef MAX
-#define MAX(a, b)   ( ((a) > (b)) ? (a) : (b) )
+#   define MAX(a, b)   ( ((a) > (b)) ? (a) : (b) )
 #endif
 #ifndef MIN
-#define MIN(a, b)   ( ((a) < (b)) ? (a) : (b) )
+#   define MIN(a, b)   ( ((a) < (b)) ? (a) : (b) )
 #endif
-//#endif
 
-/* MSB (big endian)/LSB (little endian) convertions - network order is always
+/* 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 - note that these 'functions'
  * needs <netinet/in.h> or the local equivalent. */
-/* FIXME??: hton64 should be declared as an extern inline function to avoid border
- * effects (see byteorder.h) */
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define hton16      htons
-#define hton32      htonl
-#define hton64(i)   ( ((u64)(htonl((i) & 0xffffffff)) << 32) | htonl(((i) >> 32) & 0xffffffff ) )
-#define ntoh16      ntohs
-#define ntoh32      ntohl
-#define ntoh64      hton64
-#elif __BYTE_ORDER == __BIG_ENDIAN
-#define hton16      htons
-#define hton32      htonl
-#define hton64(i)   ( i )
-#define ntoh16      ntohs
-#define ntoh32      ntohl
-#define ntoh64(i)   ( i )
+/* FIXME: hton64 should be declared as an extern inline function to avoid
+ * border effects (see byteorder.h) */
+#if WORDS_BIGENDIAN
+#   define hton16      htons
+#   define hton32      htonl
+#   define hton64(i)   ( i )
+#   define ntoh16      ntohs
+#   define ntoh32      ntohl
+#   define ntoh64(i)   ( i )
 #else
-/* XXX??: cause a compilation error */
+#   define hton16      htons
+#   define hton32      htonl
+#   define hton64(i)   ( ((u64)(htonl((i) & 0xffffffff)) << 32) | htonl(((i) >> 32) & 0xffffffff ) )
+#   define ntoh16      ntohs
+#   define ntoh32      ntohl
+#   define ntoh64      hton64
 #endif
 
-/* Macros used by input to access the TS buffer */
-#define U32_AT(p)   ( ntohl ( *( (u32 *)(p) ) ) )
-#define U16_AT(p)   ( ntohs ( *( (u16 *)(p) ) ) )
+/* Macros with automatic casts */
+#define U64_AT(p)   ( ntoh64 ( *( (u64 *)(p) ) ) )
+#define U32_AT(p)   ( ntoh32 ( *( (u32 *)(p) ) ) )
+#define U16_AT(p)   ( ntoh16 ( *( (u16 *)(p) ) ) )
+
+/* Alignment of critical static data structures */
+#ifdef ATTRIBUTE_ALIGNED_MAX
+#   define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align)))
+#else
+#   define ATTR_ALIGN(align)
+#endif
+
+/* Alignment of critical dynamic data structure */
+#ifdef HAVE_MEMALIGN
+    /* Some systems have memalign() but no declaration for it */
+    void * memalign( size_t align, size_t size );
+#else
+#   ifdef HAVE_VALLOC
+        /* That's like using a hammer to kill a fly, but eh... */
+#       include <unistd.h>
+#       define memalign(align,size) valloc(size)
+#   else
+        /* Assume malloc alignment is sufficient */
+#       define memalign(align,size) malloc(size)
+#   endif
+
+    
+#endif
+
+/* win32, cl and icl support */
+#if defined( _MSC_VER )
+#   define __attribute__(x)
+#   define __inline__      __inline
+#   define strncasecmp     strnicmp
+#   define strcasecmp      stricmp
+#   define S_ISBLK(m)      (0)
+#   define S_ISCHR(m)      (0)
+#   define S_ISFIFO(m)     (((m)&_S_IFMT) == _S_IFIFO)
+#   define S_ISREG(m)      (((m)&_S_IFMT) == _S_IFREG)
+#   define I64C(x)         x##i64
+#else
+#   define I64C(x)         x##LL
+#endif
+
+#if defined( WIN32 )
+#   if defined( __MINGW32__ )
+#       if !defined( _OFF_T_ )
+typedef long long _off_t;
+typedef _off_t off_t;
+#           define _OFF_T_
+#       else
+#           define off_t long long
+#       endif
+#   elif defined( _MSC_VER )
+#       if !defined( _OFF_T_DEFINED )
+typedef __int64 off_t;
+#           define _OFF_T_DEFINED
+#       else
+#           define off_t __int64
+#       endif
+#   endif
+#   define stat _stati64
+#   ifndef snprintf
+#       define snprintf _snprintf  /* snprintf not defined in mingw32 (bug?) */
+#   endif
+#endif