7 #include <lib/dvb/esection.h>
8 #include <lib/base/estring.h>
9 #include <lib/base/eerror.h>
10 #include <lib/base/eptrlist.h>
11 #include <lib/dvb/lowlevel/sdt.h>
12 #include <lib/dvb/lowlevel/descr.h>
13 #include <lib/dvb/lowlevel/ca.h>
14 #include <lib/dvb/lowlevel/pmt.h>
15 #include <lib/dvb/lowlevel/nit.h>
16 #include <lib/dvb/lowlevel/eit.h>
17 #include <lib/dvb/lowlevel/bat.h>
19 time_t parseDVBtime(__u8 t1
, __u8 t2
, __u8 t3
, __u8 t4
, __u8 t5
);
29 inline Descriptor(descr_gen_t
*descr
)
30 :tag(*((__u8
*)descr
)), len((__u8
)descr
->descriptor_length
)
34 inline virtual ~Descriptor(){};
36 static Descriptor
*create(descr_gen_t
*data
, int tsidonid
=0);
37 int Tag() { return tag
; }
47 </ComponentDescriptor>
51 virtual eString
toString()=0;
55 class UnknownDescriptor
: public Descriptor
59 UnknownDescriptor(descr_gen_t
*descr
);
62 int length() { return len
-2; }
65 class ServiceDescriptor
: public Descriptor
68 int service_type
, tsidonid
;
69 eString service_provider
, service_name
;
70 static const int CTag() { return DESCR_SERVICE
; }
71 ServiceDescriptor(sdt_service_desc
*descr
, int tsidonid
);
76 class CAIdentifierDescriptor
: public Descriptor
81 CAIdentifierDescriptor(descr_gen_t
*descr
);
82 ~CAIdentifierDescriptor();
86 class LinkageDescriptor
: public Descriptor
89 int transport_stream_id
;
90 int original_network_id
;
101 int initial_service_id
;
103 LinkageDescriptor(descr_linkage_struct
*descr
);
104 ~LinkageDescriptor();
108 class NVODReferenceEntry
111 bool operator==( const NVODReferenceEntry
&e
)
113 return e
.transport_stream_id
== transport_stream_id
114 && e
.original_network_id
== original_network_id
115 && e
.service_id
== service_id
;
117 __u16 transport_stream_id
, original_network_id
, service_id
;
118 NVODReferenceEntry(__u16 transport_stream_id
, __u16 original_network_id
, __u16 service_id
);
119 ~NVODReferenceEntry();
122 class NVODReferenceDescriptor
: public Descriptor
125 NVODReferenceDescriptor(descr_gen_t
*descr
);
126 ~NVODReferenceDescriptor();
129 ePtrList
<NVODReferenceEntry
> entries
;
132 class TimeShiftedServiceDescriptor
: public Descriptor
135 int reference_service_id
;
136 TimeShiftedServiceDescriptor(descr_time_shifted_service_struct
*descr
);
140 class TimeShiftedEventDescriptor
: public Descriptor
143 int reference_service_id
;
144 int reference_event_id
;
145 TimeShiftedEventDescriptor(descr_time_shifted_event_struct
*descr
);
150 class StreamIdentifierDescriptor
: public Descriptor
154 StreamIdentifierDescriptor(descr_stream_identifier_struct
*descr
);
158 class CADescriptor
: public Descriptor
161 __u16 CA_system_ID
, CA_PID
;
163 CADescriptor(ca_descr_t
*descr
);
168 class NetworkNameDescriptor
: public Descriptor
171 eString network_name
;
172 NetworkNameDescriptor(descr_gen_t
*descr
);
173 ~NetworkNameDescriptor();
177 class CableDeliverySystemDescriptor
: public Descriptor
181 int FEC_outer
, modulation
, symbol_rate
, FEC_inner
;
182 CableDeliverySystemDescriptor(descr_cable_delivery_system_struct
*descr
);
183 ~CableDeliverySystemDescriptor();
187 class SatelliteDeliverySystemDescriptor
: public Descriptor
191 __u16 orbital_position
;
197 SatelliteDeliverySystemDescriptor(descr_satellite_delivery_system_struct
*descr
);
198 ~SatelliteDeliverySystemDescriptor();
202 class TerrestrialDeliverySystemDescriptor
: public Descriptor
205 __u32 centre_frequency
;
208 int hierarchy_information
;
209 int code_rate_hp_stream
;
210 int code_rate_lp_stream
;
212 int transmission_mode
;
213 int other_frequency_flag
;
214 TerrestrialDeliverySystemDescriptor(descr_terrestrial_delivery_system_struct
*descr
);
215 ~TerrestrialDeliverySystemDescriptor();
219 class ServiceListDescriptorEntry
222 ServiceListDescriptorEntry(__u16 service_id
, __u8 service_type
);
223 ~ServiceListDescriptorEntry();
229 class ServiceListDescriptor
: public Descriptor
232 ServiceListDescriptor(descr_gen_t
*descr
);
233 ~ServiceListDescriptor();
236 ePtrList
<ServiceListDescriptorEntry
> entries
;
239 class ShortEventDescriptor
: public Descriptor
242 ShortEventDescriptor(descr_gen_t
*descr
, int tsidonid
);
243 ShortEventDescriptor(): Descriptor((descr_gen_t
*)"\x4d") { };
245 char language_code
[3];
251 class ISO639LanguageDescriptor
: public Descriptor
254 ISO639LanguageDescriptor(descr_gen_t
*descr
);
256 char language_code
[3];
260 class AC3Descriptor
: public Descriptor
263 AC3Descriptor(descr_gen_t
*descr
);
265 int AC3_type
, bsid
, mainid
, asvc
;
268 class BouquetNameDescriptor
: public Descriptor
271 BouquetNameDescriptor(descr_gen_t
*descr
);
279 eString item_description
;
281 ItemEntry(eString
&item_description
, eString
&item
);
285 class ExtendedEventDescriptor
: public Descriptor
288 ExtendedEventDescriptor(descr_gen_t
*descr
, int tsidonid
);
290 int descriptor_number
;
291 int last_descriptor_number
;
292 char language_code
[3];
293 ePtrList
< ItemEntry
> items
;
298 class ComponentDescriptor
: public Descriptor
301 ComponentDescriptor(descr_component_struct
*descr
);
304 int stream_content
, component_type
, component_tag
;
305 char language_code
[3];
309 class ContentDescriptor
: public Descriptor
312 ContentDescriptor(descr_gen_t
*descr
);
313 ePtrList
< descr_content_entry_struct
> contentList
;
317 class LesRadiosDescriptor
: public Descriptor
320 LesRadiosDescriptor(descr_lesradios_struct
*descr
);
327 class MHWDataDescriptor
: public Descriptor
330 MHWDataDescriptor(descr_mhw_data_struct
*desrc
);
336 class ParentalRatingDescriptor
: public Descriptor
339 ParentalRatingDescriptor(descr_gen_struct
*descr
);
341 std::map
< eString
, int > entryMap
; // Country Code : age
344 class RegistrationDescriptor
: public Descriptor
347 RegistrationDescriptor(descr_gen_struct
*descr
);
349 char format_identifier
[4];
350 eString additional_identification_info
;
353 class PrivateDataSpecifierDescriptor
: public Descriptor
356 PrivateDataSpecifierDescriptor(descr_gen_struct
*descr
);
358 unsigned long private_data_specifier
;
364 SubtitleEntry(__u8
*data
);
365 char language_code
[3];
367 int composition_page_id
;
368 int ancillary_page_id
;
371 class SubtitlingDescriptor
: public Descriptor
374 SubtitlingDescriptor(descr_gen_struct
*descr
);
376 ePtrList
<SubtitleEntry
> entries
;
382 PATEntry(int program_number
, int program_map_PID
): program_number(program_number
), program_map_PID(program_map_PID
)
389 class PAT
: public eTable
392 int data(__u8
*data
);
396 PATEntry
*searchService(int service_id
)
398 for (ePtrList
<PATEntry
>::iterator
i(entries
); i
!= entries
.end(); ++i
)
399 if (i
->program_number
==service_id
)
404 int transport_stream_id
;
405 ePtrList
<PATEntry
> entries
;
413 SDTEntry(sdt_descr_t
*descr
, int tsidonid
);
415 int EIT_schedule_flag
;
416 int EIT_present_following_flag
;
419 ePtrList
< Descriptor
> descriptors
;
422 class SDT
: public eTable
425 int data(__u8
*data
);
427 enum { typeActual
=0, typeOther
=1, typeBoth
=2 };
428 SDT(int type
=typeActual
, int tsid
=-1);
430 int transport_stream_id
, original_network_id
;
431 ePtrList
<SDTEntry
> entries
;
437 PMTEntry(pmt_info_t
* info
);
440 ePtrList
< Descriptor
> ES_info
;
443 class PMT
: public eTable
446 int data(__u8
*data
);
448 PMT(int pid
, int service_id
, int version
=-1);
451 int program_number
, PCR_PID
, pid
, version_number
;
453 eTable
*createNext();
454 ePtrList
< Descriptor
> program_info
;
455 ePtrList
<__u8
> program_infoPlain
;
457 ePtrList
<PMTEntry
> streams
;
458 ePtrList
<__u8
> streamsPlain
;
466 NITEntry(nit_ts_t
* ts
);
468 __u16 transport_stream_id
, original_network_id
;
469 ePtrList
< Descriptor
> transport_descriptor
;
472 class NIT
: public eTable
475 int data(__u8
*data
);
479 typeActual
=0, typeOther
481 NIT(int pid
, int type
=0);
483 ePtrList
<NITEntry
> entries
;
484 ePtrList
< Descriptor
> network_descriptor
;
490 EITEvent(const eit_event_struct
*event
, int tsidonid
);
497 ePtrList
< Descriptor
> descriptor
;
500 class EIT
: public eTable
503 int data(__u8
*data
);
507 tsActual
=0, tsOther
, tsFaked
511 typeNowNext
=0, typeSchedule
514 EIT(int type
, int service_id
=-1, int ts
=tsActual
, int version
=-1);
515 EIT( const EIT
* eit
);
518 eTable
*createNext();
520 int type
, ts
, service_id
, version_number
, current_next_indicator
, transport_stream_id
, original_network_id
;
521 ePtrList
<EITEvent
> events
;
522 ePtrList
<__u8
> eventsPlain
;
525 class TDT
: public eTable
528 int data(__u8
*data
);
538 BATEntry(bat_loop_struct
*data
);
539 int transport_stream_id
, original_network_id
;
540 ePtrList
< Descriptor
> transport_descriptors
;
543 class BAT
: public eTable
546 int data(__u8
*data
);
551 ePtrList
< Descriptor
> bouquet_descriptors
;
552 ePtrList
<BATEntry
> entries
;