libdvbpsi
1.1.0
Main Page
Related Pages
Data Structures
Files
File List
Globals
src
dvbpsi.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* dvbpsi.h
3
* Copyright (C) 2001-2012 VideoLAN
4
* $Id$
5
*
6
* Authors: Arnaud de Bossoreille de Ribou <bozo@via.ecp.fr>
7
* Jean-Paul Saman <jpsaman@videolan.org>
8
*
9
* This library is free software; you can redistribute it and/or
10
* modify it under the terms of the GNU Lesser General Public
11
* License as published by the Free Software Foundation; either
12
* version 2.1 of the License, or (at your option) any later version.
13
*
14
* This library is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* Lesser General Public License for more details.
18
*
19
* You should have received a copy of the GNU Lesser General Public
20
* License along with this library; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
*
23
*****************************************************************************/
24
35
#ifndef _DVBPSI_DVBPSI_H_
36
#define _DVBPSI_DVBPSI_H_
37
38
#define DVBPSI_VERSION 1.1.0
39
#define DVBPSI_VERSION_INT ((1<<16)+(1<<8)+0)
41
#ifdef __cplusplus
42
extern
"C"
{
43
#endif
44
45
/*****************************************************************************
46
* Helper for GCC version checks borrowed from VLC.
47
*****************************************************************************/
52
#ifdef __GNUC__
53
# define DVBPSI_GCC_VERSION(maj,min) \
54
((__GNUC__ > (maj)) || (__GNUC__ == (maj) && __GNUC_MINOR__ >= (min)))
55
#else
56
# define DVBPSI_GCC_VERSION(maj,min) (0)
57
#endif
58
59
/*****************************************************************************
60
* dvbpsi_t
61
*****************************************************************************/
66
typedef
struct
dvbpsi_s
dvbpsi_t
;
67
72
enum
dvbpsi_msg_level
73
{
74
DVBPSI_MSG_NONE
= -1,
75
DVBPSI_MSG_ERROR
= 0,
76
DVBPSI_MSG_WARN
= 1,
77
DVBPSI_MSG_DEBUG
= 2,
78
};
83
typedef
enum
dvbpsi_msg_level
dvbpsi_msg_level_t
;
84
85
/*****************************************************************************
86
* dvbpsi_message_cb
87
*****************************************************************************/
94
typedef
void (*
dvbpsi_message_cb
)(
dvbpsi_t
*handle,
95
const
dvbpsi_msg_level_t level,
96
const
char
* msg);
97
98
/*****************************************************************************
99
* dvbpsi_decoder_t
100
*****************************************************************************/
105
typedef
struct
dvbpsi_decoder_s
dvbpsi_decoder_t
;
106
111
/* Clever cast borrowed from VLC */
112
#if DVBPSI_GCC_VERSION(4,0)
113
# ifndef __cplusplus
114
# define DVBPSI_DECODER( x ) \
115
__builtin_choose_expr( \
116
__builtin_offsetof(__typeof__(*(x)), i_magic), \
117
(void)0, \
118
(dvbpsi_decoder_t *)(x))
119
# else
120
# define DVBPSI_DECODER( x ) \
121
((dvbpsi_decoder_t *)(x) \
122
+ 0 * __builtin_offsetof(__typeof__(*(x)), i_magic))
123
# endif
124
#else
125
# define DVBPSI_DECODER(x) ((dvbpsi_decoder_t *)(x))
126
#endif
127
128
/*****************************************************************************
129
* dvbpsi_t
130
*****************************************************************************/
142
struct
dvbpsi_s
143
{
144
dvbpsi_decoder_t
*
p_decoder
;
146
/* Messages callback */
147
dvbpsi_message_cb
pf_message
;
148
enum
dvbpsi_msg_level
i_msg_level
;
150
/* private data pointer for use by caller, not by libdvbpsi itself ! */
151
void
*
p_sys
;
155
};
156
157
/*****************************************************************************
158
* dvbpsi_new
159
*****************************************************************************/
171
dvbpsi_t
*
dvbpsi_new
(
dvbpsi_message_cb
callback,
enum
dvbpsi_msg_level
level);
172
173
/*****************************************************************************
174
* dvbpsi_delete
175
*****************************************************************************/
185
void
dvbpsi_delete
(
dvbpsi_t
*p_dvbpsi);
186
187
/*****************************************************************************
188
* dvbpsi_packet_push
189
*****************************************************************************/
199
bool
dvbpsi_packet_push
(
dvbpsi_t
*p_dvbpsi, uint8_t* p_data);
200
201
/*****************************************************************************
202
* dvbpsi_psi_section_t
203
*****************************************************************************/
204
209
typedef
struct
dvbpsi_psi_section_s
dvbpsi_psi_section_t
;
210
211
/*****************************************************************************
212
* dvbpsi_callback_gather_t
213
*****************************************************************************/
219
typedef
void (*
dvbpsi_callback_gather_t
)(
dvbpsi_t
*p_dvbpsi,
220
dvbpsi_psi_section_t
* p_section);
222
/*****************************************************************************
223
* DVBPSI_DECODER_COMMON
224
*****************************************************************************/
231
#define DVBPSI_DECODER_COMMON \
232
\
236
\
237
uint8_t i_magic[3]; \
238
bool b_complete_header; \
239
bool b_discontinuity; \
240
bool b_current_valid; \
241
uint8_t i_continuity_counter; \
242
uint8_t i_last_section_number; \
243
dvbpsi_psi_section_t *p_current_section; \
244
dvbpsi_psi_section_t *p_sections; \
245
dvbpsi_callback_gather_t pf_gather; \
246
int i_section_max_size; \
247
int i_need; \
248
250
/*****************************************************************************
251
* struct dvbpsi_decoder_s
252
*****************************************************************************/
253
260
struct
dvbpsi_decoder_s
261
{
262
DVBPSI_DECODER_COMMON
263
};
264
265
/*****************************************************************************
266
* dvbpsi_decoder_new
267
*****************************************************************************/
284
void
*
dvbpsi_decoder_new
(
dvbpsi_callback_gather_t
pf_gather,
285
const
int
i_section_max_size,
286
const
bool
b_discontinuity,
287
const
size_t
psi_size);
288
289
/*****************************************************************************
290
* dvbpsi_decoder_delete
291
*****************************************************************************/
301
void
dvbpsi_decoder_delete
(
dvbpsi_decoder_t
*p_decoder);
302
303
/*****************************************************************************
304
* dvbpsi_decoder_reset
305
*****************************************************************************/
314
void
dvbpsi_decoder_reset
(
dvbpsi_decoder_t
* p_decoder,
const
bool
b_force);
315
316
/*****************************************************************************
317
* dvbpsi_decoder_psi_sections_completed
318
*****************************************************************************/
325
bool
dvbpsi_decoder_psi_sections_completed
(
dvbpsi_decoder_t
* p_decoder);
326
327
/*****************************************************************************
328
* dvbpsi_decoder_psi_section_add
329
*****************************************************************************/
337
bool
dvbpsi_decoder_psi_section_add
(
dvbpsi_decoder_t
*p_decoder,
dvbpsi_psi_section_t
*p_section);
338
339
/*****************************************************************************
340
* dvbpsi_decoder_present
341
*****************************************************************************/
351
bool
dvbpsi_decoder_present
(
dvbpsi_t
*p_dvbpsi);
352
353
#ifdef __cplusplus
354
};
355
#endif
356
357
#else
358
#error "Multiple inclusions of dvbpsi.h"
359
#endif
Generated on Sat May 25 2013 17:44:13 for libdvbpsi by
1.8.4