common.h 4.11 KB
Newer Older
Michel Kaempf's avatar
Michel Kaempf committed
1 2 3 4 5 6 7 8 9 10 11
/*******************************************************************************
 * common.h: common definitions
 * (c)1998 VideoLAN
 *******************************************************************************
 * Collection of usefull common types and macros definitions
 *******************************************************************************
 * required headers:
 *  config.h
 *******************************************************************************/

/*******************************************************************************
Vincent Seguin's avatar
Vincent Seguin committed
12
 * Basic types definitions
Michel Kaempf's avatar
Michel Kaempf committed
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
 *******************************************************************************/

/* Basic types definitions */
typedef signed char         s8;
typedef signed short        s16;
typedef signed int          s32;
typedef signed long long    s64;
typedef unsigned char       u8;
typedef unsigned short      u16;
typedef unsigned int        u32;
typedef unsigned long long  u64;

typedef u8                  byte_t;
 
/* Boolean type */
typedef int                 boolean_t;

/* Counter for statistics and profiling */
typedef unsigned long       count_t;

Vincent Seguin's avatar
Vincent Seguin committed
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
/*******************************************************************************
 * Classes declaration
 *******************************************************************************/

/* Interface */
struct intf_thread_s;
struct intf_sys_s;
struct intf_console_s;
struct intf_msg_s;

typedef struct intf_thread_s *          p_intf_thread_t;
typedef struct intf_sys_s *             p_intf_sys_t;
typedef struct intf_console_s *         p_intf_console_t;
typedef struct intf_msg_s *             p_intf_msg_t;

/* Input */
struct input_thread_s;
50
struct input_vlan_s;
Vincent Seguin's avatar
Vincent Seguin committed
51 52 53
struct input_cfg_s;

typedef struct input_thread_s *         p_input_thread_t;
54
typedef struct input_vlan_s *           p_input_vlan_t;
Vincent Seguin's avatar
Vincent Seguin committed
55 56 57 58 59 60 61 62 63
typedef struct input_cfg_s *            p_input_cfg_t;

/* Audio */
struct aout_thread_s;

typedef struct aout_thread_s *          p_aout_thread_t;

/* Video */
struct vout_thread_s;
Vincent Seguin's avatar
Vincent Seguin committed
64
struct vout_font_s;
Vincent Seguin's avatar
Vincent Seguin committed
65 66 67 68 69 70
struct vout_sys_s;
struct vdec_thread_s;
struct vpar_thread_s;
struct video_parser_s;

typedef struct vout_thread_s *          p_vout_thread_t;
Vincent Seguin's avatar
Vincent Seguin committed
71
typedef struct vout_font_s *            p_vout_font_t;
Vincent Seguin's avatar
Vincent Seguin committed
72 73 74 75 76
typedef struct vout_sys_s *             p_vout_sys_t;
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;

Michel Kaempf's avatar
Michel Kaempf committed
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
/*******************************************************************************
 * Macros and inline functions
 *******************************************************************************/

/* CEIL: division with round to nearest greater integer */
#define CEIL(n, d)  ( ((n) / (d)) + ( ((n) % (d)) ? 1 : 0) )

/* PAD: PAD(n, d) = CEIL(n ,d) * d */
#define PAD(n, d)   ( ((n) % (d)) ? ((((n) / (d)) + 1) * (d)) : (n) )

/* MAX and MIN: self explanatory */
#define MAX(a, b)   ( ((a) > (b)) ? (a) : (b) )
#define MIN(a, b)   ( ((a) < (b)) ? (a) : (b) )

/* MSB (big endian)/LSB (little endian) convertions - 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. */
/* ?? 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 )
#else
/* ?? cause a compilation error */
#endif

/* Macros used by input to access the TS buffer */
#define U32_AT(p)   ( ntohl ( *( (u32 *)(p) ) ) )
#define U16_AT(p)   ( ntohs ( *( (u16 *)(p) ) ) )