common.h 4.19 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
/*******************************************************************************
 * Classes declaration
 *******************************************************************************/

/* Interface */
struct intf_thread_s;
struct intf_sys_s;
struct intf_console_s;
struct intf_msg_s;
42
struct intf_channel_s;
Vincent Seguin's avatar
Vincent Seguin committed
43 44 45 46 47

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;
48
typedef struct intf_channel_s *         p_intf_channel_t;
Vincent Seguin's avatar
Vincent Seguin committed
49 50 51

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

typedef struct input_thread_s *         p_input_thread_t;
56
typedef struct input_vlan_s *           p_input_vlan_t;
Vincent Seguin's avatar
Vincent Seguin committed
57 58 59 60 61 62 63 64 65
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
66
struct vout_font_s;
Vincent Seguin's avatar
Vincent Seguin committed
67 68 69 70 71 72
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
73
typedef struct vout_font_s *            p_vout_font_t;
Vincent Seguin's avatar
Vincent Seguin committed
74 75 76 77 78
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
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 119 120
/*******************************************************************************
 * 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) ) ) )