libdvbpsi  1.3.2
sis.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * sis.h
3  * Copyright (c) 2010-2011 VideoLAN
4  * $Id$
5  *
6  * Authors: Jean-Paul Saman <jpsaman@videolan.org>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  *
22  *****************************************************************************/
23 
33 #ifndef _DVBPSI_SIS_H_
34 #define _DVBPSI_SIS_H_
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 /*****************************************************************************
41  * dvbpsi_sis_t
42  *****************************************************************************/
54 typedef struct dvbpsi_sis_s
55 {
56  /* section */
57  uint8_t i_table_id;
58  uint16_t i_extension;
60  uint16_t i_ts_id;
61  uint8_t i_version;
66  /* encryption */
72  uint64_t i_pts_adjustment;
73  uint8_t cw_index;
75  /* splice command */
79  /* Splice Command:
80  * splice_command_type splice_info_section
81  * 0x00 splice_null()
82  * 0x01 reserved
83  * 0x02 reserved
84  * 0x03 reserved
85  * 0x04 splice_schedule()
86  * 0x05 splice_insert()
87  * 0x06 time_signal()
88  * 0x07 bandwidth_reservation()
89  * 0x08 - 0xff reserved
90  */
94  /* descriptors */
100  /* FIXME: alignment stuffing */
101  uint32_t i_ecrc;
103 } __attribute__((packed)) dvbpsi_sis_t;
104 
105 /*****************************************************************************
106  * Splice Commands
107  *****************************************************************************/
121 {
122  /* nothing */
124 
134 {
139  uint64_t i_duration;
144 
155 {
156  uint8_t component_tag;
159  uint32_t i_utc_splice_time;
166 };
167 
178 {
179  uint32_t i_splice_event_id;
182  /* if (!b_splice_event_cancel_indicator) */
186  /* if (b_program_splice_flag) */
187  uint32_t i_utc_splice_time;
192  /* if (!b_program_splice_flag) */
200  /* if (b_duration_flag) */
203  /* */
204 
207  uint8_t i_avail_num;
211  /* end */
212 
214 };
215 
225 {
226  uint8_t i_splice_count;
229 
240 {
242  /* if (b_time_specified_flag) */
243  uint64_t i_pts_time;
246  /* else reserved */
247  /* end */
248 
250 };
251 
262 {
263  uint8_t i_component_tag;
266  /* if (splice_immediate_flag) */
268  /* */
269 
271 };
272 
282 {
283  uint32_t i_splice_event_id;
286  /* if (!b_splice_event_cancel_indicator) */
292  /* if (b_program_splice_flag) && (!b_splice_immediate_flag) */
295  /* if (!b_program_splice_flag) */
301  /* if (b_duration_flag) */
304  /* */
306  uint8_t i_avail_num;
310  /* end */
312 
322 {
325 
335 {
336  /* nothing */
338 
339 /*****************************************************************************
340  * dvbpsi_sis_callback
341  *****************************************************************************/
347 typedef void (* dvbpsi_sis_callback)(void* p_cb_data, dvbpsi_sis_t* p_new_sis);
348 
349 /*****************************************************************************
350  * dvbpsi_sis_attach
351  *****************************************************************************/
364 bool dvbpsi_sis_attach(dvbpsi_t* p_dvbpsi, uint8_t i_table_id, uint16_t i_extension,
365  dvbpsi_sis_callback pf_callback, void* p_cb_data);
366 
367 /*****************************************************************************
368  * dvbpsi_sis_detach
369  *****************************************************************************/
379 void dvbpsi_sis_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension);
380 
381 /*****************************************************************************
382  * dvbpsi_sis_init/dvbpsi_sis_new
383  *****************************************************************************/
396 void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint8_t i_table_id, uint16_t i_extension,
397  uint8_t i_version, bool b_current_next, uint8_t i_protocol_version);
398 
410 dvbpsi_sis_t* dvbpsi_sis_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version,
411  bool b_current_next, uint8_t i_protocol_version);
412 
413 /*****************************************************************************
414  * dvbpsi_sis_empty/dvbpsi_sis_delete
415  *****************************************************************************/
422 void dvbpsi_sis_empty(dvbpsi_sis_t *p_sis);
423 
430 void dvbpsi_sis_delete(dvbpsi_sis_t *p_sis);
431 
432 /*****************************************************************************
433  * dvbpsi_sis_descriptor_add
434  *****************************************************************************/
447  uint8_t i_tag, uint8_t i_length,
448  uint8_t *p_data);
449 
450 /*****************************************************************************
451  * dvbpsi_sis_sections_generate
452  *****************************************************************************
453  * Generate SIS sections based on the dvbpsi_sis_t structure.
454  *****************************************************************************/
465 
466 #ifdef __cplusplus
467 };
468 #endif
469 
470 #else
471 #error "Multiple inclusions of sis.h"
472 #endif
473 
i_table_id
uint8_t i_table_id
Definition: sis.h:1
dvbpsi_sis_splice_event_s::b_splice_event_cancel_indicator
bool b_splice_event_cancel_indicator
Definition: sis.h:180
dvbpsi_sis_splice_event_s::i_component_count
uint8_t i_component_count
Definition: sis.h:193
dvbpsi_sis_component_splice_time_s::p_next
dvbpsi_sis_component_splice_time_t * p_next
Definition: sis.h:270
dvbpsi_sis_splice_event_s::i_splice_event_id
uint32_t i_splice_event_id
Definition: sis.h:179
dvbpsi_sis_cmd_splice_insert_s::b_splice_immediate_flag
bool b_splice_immediate_flag
Definition: sis.h:290
dvbpsi_sis_cmd_splice_insert_s::b_out_of_network_indicator
bool b_out_of_network_indicator
Definition: sis.h:287
dvbpsi_sis_cmd_bandwidth_reservation_t
struct dvbpsi_sis_cmd_bandwidth_reservation_s dvbpsi_sis_cmd_bandwidth_reservation_t
bandwidth_reservation() splice command definition
dvbpsi_sis_cmd_splice_schedule_s::i_splice_count
uint8_t i_splice_count
Definition: sis.h:226
dvbpsi_sis_splice_event_s::i_utc_splice_time
uint32_t i_utc_splice_time
Definition: sis.h:187
dvbpsi_sis_splice_event_s::b_program_splice_flag
bool b_program_splice_flag
Definition: sis.h:184
dvbpsi_sis_break_duration_t
struct dvbpsi_sis_break_duration_s dvbpsi_sis_break_duration_t
splice event definition
dvbpsi_sis_s::i_encryption_algorithm
uint8_t i_encryption_algorithm
Definition: sis.h:69
dvbpsi_sis_s::b_current_next
bool b_current_next
Definition: sis.h:64
dvbpsi_sis_callback
void(* dvbpsi_sis_callback)(void *p_cb_data, dvbpsi_sis_t *p_new_sis)
Callback type definition.
Definition: sis.h:347
dvbpsi_sis_cmd_splice_insert_s
splice_insert() splice command definition
Definition: sis.h:282
dvbpsi_sis_s::i_ts_id
uint16_t i_ts_id
Definition: sis.h:60
dvbpsi_sis_component_utc_splice_time_s
combined component tag and UTC splice time definition
Definition: sis.h:155
dvbpsi_sis_s::i_splice_command_type
uint8_t i_splice_command_type
Definition: sis.h:77
dvbpsi_psi_section_s
PSI section structure.
Definition: psi.h:69
dvbpsi_sis_cmd_splice_insert_s::b_program_splice_flag
bool b_program_splice_flag
Definition: sis.h:288
dvbpsi_sis_cmd_splice_insert_t
struct dvbpsi_sis_cmd_splice_insert_s dvbpsi_sis_cmd_splice_insert_t
splice_insert() splice command definition
dvbpsi_sis_s::i_descriptors_length
uint16_t i_descriptors_length
Definition: sis.h:95
dvbpsi_sis_cmd_splice_insert_s::p_data
dvbpsi_sis_component_splice_time_t * p_data
Definition: sis.h:298
dvbpsi_sis_s::i_table_id
uint8_t i_table_id
Definition: sis.h:57
dvbpsi_sis_cmd_splice_insert_s::i_unique_program_id
uint16_t i_unique_program_id
Definition: sis.h:305
dvbpsi_sis_cmd_time_signal_s::p_splice_time
dvbpsi_sis_splice_time_t * p_splice_time
Definition: sis.h:323
dvbpsi_sis_cmd_splice_insert_s::i_avail_num
uint8_t i_avail_num
Definition: sis.h:306
dvbpsi_sis_splice_time_s
splice_time() splice definition
Definition: sis.h:240
dvbpsi_sis_splice_event_s::p_next
dvbpsi_sis_splice_event_t * p_next
Definition: sis.h:213
dvbpsi_sis_descriptor_add
dvbpsi_descriptor_t * dvbpsi_sis_descriptor_add(dvbpsi_sis_t *p_sis, uint8_t i_tag, uint8_t i_length, uint8_t *p_data)
Add a descriptor in the SIS service.
dvbpsi_sis_component_utc_splice_time_s::component_tag
uint8_t component_tag
Definition: sis.h:156
dvbpsi_sis_cmd_splice_schedule_s::p_splice_event
dvbpsi_sis_splice_event_t * p_splice_event
Definition: sis.h:227
dvbpsi_sis_splice_event_s::b_out_of_network_indicator
bool b_out_of_network_indicator
Definition: sis.h:183
dvbpsi_sis_cmd_splice_insert_s::b_duration_flag
bool b_duration_flag
Definition: sis.h:289
dvbpsi_sis_cmd_time_signal_t
struct dvbpsi_sis_cmd_time_signal_s dvbpsi_sis_cmd_time_signal_t
time_signal() splice command definition
dvbpsi_sis_cmd_bandwidth_reservation_s
bandwidth_reservation() splice command definition
Definition: sis.h:335
i_extension
uint16_t i_extension
Definition: sis.h:2
dvbpsi_sis_splice_time_s::i_pts_time
uint64_t i_pts_time
Definition: sis.h:243
dvbpsi_sis_splice_event_s::p_break_duration
dvbpsi_sis_break_duration_t * p_break_duration
Definition: sis.h:201
dvbpsi_sis_splice_event_s::i_avail_num
uint8_t i_avail_num
Definition: sis.h:207
dvbpsi_sis_splice_event_s::p_data
dvbpsi_sis_component_utc_splice_time_t * p_data
Definition: sis.h:196
dvbpsi_sis_cmd_splice_null_t
struct dvbpsi_sis_cmd_splice_null_s dvbpsi_sis_cmd_splice_null_t
The Splice Info Section (SIS) defines some Splice Commands, which are described below:
dvbpsi_sis_s
SIS structure.
Definition: sis.h:55
dvbpsi_sis_cmd_splice_insert_s::b_splice_event_cancel_indicator
bool b_splice_event_cancel_indicator
Definition: sis.h:284
dvbpsi_sis_s::b_encrypted_packet
bool b_encrypted_packet
Definition: sis.h:67
dvbpsi_sis_detach
void dvbpsi_sis_detach(dvbpsi_t *p_dvbpsi, uint8_t i_table_id, uint16_t i_extension)
Destroy a SIS decoder.
dvbpsi_sis_s::p_splice_command
void * p_splice_command
Definition: sis.h:91
dvbpsi_sis_empty
void dvbpsi_sis_empty(dvbpsi_sis_t *p_sis)
Clean a dvbpsi_sis_t structure.
dvbpsi_sis_s::i_splice_command_length
uint16_t i_splice_command_length
Definition: sis.h:76
dvbpsi_sis_s::i_ecrc
uint32_t i_ecrc
Definition: sis.h:101
dvbpsi_sis_splice_event_s::i_unique_program_id
uint16_t i_unique_program_id
Definition: sis.h:205
dvbpsi_sis_break_duration_s
splice break duration
Definition: sis.h:134
dvbpsi_sis_splice_time_s::p_next
dvbpsi_sis_splice_time_t * p_next
Definition: sis.h:249
i_version
uint8_t i_version
Definition: sis.h:5
dvbpsi_sis_cmd_splice_insert_s::p_splice_time
dvbpsi_sis_splice_time_t * p_splice_time
Definition: sis.h:293
dvbpsi_sis_cmd_splice_insert_s::p_break_duration
dvbpsi_sis_break_duration_t * p_break_duration
Definition: sis.h:302
dvbpsi_sis_sections_generate
dvbpsi_psi_section_t * dvbpsi_sis_sections_generate(dvbpsi_t *p_dvbpsi, dvbpsi_sis_t *p_sis)
SIS generator.
dvbpsi_sis_break_duration_s::b_auto_return
bool b_auto_return
Definition: sis.h:135
dvbpsi_sis_s::i_version
uint8_t i_version
Definition: sis.h:61
dvbpsi_sis_splice_time_s::b_time_specified_flag
bool b_time_specified_flag
Definition: sis.h:241
dvbpsi_sis_cmd_splice_insert_s::i_splice_event_id
uint32_t i_splice_event_id
Definition: sis.h:283
dvbpsi_sis_s::cw_index
uint8_t cw_index
Definition: sis.h:73
dvbpsi_sis_cmd_splice_insert_s::i_avails_expected
uint8_t i_avails_expected
Definition: sis.h:308
dvbpsi_sis_splice_event_s::i_avails_expected
uint8_t i_avails_expected
Definition: sis.h:209
dvbpsi_sis_component_splice_time_s::p_splice_time
dvbpsi_sis_splice_time_t * p_splice_time
Definition: sis.h:267
dvbpsi_sis_cmd_time_signal_s
time_signal() splice command definition
Definition: sis.h:322
dvbpsi_sis_s::i_protocol_version
uint8_t i_protocol_version
Definition: sis.h:62
dvbpsi_sis_cmd_splice_schedule_t
struct dvbpsi_sis_cmd_splice_schedule_s dvbpsi_sis_cmd_splice_schedule_t
splice_schedule() splice command definition
dvbpsi_sis_init
void dvbpsi_sis_init(dvbpsi_sis_t *p_sis, uint8_t i_table_id, uint16_t i_extension, uint8_t i_version, bool b_current_next, uint8_t i_protocol_version)
Initialize a user-allocated dvbpsi_sis_t structure.
dvbpsi_sis_splice_event_s::b_duration_flag
bool b_duration_flag
Definition: sis.h:185
dvbpsi_sis_delete
void dvbpsi_sis_delete(dvbpsi_sis_t *p_sis)
Clean and free a dvbpsi_sis_t structure.
dvbpsi_sis_component_splice_time_s::i_component_tag
uint8_t i_component_tag
Definition: sis.h:263
dvbpsi_sis_s::p_first_descriptor
dvbpsi_descriptor_t * p_first_descriptor
Definition: sis.h:97
dvbpsi_sis_break_duration_s::i_duration
uint64_t i_duration
Definition: sis.h:139
dvbpsi_sis_s::i_extension
uint16_t i_extension
Definition: sis.h:58
dvbpsi_s
DVBPSI handle structure.
Definition: dvbpsi.h:143
b_current_next
bool b_current_next
Definition: sis.h:8
dvbpsi_sis_new
dvbpsi_sis_t * dvbpsi_sis_new(uint8_t i_table_id, uint16_t i_extension, uint8_t i_version, bool b_current_next, uint8_t i_protocol_version)
Allocate and initialize a new dvbpsi_sis_t structure.
dvbpsi_sis_cmd_splice_null_s
splice_null() splice command definition
Definition: sis.h:121
dvbpsi_sis_component_utc_splice_time_s::p_next
dvbpsi_sis_component_utc_splice_time_t * p_next
Definition: sis.h:165
dvbpsi_sis_cmd_splice_insert_s::i_component_count
uint8_t i_component_count
Definition: sis.h:296
dvbpsi_sis_cmd_splice_schedule_s
splice_schedule() splice command definition
Definition: sis.h:225
dvbpsi_sis_component_splice_time_s
component_tag, splice_time definition
Definition: sis.h:262
dvbpsi_sis_s::i_pts_adjustment
uint64_t i_pts_adjustment
Definition: sis.h:72
i_protocol_version
uint8_t i_protocol_version
Definition: sis.h:6
dvbpsi_descriptor_s
Descriptor structure.
Definition: descriptor.h:83
dvbpsi_sis_splice_event_s
splice events structure,
Definition: sis.h:178
dvbpsi_sis_component_utc_splice_time_s::i_utc_splice_time
uint32_t i_utc_splice_time
Definition: sis.h:159