common.h 6.33 KB
Newer Older
1
/*****************************************************************************
Michel Kaempf's avatar
Michel Kaempf committed
2
 * common.h: common definitions
3
 * Collection of useful common types and macros definitions
4
 *****************************************************************************
5
 * Copyright (C) 1998, 1999, 2000 VideoLAN
Sam Hocevar's avatar
 
Sam Hocevar committed
6
 * $Id: common.h,v 1.25 2001/01/18 05:13:22 sam Exp $
7
 *
8 9
 * Authors: Samuel Hocevar <sam@via.ecp.fr>
 *          Vincent Seguin <seguin@via.ecp.fr>
10 11 12 13 14
 *
 * 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.
15
 * 
16 17
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
20
 *
21 22 23
 * 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.
24 25 26
 *****************************************************************************/

/*****************************************************************************
Michel Kaempf's avatar
Michel Kaempf committed
27 28
 * required headers:
 *  config.h
29
 *****************************************************************************/
Michel Kaempf's avatar
Michel Kaempf committed
30

31
/*****************************************************************************
Vincent Seguin's avatar
Vincent Seguin committed
32
 * Basic types definitions
33
 *****************************************************************************/
Michel Kaempf's avatar
Michel Kaempf committed
34

Michel Lespinasse's avatar
 
Michel Lespinasse committed
35
#include "int_types.h"
Michel Kaempf's avatar
Michel Kaempf committed
36 37

typedef u8                  byte_t;
38

Michel Kaempf's avatar
Michel Kaempf committed
39
/* Boolean type */
Sam Hocevar's avatar
 
Sam Hocevar committed
40
#ifdef BOOLEAN_T_IN_SYS_TYPES_H
41
#   include <sys/types.h>
Sam Hocevar's avatar
 
Sam Hocevar committed
42 43
#else
typedef int                 boolean_t;
Benoit Steiner's avatar
Benoit Steiner committed
44
#endif
45
#ifdef SYS_GNU
46 47 48 49
#   define _MACH_I386_BOOLEAN_H_
#endif

/* ptrdiff_t definition */
Christophe Massiot's avatar
Christophe Massiot committed
50
#ifdef HAVE_STDDEF_H
51 52 53
#   include <stddef.h>
#else
#   include <malloc.h>
Christophe Massiot's avatar
Christophe Massiot committed
54 55
#   ifndef _PTRDIFF_T
#       define _PTRDIFF_T
56 57
/* Not portable in a 64-bit environment. */
typedef int                 ptrdiff_t;
Christophe Massiot's avatar
Christophe Massiot committed
58
#   endif
59
#endif
Michel Kaempf's avatar
Michel Kaempf committed
60 61 62 63

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

Sam Hocevar's avatar
 
Sam Hocevar committed
64 65 66 67 68 69 70
/* DCT elements types */
#ifndef VDEC_DFT
typedef short dctelem_t;
#else
typedef int dctelem_t;
#endif

71
/*****************************************************************************
Vincent Seguin's avatar
Vincent Seguin committed
72
 * Classes declaration
73
 *****************************************************************************/
Vincent Seguin's avatar
Vincent Seguin committed
74

75 76 77 78 79 80 81 82 83 84 85 86
/* 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;

/* Playlist */
struct playlist_s;

typedef struct playlist_s *             p_playlist_t;

Vincent Seguin's avatar
Vincent Seguin committed
87 88 89 90 91
/* Interface */
struct intf_thread_s;
struct intf_sys_s;
struct intf_console_s;
struct intf_msg_s;
92
struct intf_channel_s;
Vincent Seguin's avatar
Vincent Seguin committed
93 94 95 96 97

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;
98
typedef struct intf_channel_s *         p_intf_channel_t;
Vincent Seguin's avatar
Vincent Seguin committed
99 100 101

/* Input */
struct input_thread_s;
102
struct input_vlan_s;
Vincent Seguin's avatar
Vincent Seguin committed
103 104 105
struct input_cfg_s;

typedef struct input_thread_s *         p_input_thread_t;
106
typedef struct input_vlan_s *           p_input_vlan_t;
Vincent Seguin's avatar
Vincent Seguin committed
107 108 109 110
typedef struct input_cfg_s *            p_input_cfg_t;

/* Audio */
struct aout_thread_s;
111
struct aout_sys_s;
Vincent Seguin's avatar
Vincent Seguin committed
112 113

typedef struct aout_thread_s *          p_aout_thread_t;
114
typedef struct aout_sys_s *             p_aout_sys_t;
Vincent Seguin's avatar
Vincent Seguin committed
115 116 117

/* Video */
struct vout_thread_s;
Vincent Seguin's avatar
Vincent Seguin committed
118
struct vout_font_s;
Vincent Seguin's avatar
Vincent Seguin committed
119 120 121 122 123 124
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
125
typedef struct vout_font_s *            p_vout_font_t;
Vincent Seguin's avatar
Vincent Seguin committed
126 127 128 129 130
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;

Sam Hocevar's avatar
 
Sam Hocevar committed
131 132 133
/* Misc */
struct macroblock_s;

134
/*****************************************************************************
Michel Kaempf's avatar
Michel Kaempf committed
135
 * Macros and inline functions
136
 *****************************************************************************/
Michel Kaempf's avatar
Michel Kaempf committed
137

Christophe Massiot's avatar
Christophe Massiot committed
138 139 140 141 142 143
#ifdef NTOHL_IN_SYS_PARAM_H
#   include <sys/param.h>
#else
#   include <netinet/in.h>
#endif

Michel Kaempf's avatar
Michel Kaempf committed
144 145 146 147 148 149 150
/* 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 */
151
#ifndef MAX
Michel Kaempf's avatar
Michel Kaempf committed
152
#define MAX(a, b)   ( ((a) > (b)) ? (a) : (b) )
153 154
#endif
#ifndef MIN
Michel Kaempf's avatar
Michel Kaempf committed
155
#define MIN(a, b)   ( ((a) < (b)) ? (a) : (b) )
156
#endif
Michel Kaempf's avatar
Michel Kaempf committed
157

Sam Hocevar's avatar
 
Sam Hocevar committed
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
/*
 * This is stolen from the livid source who stole it from the kernel
 */

#if defined(SYS_BEOS)
#   define swab32(x) B_BENDIAN_TO_HOST_INT32(x)
#else
#   ifdef WORDS_BIG_ENDIAN
#       define swab32(x) (x)
#   else
#       if defined (HAVE_X86_BSWAP)
static __inline__ const u32 __i386_swab32( u32 x )
{
    __asm__("bswap %0" : "=r" (x) : "0" (x));
    return x;
}
#           define swab32(x) __i386_swab32(x)
#       else
#           define swab32(x)                                                 \
            ( ( (u32)(((u8*)&x)[0]) << 24 ) | ( (u32)(((u8*)&x)[1]) << 16 ) |\
              ( (u32)(((u8*)&x)[2]) << 8 )  | ( (u32)(((u8*)&x)[3])) )
#       endif
#   endif
#endif

183
/* MSB (big endian)/LSB (little endian) conversions - network order is always
Michel Kaempf's avatar
Michel Kaempf committed
184 185 186 187
 * 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. */
Sam Hocevar's avatar
 
Sam Hocevar committed
188 189 190
/* FIXME: hton64 should be declared as an extern inline function to avoid
 * border effects (see byteorder.h) */
#if WORDS_BIGENDIAN
Michel Kaempf's avatar
Michel Kaempf committed
191 192
#define hton16      htons
#define hton32      htonl
Sam Hocevar's avatar
 
Sam Hocevar committed
193
#define hton64(i)   ( i )
194
#define ntoh16      ntohs
Michel Kaempf's avatar
Michel Kaempf committed
195
#define ntoh32      ntohl
Sam Hocevar's avatar
 
Sam Hocevar committed
196 197
#define ntoh64(i)   ( i )
#else
Michel Kaempf's avatar
Michel Kaempf committed
198 199
#define hton16      htons
#define hton32      htonl
Sam Hocevar's avatar
 
Sam Hocevar committed
200
#define hton64(i)   ( ((u64)(htonl((i) & 0xffffffff)) << 32) | htonl(((i) >> 32) & 0xffffffff ) )
Michel Kaempf's avatar
Michel Kaempf committed
201 202
#define ntoh16      ntohs
#define ntoh32      ntohl
Sam Hocevar's avatar
 
Sam Hocevar committed
203
#define ntoh64      hton64
Michel Kaempf's avatar
Michel Kaempf committed
204 205
#endif

206
/* Macros with automatic casts */
Sam Hocevar's avatar
 
Sam Hocevar committed
207
#define U32_AT(p)   ( swab32 ( *( (u32 *)(p) ) ) )
Michel Kaempf's avatar
Michel Kaempf committed
208
#define U16_AT(p)   ( ntohs ( *( (u16 *)(p) ) ) )
Sam Hocevar's avatar
 
Sam Hocevar committed
209