00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00036 #ifndef _DVBPSI_EIT_H_
00037 #define _DVBPSI_EIT_H_
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00043
00044
00045
00046
00058 typedef struct dvbpsi_eit_event_s
00059 {
00060 uint16_t i_event_id;
00061 uint64_t i_start_time;
00062 uint32_t i_duration;
00063 uint8_t i_running_status;
00064 int b_free_ca;
00065 uint16_t i_descriptors_length;
00067 dvbpsi_descriptor_t * p_first_descriptor;
00071 struct dvbpsi_eit_event_s * p_next;
00074 } dvbpsi_eit_event_t;
00075
00076
00077
00078
00079
00091 typedef struct dvbpsi_eit_s
00092 {
00093 uint16_t i_service_id;
00094 uint8_t i_version;
00095 int b_current_next;
00096 uint16_t i_ts_id;
00097 uint16_t i_network_id;
00098 uint8_t i_segment_last_section_number;
00099 uint8_t i_last_table_id;
00101 dvbpsi_eit_event_t * p_first_event;
00103 } dvbpsi_eit_t;
00104
00105
00106
00107
00108
00114 typedef void (* dvbpsi_eit_callback)(void* p_cb_data, dvbpsi_eit_t* p_new_eit);
00115
00116
00117
00118
00119
00132 int dvbpsi_AttachEIT(dvbpsi_decoder_t * p_psi_decoder, uint8_t i_table_id,
00133 uint16_t i_extension, dvbpsi_eit_callback pf_callback,
00134 void* p_cb_data);
00135
00136
00137
00138
00139
00149 void dvbpsi_DetachEIT(dvbpsi_demux_t * p_demux, uint8_t i_table_id,
00150 uint16_t i_extension);
00151
00152
00153
00154
00155
00172 void dvbpsi_InitEIT(dvbpsi_eit_t* p_eit, uint16_t i_service_id, uint8_t i_version,
00173 int b_current_next, uint16_t i_ts_id, uint16_t i_network_id,
00174 uint8_t i_segment_last_section_number,
00175 uint8_t i_last_table_id);
00176
00187 #define dvbpsi_NewEIT(p_eit, i_service_id, i_version, b_current_next, i_ts_id, i_network_id, i_segment_last_section_number, i_last_table_id) \
00188 do { \
00189 p_eit = (dvbpsi_eit_t*)malloc(sizeof(dvbpsi_eit_t)); \
00190 if(p_eit != NULL) \
00191 dvbpsi_InitEIT(p_eit, i_service_id, i_version, b_current_next, i_ts_id, i_network_id, i_segment_last_section_number, i_last_table_id); \
00192 } while(0);
00193
00194
00195
00196
00197
00204 void dvbpsi_EmptyEIT(dvbpsi_eit_t* p_eit);
00205
00212 #define dvbpsi_DeleteEIT(p_eit) \
00213 do { \
00214 dvbpsi_EmptyEIT(p_eit); \
00215 free(p_eit); \
00216 } while(0);
00217
00218
00219
00220
00221
00238 dvbpsi_eit_event_t* dvbpsi_EITAddEvent(dvbpsi_eit_t* p_eit,
00239 uint16_t i_event_id, uint64_t i_start_time, uint32_t i_duration,
00240 uint8_t i_running_status, int b_free_ca);
00241
00242
00243
00244
00257 dvbpsi_descriptor_t* dvbpsi_EITEventAddDescriptor(
00258 dvbpsi_eit_event_t* p_event,
00259 uint8_t i_tag, uint8_t i_length,
00260 uint8_t* p_data);
00261
00262 #ifdef __cplusplus
00263 };
00264 #endif
00265
00266 #else
00267 #error "Multiple inclusions of eit.h"
00268 #endif
00269