summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libsi/descriptor.c119
-rw-r--r--libsi/descriptor.h21
-rwxr-xr-xlibsi/gendescr.pl7
-rw-r--r--libsi/headers.h415
-rw-r--r--libsi/section.c24
-rw-r--r--libsi/section.h19
-rw-r--r--libsi/si.c40
-rw-r--r--libsi/si.h40
-rw-r--r--libsi/util.c35
-rw-r--r--libsi/util.h36
10 files changed, 217 insertions, 539 deletions
diff --git a/libsi/descriptor.c b/libsi/descriptor.c
index eabe0c9e..433d6802 100644
--- a/libsi/descriptor.c
+++ b/libsi/descriptor.c
@@ -6,16 +6,15 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
+ * $Id: descriptor.c 1.2 2003/12/13 10:42:05 kls Exp $
+ * *
***************************************************************************/
-
#include <string.h>
#include "descriptor.h"
namespace SI {
-
-
void ShortEventDescriptor::Parse() {
unsigned int offset=0;
const descr_short_event *s;
@@ -29,9 +28,6 @@ void ShortEventDescriptor::Parse() {
text.setData(data+offset, mid->text_length);
}
-
-
-
int ExtendedEventDescriptor::getDescriptorNumber() {
return s->descriptor_number;
}
@@ -52,9 +48,6 @@ void ExtendedEventDescriptor::Parse() {
text.setData(data+offset, mid->text_length);
}
-
-
-
void ExtendedEventDescriptor::Item::Parse() {
unsigned int offset=0;
const item_extended_event *first;
@@ -65,7 +58,6 @@ void ExtendedEventDescriptor::Item::Parse() {
item.setData(data+offset, mid->item_length);
}
-
int ExtendedEventDescriptors::getTextLength() {
int ret=0;
for (int i=0;i<length;i++) {
@@ -116,18 +108,18 @@ char *ExtendedEventDescriptors::getText(char *buffer) {
memcpy(buffer+index, tempbuf, len);
index+=len;
}
-
+
ExtendedEventDescriptor::Item item;
for (Loop::Iterator it; d->itemLoop.hasNext(it); ) {
item=d->itemLoop.getNext(it);
-
+
item.item.getText(tempbuf);
len=strlen(tempbuf);
if (len) {
memcpy(buffer+index, tempbuf, len);
index+=len;
}
-
+
item.itemDescription.getText(tempbuf);
len=strlen(tempbuf);
if (len) {
@@ -140,9 +132,6 @@ char *ExtendedEventDescriptors::getText(char *buffer) {
return buffer;
}
-
-
-
int TimeShiftedEventDescriptor::getReferenceServiceId() const {
return HILO(s->reference_service_id);
}
@@ -155,17 +144,11 @@ void TimeShiftedEventDescriptor::Parse() {
s=data.getData<const descr_time_shifted_event>();
}
-
-
-
void ContentDescriptor::Parse() {
//this descriptor is only a header and a loop
nibbleLoop.setData(data+sizeof(SectionHeader), getLength()-sizeof(SectionHeader));
}
-
-
-
int ContentDescriptor::Nibble::getContentNibbleLevel1() const {
return s->content_nibble_level_1;
}
@@ -186,15 +169,11 @@ void ContentDescriptor::Nibble::Parse() {
s=data.getData<const nibble_content>();
}
-
-
-
void ParentalRatingDescriptor::Parse() {
//this descriptor is only a header and a loop
ratingLoop.setData(data+sizeof(SectionHeader), getLength()-sizeof(SectionHeader));
}
-
int ParentalRatingDescriptor::Rating::getRating() const {
return s->rating;
}
@@ -206,9 +185,6 @@ void ParentalRatingDescriptor::Rating::Parse() {
languageCode[2]=s->lang_code3;
}
-
-
-
int CaDescriptor::getCaType() const {
return HILO(s->CA_type);
}
@@ -223,8 +199,6 @@ void CaDescriptor::Parse() {
privateData.assign(data.getData(offset), getLength()-offset);
}
-
-
int StreamIdentifierDescriptor::getComponentTag() const {
return s->component_tag;
}
@@ -233,25 +207,14 @@ void StreamIdentifierDescriptor::Parse() {
s=data.getData<const descr_stream_identifier>();
}
-
-
-
void NetworkNameDescriptor::Parse() {
name.setData(data+sizeof(descr_network_name), getLength()-sizeof(descr_network_name));
}
-
-
-
void CaIdentifierDescriptor::Parse() {
identifiers.setData(data+sizeof(descr_ca_identifier), getLength()-sizeof(descr_ca_identifier));
}
-
-
-
-
-
int CarouselIdentifierDescriptor::getCarouselId() const {
return (HILO(s->carousel_id_hi) << 16) | HILO(s->carousel_id_lo);
}
@@ -264,16 +227,10 @@ void CarouselIdentifierDescriptor::Parse() {
s=data.getData<const descr_carousel_identifier>();
}
-
-
-
void ServiceListDescriptor::Parse() {
serviceLoop.setData(data+sizeof(descr_service_list), getLength()-sizeof(descr_service_list));
}
-
-
-
int ServiceListDescriptor::Service::getServiceId() const {
return HILO(s->service_id);
}
@@ -286,9 +243,6 @@ void ServiceListDescriptor::Service::Parse() {
s=data.getData<const descr_service_list_loop>();
}
-
-
-
int SatelliteDeliverySystemDescriptor::getFrequency() const {
return (HILO(s->frequency_hi) << 16) | HILO(s->frequency_lo);
}
@@ -321,9 +275,6 @@ void SatelliteDeliverySystemDescriptor::Parse() {
s=data.getData<const descr_satellite_delivery_system>();
}
-
-
-
int CableDeliverySystemDescriptor::getFrequency() const {
return (HILO(s->frequency_hi) << 16) | HILO(s->frequency_lo);
}
@@ -348,9 +299,6 @@ void CableDeliverySystemDescriptor::Parse() {
s=data.getData<const descr_cable_delivery_system>();
}
-
-
-
int TerrestrialDeliverySystemDescriptor::getFrequency() const {
return (HILO(s->frequency_hi) << 16) | HILO(s->frequency_lo);
}
@@ -391,9 +339,6 @@ void TerrestrialDeliverySystemDescriptor::Parse() {
s=data.getData<const descr_terrestrial_delivery>();
}
-
-
-
int ServiceDescriptor::getServiceType() const {
return s->service_type;
}
@@ -411,9 +356,6 @@ void NVODReferenceDescriptor::Parse() {
serviceLoop.setData(data+sizeof(descr_nvod_reference), getLength()-sizeof(descr_nvod_reference));
}
-
-
-
int NVODReferenceDescriptor::Service::getTransportStream() const {
return HILO(s->transport_stream_id);
}
@@ -430,9 +372,6 @@ void NVODReferenceDescriptor::Service::Parse() {
s=data.getData<const item_nvod_reference>();
}
-
-
-
int TimeShiftedServiceDescriptor::getReferenceServiceId() const {
return HILO(s->reference_service_id);
}
@@ -441,9 +380,6 @@ void TimeShiftedServiceDescriptor::Parse() {
s=data.getData<const descr_time_shifted_service>();
}
-
-
-
int ComponentDescriptor::getStreamContent() const {
return s->stream_content;
}
@@ -465,16 +401,10 @@ void ComponentDescriptor::Parse() {
description.setData(data+offset, getLength()-offset);
}
-
-
-
void SubtitlingDescriptor::Parse() {
subtitlingLoop.setData(data+sizeof(descr_subtitling), getLength()-sizeof(descr_subtitling));
}
-
-
-
int SubtitlingDescriptor::Subtitling::getSubtitlingType() const {
return s->subtitling_type;
}
@@ -491,9 +421,6 @@ void SubtitlingDescriptor::Subtitling::Parse() {
s=data.getData<const item_subtitling>();
}
-
-
-
int ServiceMoveDescriptor::getNewOriginalNetworkId() const {
return HILO(s->new_original_network_id);
}
@@ -510,9 +437,6 @@ void ServiceMoveDescriptor::Parse() {
s=data.getData<const descr_service_move>();
}
-
-
-
int FrequencyListDescriptor::getCodingType() const {
return s->coding_type;
}
@@ -523,19 +447,14 @@ void FrequencyListDescriptor::Parse() {
frequencies.setData(data+offset, getLength()-offset);
}
-
-
-
void ServiceIdentifierDescriptor::Parse() {
textualServiceIdentifier.setData(data+sizeof(descr_service_identifier), getLength()-sizeof(descr_service_identifier));
}
-
void MultilingualNameDescriptor::Parse() {
nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name));
}
-
void MultilingualNameDescriptor::Name::Parse() {
unsigned int offset=0;
const entry_multilingual_name *s;
@@ -546,7 +465,6 @@ void MultilingualNameDescriptor::Name::Parse() {
name.setData(data+offset, s->text_length);
}
-
int MultilingualComponentDescriptor::getComponentTag() const {
return s->component_tag;
}
@@ -554,19 +472,13 @@ int MultilingualComponentDescriptor::getComponentTag() const {
void MultilingualComponentDescriptor::Parse() {
unsigned int offset=0;
data.setPointerAndOffset<const descr_multilingual_component>(s, offset);
- nameLoop.setData(data+sizeof(descr_multilingual_component), getLength()-sizeof(descr_multilingual_component));
+ nameLoop.setData(data+sizeof(descr_multilingual_component), getLength()-sizeof(descr_multilingual_component));
}
-
-
-
void MultilingualServiceNameDescriptor::Parse() {
nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name));
}
-
-
-
void MultilingualServiceNameDescriptor::Name::Parse() {
unsigned int offset=0;
const entry_multilingual_name *s;
@@ -580,9 +492,6 @@ void MultilingualServiceNameDescriptor::Name::Parse() {
name.setData(data+offset, mid->service_name_length);
}
-
-
-
void ApplicationSignallingDescriptor::Parse() {
entryLoop.setData(data+sizeof(descr_application_signalling), getLength()-sizeof(descr_application_signalling));
}
@@ -599,10 +508,6 @@ void ApplicationSignallingDescriptor::ApplicationEntryDescriptor::Parse() {
s=data.getData<const application_signalling_entry>();
}
-
-
-
-
bool MHP_ApplicationDescriptor::isServiceBound() const {
return s->service_bound_flag;
}
@@ -615,7 +520,6 @@ int MHP_ApplicationDescriptor::getApplicationPriority() const {
return s->application_priority;
}
-
void MHP_ApplicationDescriptor::Parse() {
unsigned int offset=0;
const descr_application *dapp;
@@ -625,7 +529,6 @@ void MHP_ApplicationDescriptor::Parse() {
transportProtocolLabels.setData(data+offset, getLength()-offset);
}
-
int MHP_ApplicationDescriptor::Profile::getApplicationProfile() const {
return HILO(s->application_profile);
}
@@ -646,8 +549,6 @@ void MHP_ApplicationDescriptor::Profile::Parse() {
s=data.getData<application_profile_entry>();
}
-
-
void MHP_ApplicationNameDescriptor::Parse() {
nameLoop.setData(data+sizeof(descr_application_name), getLength()-sizeof(descr_application_name));
}
@@ -661,8 +562,6 @@ void MHP_ApplicationNameDescriptor::NameEntry::Parse() {
languageCode[2]=s->lang_code3;
}
-
-
int MHP_TransportProtocolDescriptor::getProtocolId() const {
return HILO(s->protocol_id);
}
@@ -701,8 +600,6 @@ void MHP_TransportProtocolDescriptor::Parse() {
}
}
-
-
void MHP_DVBJApplicationDescriptor::Parse() {
applicationLoop.setData(data+sizeof(descr_dvbj_application), getLength()-sizeof(descr_dvbj_application));
}
@@ -712,7 +609,6 @@ void MHP_DVBJApplicationDescriptor::ApplicationEntry::Parse() {
parameter.setData(data+sizeof(descr_dvbj_application_entry), entry->parameter_length);
}
-
void MHP_DVBJApplicationLocationDescriptor::Parse() {
unsigned int offset=0;
const descr_dvbj_application_location *first;
@@ -724,7 +620,6 @@ void MHP_DVBJApplicationLocationDescriptor::Parse() {
initialClass.setData(data+offset, getLength()-offset);
}
-
int MHP_ApplicationIconsDescriptor::getIconFlags() const {
return HILO(s->icon_flags);
}
@@ -738,5 +633,3 @@ void MHP_ApplicationIconsDescriptor::Parse() {
}
} //end of namespace
-
-
diff --git a/libsi/descriptor.h b/libsi/descriptor.h
index 24d95e8e..9abe1f01 100644
--- a/libsi/descriptor.h
+++ b/libsi/descriptor.h
@@ -6,6 +6,8 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
+ * $Id: descriptor.h 1.2 2003/12/13 10:42:08 kls Exp $
+ * *
***************************************************************************/
#ifndef LIBSI_DESCRIPTOR_H
@@ -16,7 +18,6 @@
namespace SI {
-
class ShortEventDescriptor : public Descriptor {
public:
char languageCode[3];
@@ -56,10 +57,9 @@ public:
//same semantics as with SI::String
char *getText();
//buffer must at least be getTextLength(), getMaximumTextLength() is a good choice
- char *getText(char *buffer);
+ char *getText(char *buffer);
};
-
class TimeShiftedEventDescriptor : public Descriptor {
public:
int getReferenceServiceId() const;
@@ -89,7 +89,6 @@ protected:
virtual void Parse();
};
-
class ParentalRatingDescriptor : public Descriptor {
public:
class Rating : public LoopElement {
@@ -107,7 +106,6 @@ protected:
virtual void Parse();
};
-
class CaDescriptor : public Descriptor {
public:
int getCaType() const;
@@ -172,7 +170,6 @@ protected:
virtual void Parse();
};
-
class SatelliteDeliverySystemDescriptor : public Descriptor {
public:
int getFrequency() const;
@@ -247,7 +244,6 @@ protected:
virtual void Parse();
};
-
class TimeShiftedServiceDescriptor : public Descriptor {
public:
int getReferenceServiceId() const;
@@ -288,7 +284,6 @@ protected:
virtual void Parse();
};
-
class ServiceMoveDescriptor : public Descriptor {
public:
int getNewOriginalNetworkId() const;
@@ -366,10 +361,6 @@ protected:
virtual void Parse();
};
-
-
-
-
//a descriptor currently unimplemented in this library
class UnimplementedDescriptor : public Descriptor {
protected:
@@ -418,7 +409,6 @@ protected:
virtual void Parse();
};
-
class MHP_ApplicationNameDescriptor : public Descriptor {
public:
class NameEntry : public LoopElement {
@@ -434,7 +424,6 @@ protected:
virtual void Parse();
};
-
class MHP_TransportProtocolDescriptor : public Descriptor {
public:
enum Protocol { ObjectCarousel = 0x01, IPviaDVB = 0x02, HTTPoverInteractionChannel = 0x03 };
@@ -464,7 +453,6 @@ protected:
virtual void Parse();
};
-
class MHP_DVBJApplicationLocationDescriptor : public Descriptor {
public:
String baseDirectory;
@@ -484,9 +472,6 @@ private:
const descr_application_icons_descriptor_end *s;
};
-
-
} //end of namespace
#endif //LIBSI_TABLE_H
-
diff --git a/libsi/gendescr.pl b/libsi/gendescr.pl
index 901bb834..8273f640 100755
--- a/libsi/gendescr.pl
+++ b/libsi/gendescr.pl
@@ -1,5 +1,7 @@
#!/usr/bin/perl
+# $Id: gendescr.pl 1.2 2003/12/13 10:42:05 kls Exp $
+
print "Name (ohne ...Descriptor):";
$name=<STDIN>;
$name =~ s/\n$//;
@@ -10,7 +12,6 @@ print "Struct:";
$struct=<STDIN>;
$struct =~ s/\n$//;
-
mm:
$index=0;
$which=1;
@@ -44,7 +45,7 @@ sub schreib {
print "Danke.\n";
open(OUTPUT_H, ">>".$filename_h) or die "Could not open file!!";
open(OUTPUT_C, ">>".$filename_c) or die "Could not open file!!";
-
+
if ($inner) {
$offset=" ";
} else {
@@ -63,7 +64,7 @@ sub schreib {
print (OUTPUT_H "\n".$offset." int get".$members[$i]."() const;");
}
print(OUTPUT_H "\n".$offset."virtual int getLength() { return sizeof(".$struct."); }") if ($inner);
-
+
print(OUTPUT_H "\n".$offset."protected:\n".$offset." virtual void Parse();");
print(OUTPUT_H "\n".$offset."private:\n".$offset." const ".$struct." *s;") if ($struct ne "");
print(OUTPUT_H "\n".$offset."};\n\n");
diff --git a/libsi/headers.h b/libsi/headers.h
index e8bef639..d5c11999 100644
--- a/libsi/headers.h
+++ b/libsi/headers.h
@@ -1,15 +1,17 @@
/***************************************************************************
- * *
+ * *
* (C) 2001-03 Rolf Hakenes <hakenes@hippomi.de>, under the *
* GNU GPL with contribution of Oleg Assovski, *
* www.satmania.com *
- * Adapted and extended by Marcel Wiesweg *
+ * Adapted and extended by Marcel Wiesweg *
* *
* 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. *
* *
+ * $Id: headers.h 1.2 2003/12/13 10:43:26 kls Exp $
+ * *
***************************************************************************/
#ifndef LIBSI_HEADERS_H
@@ -22,29 +24,29 @@ namespace SI {
typedef unsigned char u_char;
struct SectionHeader {
- u_char table_id :8;
+ u_char table_id :8;
#if BYTE_ORDER == BIG_ENDIAN
- u_char section_syntax_indicator :1;
- u_char :3;
- u_char section_length_hi :4;
-#else
- u_char section_length_hi :4;
- u_char :3;
- u_char section_syntax_indicator :1;
+ u_char section_syntax_indicator :1;
+ u_char :3;
+ u_char section_length_hi :4;
+#else
+ u_char section_length_hi :4;
+ u_char :3;
+ u_char section_syntax_indicator :1;
#endif
- u_char section_length_lo :8;
+ u_char section_length_lo :8;
};
struct ExtendedSectionHeader {
- u_char table_id :8;
+ u_char table_id :8;
#if BYTE_ORDER == BIG_ENDIAN
- u_char section_syntax_indicator :1;
- u_char :3;
- u_char section_length_hi :4;
-#else
- u_char section_length_hi :4;
- u_char :3;
- u_char section_syntax_indicator :1;
+ u_char section_syntax_indicator :1;
+ u_char :3;
+ u_char section_length_hi :4;
+#else
+ u_char section_length_hi :4;
+ u_char :3;
+ u_char section_syntax_indicator :1;
#endif
u_char section_length_lo :8;
u_char table_id_extension_hi :8;
@@ -127,7 +129,7 @@ struct pat_prog {
u_char network_pid_hi :5;
u_char :3;
#endif
- u_char network_pid_lo :8;
+ u_char network_pid_lo :8;
/* or program_map_pid (if prog_num=0)*/
};
@@ -263,78 +265,78 @@ struct pmt_info {
*
*/
-#define NIT_LEN 10
+#define NIT_LEN 10
-struct nit {
- u_char table_id :8;
+struct nit {
+ u_char table_id :8;
#if BYTE_ORDER == BIG_ENDIAN
- u_char section_syntax_indicator :1;
- u_char :3;
- u_char section_length_hi :4;
-#else
- u_char section_length_hi :4;
- u_char :3;
- u_char section_syntax_indicator :1;
+ u_char section_syntax_indicator :1;
+ u_char :3;
+ u_char section_length_hi :4;
+#else
+ u_char section_length_hi :4;
+ u_char :3;
+ u_char section_syntax_indicator :1;
#endif
- u_char section_length_lo :8;
- u_char network_id_hi :8;
- u_char network_id_lo :8;
+ u_char section_length_lo :8;
+ u_char network_id_hi :8;
+ u_char network_id_lo :8;
#if BYTE_ORDER == BIG_ENDIAN
- u_char :2;
- u_char version_number :5;
- u_char current_next_indicator :1;
+ u_char :2;
+ u_char version_number :5;
+ u_char current_next_indicator :1;
#else
- u_char current_next_indicator :1;
- u_char version_number :5;
- u_char :2;
+ u_char current_next_indicator :1;
+ u_char version_number :5;
+ u_char :2;
#endif
- u_char section_number :8;
- u_char last_section_number :8;
-#if BYTE_ORDER == BIG_ENDIAN
- u_char :4;
- u_char network_descriptor_length_hi :4;
+ u_char section_number :8;
+ u_char last_section_number :8;
+#if BYTE_ORDER == BIG_ENDIAN
+ u_char :4;
+ u_char network_descriptor_length_hi :4;
#else
- u_char network_descriptor_length_hi :4;
- u_char :4;
+ u_char network_descriptor_length_hi :4;
+ u_char :4;
#endif
- u_char network_descriptor_length_lo :8;
+ u_char network_descriptor_length_lo :8;
/* descriptors */
-};
-
-#define SIZE_NIT_MID 2
+};
+
+#define SIZE_NIT_MID 2
-struct nit_mid { // after descriptors
+struct nit_mid { // after descriptors
#if BYTE_ORDER == BIG_ENDIAN
- u_char :4;
- u_char transport_stream_loop_length_hi :4;
+ u_char :4;
+ u_char transport_stream_loop_length_hi :4;
#else
- u_char transport_stream_loop_length_hi :4;
- u_char :4;
+ u_char transport_stream_loop_length_hi :4;
+ u_char :4;
#endif
- u_char transport_stream_loop_length_lo :8;
-};
-
-#define SIZE_NIT_END 4
-
-struct nit_end {
- long CRC;
-};
-
-#define NIT_TS_LEN 6
-
-struct ni_ts {
- u_char transport_stream_id_hi :8;
- u_char transport_stream_id_lo :8;
- u_char original_network_id_hi :8;
- u_char original_network_id_lo :8;
+ u_char transport_stream_loop_length_lo :8;
+};
+
+#define SIZE_NIT_END 4
+
+struct nit_end {
+ long CRC;
+};
+
+#define NIT_TS_LEN 6
+
+struct ni_ts {
+ u_char transport_stream_id_hi :8;
+ u_char transport_stream_id_lo :8;
+ u_char original_network_id_hi :8;
+ u_char original_network_id_lo :8;
#if BYTE_ORDER == BIG_ENDIAN
- u_char :4;
- u_char transport_descriptors_length_hi :4;
-#else
- u_char transport_descriptors_length_hi :4;
- u_char :4;
+ u_char :4;
+ u_char transport_descriptors_length_hi :4;
+#else
+ u_char transport_descriptors_length_hi :4;
+ u_char :4;
#endif
- u_char transport_descriptors_length_lo :8;
+ u_char transport_descriptors_length_lo :8;
/* descriptors */
};
@@ -426,7 +428,7 @@ struct sdt_descr {
/*
*
* 3) Event Information Table (EIT):
- *
+ *
* - the EIT contains data concerning events or programmes such as event
* name, start time, duration, etc.; - the use of different descriptors
* allows the transmission of different kinds of event information e.g.
@@ -505,7 +507,7 @@ struct eit_event {
*/
struct rst {
- u_char table_id :8;
+ u_char table_id :8;
#if BYTE_ORDER == BIG_ENDIAN
u_char section_syntax_indicator :1;
u_char :3;
@@ -516,7 +518,7 @@ struct rst {
u_char section_syntax_indicator :1;
#endif
u_char section_length_lo :8;
-};
+};
struct rst_info {
u_char transport_stream_id_hi :8;
@@ -549,7 +551,7 @@ struct rst_info {
#define TDT_LEN 8
struct tdt {
- u_char table_id :8;
+ u_char table_id :8;
#if BYTE_ORDER == BIG_ENDIAN
u_char section_syntax_indicator :1;
u_char :3;
@@ -579,7 +581,7 @@ struct tdt {
#define TOT_LEN 10
struct tot {
- u_char table_id :8;
+ u_char table_id :8;
#if BYTE_ORDER == BIG_ENDIAN
u_char section_syntax_indicator :1;
u_char :3;
@@ -605,7 +607,6 @@ struct tot {
u_char descriptors_loop_length_lo :8;
};
-
/*
*
* 7) Stuffing Table (ST):
@@ -637,11 +638,11 @@ struct tot {
*
*/
/* TO BE DONE */
-
+
/*
*
* 3) Application Information Table (AIT):
- *
+ *
* - the AIT contains data concerning MHP application broadcast by a service.
*
*/
@@ -685,50 +686,48 @@ struct ait {
#define SIZE_AIT_MID 2
-struct ait_mid { // after descriptors
+struct ait_mid { // after descriptors
#if BYTE_ORDER == BIG_ENDIAN
- u_char :4;
- u_char application_loop_length_hi :4;
+ u_char :4;
+ u_char application_loop_length_hi :4;
#else
- u_char application_loop_length_hi :4;
- u_char :4;
+ u_char application_loop_length_hi :4;
+ u_char :4;
#endif
- u_char application_loop_length_lo :8;
-};
-
-#define SIZE_AIT_END 4
+ u_char application_loop_length_lo :8;
+};
+
+#define SIZE_AIT_END 4
-struct ait_end {
- long CRC;
-};
+struct ait_end {
+ long CRC;
+};
#define AIT_APP_LEN 9
-struct ait_app {
+struct ait_app {
//how to deal with 32 bit fields?
- u_char organisation_id_hi_hi :8;
- u_char organisation_id_hi_lo :8;
- u_char organisation_id_lo_hi :8;
- u_char organisation_id_lo_lo :8;
+ u_char organisation_id_hi_hi :8;
+ u_char organisation_id_hi_lo :8;
+ u_char organisation_id_lo_hi :8;
+ u_char organisation_id_lo_lo :8;
//long organisation_id :32;
u_char application_id_hi :8;
u_char application_id_lo :8;
u_char application_control_code :8;
#if BYTE_ORDER == BIG_ENDIAN
- u_char :4;
- u_char application_descriptors_length_hi :4;
-#else
- u_char application_descriptors_length_hi :4;
- u_char :4;
+ u_char :4;
+ u_char application_descriptors_length_hi :4;
+#else
+ u_char application_descriptors_length_hi :4;
+ u_char :4;
#endif
- u_char application_descriptors_length_lo :8;
+ u_char application_descriptors_length_lo :8;
/* descriptors */
};
-
-
/*
*
* The following describes the different descriptors that can be used within
@@ -754,11 +753,9 @@ struct descr_gen {
u_char descriptor_length :8;
};
-
#define GetDescriptorTag(x) (((descr_gen_t *) x)->descriptor_tag)
#define GetDescriptorLength(x) (((descr_gen_t *) x)->descriptor_length+DESCR_GEN_LEN)
-
/* 0x09 ca_descriptor */
#define DESCR_CA_LEN 6
@@ -777,7 +774,6 @@ struct descr_ca {
u_char CA_PID_lo :8;
};
-
/* 0x0A iso_639_language_descriptor */
#define DESCR_ISO_639_LANGUAGE_LEN 5
@@ -789,8 +785,6 @@ struct descr_iso_639_language {
u_char lang_code3 :8;
};
-
-
/* 0x13 carousel_identifier_descriptor */
#define DESCR_CAROUSEL_IDENTIFIER_LEN 7
@@ -805,8 +799,6 @@ struct descr_carousel_identifier {
/* FormatSpecifier follows */
};
-
-
/* 0x40 network_name_descriptor */
#define DESCR_NETWORK_NAME_LEN 2
@@ -815,8 +807,6 @@ struct descr_network_name {
u_char descriptor_length :8;
};
-
-
/* 0x41 service_list_descriptor */
#define DESCR_SERVICE_LIST_LEN 2
@@ -825,7 +815,6 @@ struct descr_service_list {
u_char descriptor_length :8;
};
-
#define DESCR_SERVICE_LIST_LOOP_LEN 3
struct descr_service_list_loop {
u_char service_id_hi :8;
@@ -833,8 +822,6 @@ struct descr_service_list_loop {
u_char service_type :8;
};
-
-
/* 0x42 stuffing_descriptor */
#define DESCR_STUFFING_LEN XX
@@ -844,8 +831,6 @@ struct descr_stuffing {
/* TBD */
};
-
-
/* 0x43 satellite_delivery_system_descriptor */
#define DESCR_SATELLITE_DELIVERY_SYSTEM_LEN 13
@@ -879,8 +864,6 @@ struct descr_satellite_delivery_system {
#endif
};
-
-
/* 0x44 cable_delivery_system_descriptor */
#define DESCR_CABLE_DELIVERY_SYSTEM_LEN 13
@@ -912,8 +895,6 @@ struct descr_cable_delivery_system {
#endif
};
-
-
/* 0x45 vbi_data_descriptor */
#define DESCR_VBI_DATA_LEN XX
@@ -923,8 +904,6 @@ struct descr_vbi_data {
/* TBD */
};
-
-
/* 0x46 vbi_teletext_descriptor */
#define DESCR_VBI_TELETEXT_LEN XX
@@ -934,8 +913,6 @@ struct descr_vbi_teletext {
/* TBD */
};
-
-
/* 0x47 bouquet_name_descriptor */
#define DESCR_BOUQUET_NAME_LEN 2
@@ -944,8 +921,6 @@ struct descr_bouquet_name {
u_char descriptor_length :8;
};
-
-
/* 0x48 service_descriptor */
#define DESCR_SERVICE_LEN 4
@@ -960,8 +935,6 @@ struct descr_service_mid {
u_char service_name_length :8;
};
-
-
/* 0x49 country_availability_descriptor */
#define DESCR_COUNTRY_AVAILABILITY_LEN 3
@@ -977,8 +950,6 @@ struct descr_country_availability {
#endif
};
-
-
/* 0x4A linkage_descriptor */
#define DESCR_LINKAGE_LEN 9
@@ -987,15 +958,13 @@ struct descr_linkage {
u_char descriptor_length :8;
u_char transport_stream_id_hi :8;
u_char transport_stream_id_lo :8;
- u_char original_network_id_hi :8;
- u_char original_network_id_lo :8;
+ u_char original_network_id_hi :8;
+ u_char original_network_id_lo :8;
u_char service_id_hi :8;
u_char service_id_lo :8;
u_char linkage_type :8;
};
-
-
/* 0x4B nvod_reference_descriptor */
#define DESCR_NVOD_REFERENCE_LEN 2
@@ -1004,20 +973,16 @@ struct descr_nvod_reference {
u_char descriptor_length :8;
};
-
#define ITEM_NVOD_REFERENCE_LEN 6
struct item_nvod_reference {
u_char transport_stream_id_hi :8;
u_char transport_stream_id_lo :8;
- u_char original_network_id_hi :8;
- u_char original_network_id_lo :8;
+ u_char original_network_id_hi :8;
+ u_char original_network_id_lo :8;
u_char service_id_hi :8;
u_char service_id_lo :8;
};
-
-
-
/* 0x4C time_shifted_service_descriptor */
#define DESCR_TIME_SHIFTED_SERVICE_LEN 4
@@ -1028,8 +993,6 @@ struct descr_time_shifted_service {
u_char reference_service_id_lo :8;
};
-
-
/* 0x4D short_event_descriptor */
#define DESCR_SHORT_EVENT_LEN 6
@@ -1046,8 +1009,6 @@ struct descr_short_event_mid {
u_char text_length :8;
};
-
-
/* 0x4E extended_event_descriptor */
#define DESCR_EXTENDED_EVENT_LEN 7
@@ -1072,7 +1033,6 @@ struct descr_extended_event_mid {
u_char text_length :8;
};
-
#define ITEM_EXTENDED_EVENT_LEN 1
struct item_extended_event {
u_char item_description_length :8;
@@ -1082,8 +1042,6 @@ struct item_extended_event_mid {
u_char item_length :8;
};
-
-
/* 0x4F time_shifted_event_descriptor */
#define DESCR_TIME_SHIFTED_EVENT_LEN 6
@@ -1096,8 +1054,6 @@ struct descr_time_shifted_event {
u_char reference_event_id_lo :8;
};
-
-
/* 0x50 component_descriptor */
#define DESCR_COMPONENT_LEN 8
@@ -1118,8 +1074,6 @@ struct descr_component {
u_char lang_code3 :8;
};
-
-
/* 0x51 mosaic_descriptor */
#define DESCR_MOSAIC_LEN XX
@@ -1129,8 +1083,6 @@ struct descr_mosaic {
/* TBD */
};
-
-
/* 0x52 stream_identifier_descriptor */
#define DESCR_STREAM_IDENTIFIER_LEN 3
@@ -1140,8 +1092,6 @@ struct descr_stream_identifier {
u_char component_tag :8;
};
-
-
/* 0x53 ca_identifier_descriptor */
#define DESCR_CA_IDENTIFIER_LEN 2
@@ -1150,8 +1100,6 @@ struct descr_ca_identifier {
u_char descriptor_length :8;
};
-
-
/* 0x54 content_descriptor */
#define DESCR_CONTENT_LEN 2
@@ -1160,7 +1108,6 @@ struct descr_content {
u_char descriptor_length :8;
};
-
struct nibble_content {
#if BYTE_ORDER == BIG_ENDIAN
u_char content_nibble_level_1 :4;
@@ -1178,8 +1125,6 @@ struct nibble_content {
#endif
};
-
-
/* 0x55 parental_rating_descriptor */
#define DESCR_PARENTAL_RATING_LEN 2
@@ -1188,7 +1133,6 @@ struct descr_parental_rating {
u_char descriptor_length :8;
};
-
#define PARENTAL_RATING_LEN 4
struct parental_rating {
u_char lang_code1 :8;
@@ -1197,8 +1141,6 @@ struct parental_rating {
u_char rating :8;
};
-
-
/* 0x56 teletext_descriptor */
#define DESCR_TELETEXT_LEN 2
@@ -1207,24 +1149,21 @@ struct descr_teletext {
u_char descriptor_length :8;
};
-
#define ITEM_TELETEXT_LEN 5
struct item_teletext {
u_char lang_code1 :8;
u_char lang_code2 :8;
u_char lang_code3 :8;
#if BYTE_ORDER == BIG_ENDIAN
- u_char type :5;
- u_char magazine_number :3;
-#else
- u_char magazine_number :3;
- u_char type :5;
-#endif
- u_char page_number :8;
+ u_char type :5;
+ u_char magazine_number :3;
+#else
+ u_char magazine_number :3;
+ u_char type :5;
+#endif
+ u_char page_number :8;
};
-
-
/* 0x57 telephone_descriptor */
#define DESCR_TELEPHONE_LEN XX
@@ -1234,8 +1173,6 @@ struct descr_telephone {
/* TBD */
};
-
-
/* 0x58 local_time_offset_descriptor */
#define DESCR_LOCAL_TIME_OFFSET_LEN 2
@@ -1244,7 +1181,6 @@ struct descr_local_time_offset {
u_char descriptor_length :8;
};
-
#define LOCAL_TIME_OFFSET_ENTRY_LEN 15
struct local_time_offset_entry {
u_char country_code1 :8;
@@ -1270,8 +1206,6 @@ struct local_time_offset_entry {
u_char next_time_offset_m :8;
};
-
-
/* 0x59 subtitling_descriptor */
#define DESCR_SUBTITLING_LEN 2
@@ -1280,21 +1214,18 @@ struct descr_subtitling {
u_char descriptor_length :8;
};
-
#define ITEM_SUBTITLING_LEN 8
struct item_subtitling {
u_char lang_code1 :8;
u_char lang_code2 :8;
u_char lang_code3 :8;
- u_char subtitling_type :8;
- u_char composition_page_id_hi :8;
- u_char composition_page_id_lo :8;
- u_char ancillary_page_id_hi :8;
- u_char ancillary_page_id_lo :8;
+ u_char subtitling_type :8;
+ u_char composition_page_id_hi :8;
+ u_char composition_page_id_lo :8;
+ u_char ancillary_page_id_hi :8;
+ u_char ancillary_page_id_lo :8;
};
-
-
/* 0x5A terrestrial_delivery_system_descriptor */
#define DESCR_TERRESTRIAL_DELIVERY_SYSTEM_LEN XX
@@ -1338,8 +1269,6 @@ struct descr_terrestrial_delivery {
u_char reserver5 :8;
};
-
-
/* 0x5B multilingual_network_name_descriptor */
#define DESCR_MULTILINGUAL_NETWORK_NAME_LEN XX
@@ -1355,8 +1284,6 @@ struct entry_multilingual_name {
u_char text_length :8;
};
-
-
/* 0x5C multilingual_bouquet_name_descriptor */
#define DESCR_MULTILINGUAL_BOUQUET_NAME_LEN XX
@@ -1365,8 +1292,6 @@ struct descr_multilingual_bouquet_name {
u_char descriptor_length :8;
};
-
-
/* 0x5D multilingual_service_name_descriptor */
#define DESCR_MULTILINGUAL_SERVICE_NAME_LEN XX
@@ -1379,7 +1304,6 @@ struct entry_multilingual_service_name_mid {
u_char service_name_length :8;
};
-
/* 0x5E multilingual_component_descriptor */
#define DESCR_MULTILINGUAL_COMPONENT_LEN XX
@@ -1389,8 +1313,6 @@ struct descr_multilingual_component {
u_char component_tag :8;
};
-
-
/* 0x5F private_data_specifier_descriptor */
#define DESCR_PRIVATE_DATA_SPECIFIER_LEN XX
@@ -1400,8 +1322,6 @@ struct descr_private_data_specifier {
/* TBD */
};
-
-
/* 0x60 service_move_descriptor */
#define DESCR_SERVICE_MOVE_LEN XX
@@ -1416,8 +1336,6 @@ struct descr_service_move {
u_char new_service_id_lo :8;
};
-
-
/* 0x61 short_smoothing_buffer_descriptor */
#define DESCR_SHORT_SMOOTHING_BUFFER_LEN XX
@@ -1427,15 +1345,13 @@ struct descr_short_smoothing_buffer {
/* TBD */
};
-
-
/* 0x62 frequency_list_descriptor */
#define DESCR_FREQUENCY_LIST_LEN XX
struct descr_frequency_list {
u_char descriptor_tag :8;
u_char descriptor_length :8;
-#if BYTE_ORDER == BIG_ENDIAN
+#if BYTE_ORDER == BIG_ENDIAN
u_char :6;
u_char coding_type :2;
#else
@@ -1444,8 +1360,6 @@ struct descr_frequency_list {
#endif
};
-
-
/* 0x63 partial_transport_stream_descriptor */
#define DESCR_PARTIAL_TRANSPORT_STREAM_LEN XX
@@ -1455,8 +1369,6 @@ struct descr_partial_transport_stream {
/* TBD */
};
-
-
/* 0x64 data_broadcast_descriptor */
#define DESCR_DATA_BROADCAST_LEN XX
@@ -1466,8 +1378,6 @@ struct descr_data_broadcast {
/* TBD */
};
-
-
/* 0x65 ca_system_descriptor */
#define DESCR_CA_SYSTEM_LEN XX
@@ -1477,8 +1387,6 @@ struct descr_ca_system {
/* TBD */
};
-
-
/* 0x66 data_broadcast_id_descriptor */
#define DESCR_DATA_BROADCAST_ID_LEN XX
@@ -1488,8 +1396,6 @@ struct descr_data_broadcast_id {
/* TBD */
};
-
-
/* 0x67 transport_stream_descriptor */
#define DESCR_TRANSPORT_STREAM_LEN XX
@@ -1499,8 +1405,6 @@ struct descr_transport_stream {
/* TBD */
};
-
-
/* 0x68 dsng_descriptor */
#define DESCR_DSNG_LEN XX
@@ -1510,8 +1414,6 @@ struct descr_dsng {
/* TBD */
};
-
-
/* 0x69 pdc_descriptor */
#define DESCR_PDC_LEN XX
@@ -1521,8 +1423,6 @@ struct descr_pdc {
/* TBD */
};
-
-
/* 0x6A ac3_descriptor */
#define DESCR_AC3_LEN 3
@@ -1548,8 +1448,6 @@ struct descr_ac3 {
u_char asvc :8;
};
-
-
/* 0x6B ancillary_data_descriptor */
#define DESCR_ANCILLARY_DATA_LEN 3
@@ -1559,8 +1457,6 @@ struct descr_ancillary_data {
u_char ancillary_data_identifier :8;
};
-
-
/* 0x6C cell_list_descriptor */
#define DESCR_CELL_LIST_LEN XX
@@ -1570,8 +1466,6 @@ struct descr_cell_list {
/* TBD */
};
-
-
/* 0x6D cell_frequency_link_descriptor */
#define DESCR_CELL_FREQUENCY_LINK_LEN XX
@@ -1581,8 +1475,6 @@ struct descr_cell_frequency_link {
/* TBD */
};
-
-
/* 0x6E announcement_support_descriptor */
#define DESCR_ANNOUNCEMENT_SUPPORT_LEN XX
@@ -1592,8 +1484,6 @@ struct descr_announcement_support {
/* TBD */
};
-
-
/* 0x6F application_signalling_descriptor */
#define DESCR_APPLICATION_SIGNALLING_LEN 2
@@ -1602,22 +1492,19 @@ struct descr_application_signalling {
u_char descriptor_length :8;
};
-
#define APPLICATION_SIGNALLING_ENTRY_LEN 3
struct application_signalling_entry {
- u_char application_type_hi :8;
- u_char application_type_lo :8;
+ u_char application_type_hi :8;
+ u_char application_type_lo :8;
#if BYTE_ORDER == BIG_ENDIAN
- u_char :3;
+ u_char :3;
u_char AIT_version_number :5;
#else
u_char AIT_version_number :5;
- u_char :3;
+ u_char :3;
#endif
};
-
-
/* 0x71 service_identifier_descriptor (ETSI TS 102 812, MHP) */
struct descr_service_identifier {
@@ -1625,7 +1512,6 @@ struct descr_service_identifier {
u_char descriptor_length :8;
};
-
/* MHP 0x00 application_descriptor */
#define DESCR_APPLICATION_LEN 3
@@ -1636,7 +1522,6 @@ struct descr_application {
u_char application_profiles_length :8;
};
-
#define DESCR_APPLICATION_END_LEN 2
struct descr_application_end {
@@ -1653,18 +1538,16 @@ struct descr_application_end {
/*now follow 8bit transport_protocol_label fields to the end */
};
-
#define APPLICATION_PROFILE_ENTRY_LEN 5
struct application_profile_entry {
- u_char application_profile_hi :8;
- u_char application_profile_lo :8;
- u_char version_major :8;
- u_char version_minor :8;
- u_char version_micro :8;
+ u_char application_profile_hi :8;
+ u_char application_profile_lo :8;
+ u_char version_major :8;
+ u_char version_minor :8;
+ u_char version_micro :8;
};
-
/* MHP 0x01 application_name_desriptor */
#define DESCR_APPLICATION_NAME_LEN 2
@@ -1674,7 +1557,6 @@ struct descr_application_name {
u_char descriptor_length :8;
};
-
#define APPLICATION_NAME_ENTRY_LEN 4
struct descr_application_name_entry {
@@ -1685,7 +1567,6 @@ struct descr_application_name_entry {
/* application name string */
};
-
/* MHP 0x02 transport_protocol_descriptor */
#define DESCR_TRANSPORT_PROTOCOL_LEN 5
@@ -1693,13 +1574,12 @@ struct descr_application_name_entry {
struct descr_transport_protocol {
u_char descriptor_tag :8;
u_char descriptor_length :8;
- u_char protocol_id_hi :8;
- u_char protocol_id_lo :8;
- u_char transport_protocol_label :8;
- /* protocol_id-specific selector bytes follow */
+ u_char protocol_id_hi :8;
+ u_char protocol_id_lo :8;
+ u_char transport_protocol_label :8;
+ /* protocol_id-specific selector bytes follow */
};
-
#define TRANSPORT_VIA_OC_LEN 1
struct transport_via_oc {
@@ -1712,7 +1592,6 @@ struct transport_via_oc {
#endif
};
-
//if remote is true, transport_via_oc_remote_end_t follows,
// else transport_via_oc_end_t.
@@ -1728,14 +1607,12 @@ struct transport_via_oc_remote_end {
u_char component_tag :8;
};
-
#define TRANSPORT_VIA_OC_END_LEN 1
struct transport_via_oc_end {
u_char component_tag :8;
};
-
/* 0x03 dvb_j_application_descriptor() */
#define DESCR_DVBJ_APPLICATION_LEN 2
@@ -1745,7 +1622,6 @@ struct descr_dvbj_application {
u_char descriptor_length :8;
};
-
#define DESCR_DVBJ_APPLICATION_ENTRY_LEN 1
struct descr_dvbj_application_entry {
@@ -1753,7 +1629,6 @@ struct descr_dvbj_application_entry {
/* parameter string */
};
-
/* 0x04 dvb_j_application_location_descriptor */
#define DESCR_DVBJ_APPLICATION_LOCATION_LEN 3
@@ -1765,14 +1640,12 @@ struct descr_dvbj_application_location {
/* base directory string */
};
-
#define DESCR_DVBJ_APPLICATION_LOCATION_MID_LEN 1
struct descr_dvbj_application_location_mid {
u_char classpath_extension_length :8;
};
-
/* 0x0B application_icons_descriptor */
#define DESCR_APPLICATION_ICONS_LEN 3
@@ -1782,21 +1655,15 @@ struct descr_application_icons_descriptor {
u_char descriptor_length :8;
u_char icon_locator_length :8;
/* icon locator */
-};
-
+};
#define DESCR_APPLICATION_ICONS_END_LEN 2
struct descr_application_icons_descriptor_end {
u_char icon_flags_hi :8;
u_char icon_flags_lo :8;
-};
-
-
-
-
+};
} //end of namespace
#endif //LIBSI_HEADERS_H
-
diff --git a/libsi/section.c b/libsi/section.c
index 6abbb232..0de2a573 100644
--- a/libsi/section.c
+++ b/libsi/section.c
@@ -6,6 +6,8 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
+ * $Id: section.c 1.2 2003/12/13 10:42:14 kls Exp $
+ * *
***************************************************************************/
#include "section.h"
@@ -74,8 +76,6 @@ void PMT::Stream::Parse() {
streamDescriptors.setData(data+offset, HILO(s->ES_info_length));
}
-
-
/*********************** NIT ***********************/
int NIT::getNetworkId() const {
@@ -105,11 +105,8 @@ void NIT::TransportStream::Parse() {
transportStreamDescriptors.setData(data+offset, HILO(s->transport_descriptors_length));
}
-
-
/*********************** SDT ***********************/
-
void SDT::Parse() {
unsigned int offset=0;
data.setPointerAndOffset<const sdt>(s, offset);
@@ -150,8 +147,6 @@ void SDT::Service::Parse() {
serviceDescriptors.setData(data+offset, HILO(s->descriptors_loop_length));
}
-
-
/*********************** EIT ***********************/
int EIT::getServiceId() const {
@@ -167,7 +162,7 @@ int EIT::getOriginalNetworkId() const {
}
bool EIT::isPresentFollowing() const {
- return getTableId() == TableIdEIT_presentFollowing || getTableId() == TableIdEIT_presentFollowing_other;
+ return getTableId() == TableIdEIT_presentFollowing || getTableId() == TableIdEIT_presentFollowing_other;
}
bool EIT::isActualTS() const {
@@ -183,7 +178,6 @@ void EIT::Parse() {
eventLoop.setData(data+offset, getLength()-offset-4); //4 is for CRC
}
-
time_t EIT::Event::getStartTime() const {
return DVBTime::getTime(s->mjd_hi, s->mjd_lo, s->start_time_h, s->start_time_m, s->start_time_s);
}
@@ -239,7 +233,6 @@ void EIT::Event::Parse() {
eventDescriptors.setData(data+offset, HILO(s->descriptors_loop_length));
}
-
/*********************** TDT ***********************/
time_t TDT::getTime() const {
@@ -250,7 +243,6 @@ void TDT::Parse() {
s=data.getData<const tdt>();
}
-
/*********************** TOT ***********************/
time_t TOT::getTime() const {
@@ -263,9 +255,6 @@ void TOT::Parse() {
descriptorLoop.setData(data+offset, getLength()-offset-4);
}
-
-
-
/*********************** RST ***********************/
void RST::Parse() {
@@ -299,11 +288,8 @@ void RST::RunningInfo::Parse() {
s=data.getData<const rst_info>();
}
-
-
/*********************** AIT ***********************/
-
int AIT::getApplicationType() const {
return HILO(first->application_type);
}
@@ -321,7 +307,6 @@ void AIT::Parse() {
applicationLoop.setData(data+offset, HILO(mid->application_loop_length));
}
-
long AIT::Application::getOrganisationId() const {
return data.FourBytes(0);
}
@@ -340,7 +325,4 @@ void AIT::Application::Parse() {
applicationDescriptors.setData(data+offset, HILO(s->application_descriptors_length));
}
-
-
} //end of namespace
-
diff --git a/libsi/section.h b/libsi/section.h
index 55fc1bab..efca9bb6 100644
--- a/libsi/section.h
+++ b/libsi/section.h
@@ -6,6 +6,8 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
+ * $Id: section.h 1.2 2003/12/13 10:42:15 kls Exp $
+ * *
***************************************************************************/
#ifndef LIBSI_SECTION_H
@@ -50,7 +52,6 @@ protected:
virtual void Parse();
};
-
class PMT : public NumberedSection {
public:
PMT(const unsigned char *data, bool doCopy=true) : NumberedSection(data, doCopy) {}
@@ -108,7 +109,6 @@ public:
int getBouquetId() const { return getNetworkId(); }
};
-
class SDT : public NumberedSection {
public:
SDT(const unsigned char *data, bool doCopy=true) : NumberedSection(data, doCopy) {}
@@ -134,8 +134,7 @@ protected:
virtual void Parse();
private:
const sdt *s;
-};
-
+};
class EIT : public NumberedSection {
public:
@@ -146,7 +145,7 @@ public:
int getEventId() const;
time_t getStartTime() const; //UTC
time_t getDuration() const;
-
+
int getMJD() const;
int getStartTimeHour() const; //UTC
int getStartTimeMinute() const; //UTC
@@ -156,7 +155,7 @@ public:
int getDurationSecond() const;
RunningStatus getRunningStatus() const;
int getFreeCaMode() const;
-
+
DescriptorLoop eventDescriptors;
virtual int getLength() { return sizeof(eit_event)+eventDescriptors.getLength(); }
protected:
@@ -168,7 +167,7 @@ public:
int getTransportStreamId() const;
int getOriginalNetworkId() const;
StructureLoop<Event> eventLoop;
-
+
//true if table conveys present/following information, false if it conveys schedule information
bool isPresentFollowing() const;
//true if table describes TS on which it is broadcast, false if it describes other TS
@@ -179,7 +178,6 @@ private:
const eit *s;
};
-
class TDT : public Section {
public:
TDT(const unsigned char *data, bool doCopy=true) : Section(data, doCopy) {}
@@ -191,7 +189,6 @@ private:
const tdt *s;
};
-
class TOT : public CRCSection {
public:
TOT(const unsigned char *data, bool doCopy=true) : CRCSection(data, doCopy) {}
@@ -204,7 +201,6 @@ private:
const tot *s;
};
-
class RST : public Section {
public:
RST(const unsigned char *data, bool doCopy=true) : Section(data, doCopy) {}
@@ -227,7 +223,6 @@ protected:
virtual void Parse();
};
-
class AIT : public NumberedSection {
public:
AIT(const unsigned char *data, bool doCopy=true) : NumberedSection(data, doCopy) {}
@@ -252,8 +247,6 @@ protected:
virtual void Parse();
};
-
-
} //end of namespace
#endif //LIBSI_TABLE_H
diff --git a/libsi/si.c b/libsi/si.c
index 013fdf13..e3fb884b 100644
--- a/libsi/si.c
+++ b/libsi/si.c
@@ -6,6 +6,8 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
+ * $Id: si.c 1.2 2003/12/13 10:42:16 kls Exp $
+ * *
***************************************************************************/
#include <string.h>
@@ -28,8 +30,6 @@ void Object::setData(CharArray &d) {
data=d;
}
-
-
Section::Section(const unsigned char *data, bool doCopy) {
setData(data, getLength(data), doCopy);
}
@@ -43,11 +43,11 @@ int Section::getLength() {
}
TableId Section::getTableId(const unsigned char *d) {
- return (TableId)((const SectionHeader *)d)->table_id;
+ return (TableId)((const SectionHeader *)d)->table_id;
}
int Section::getLength(const unsigned char *d) {
- return HILO(((const SectionHeader *)d)->section_length)+sizeof(SectionHeader);
+ return HILO(((const SectionHeader *)d)->section_length)+sizeof(SectionHeader);
}
bool CRCSection::isValid() {
@@ -61,8 +61,6 @@ bool CRCSection::CheckCRCAndParse() {
return true;
}
-
-
bool NumberedSection::getCurrentNextIndicator() const {
return data.getData<ExtendedSectionHeader>()->current_next_indicator;
}
@@ -79,10 +77,6 @@ int NumberedSection::getLastSectionNumber() const {
return data.getData<ExtendedSectionHeader>()->last_section_number;
}
-
-
-
-
int Descriptor::getLength() {
return getLength(data.getData());
}
@@ -99,7 +93,6 @@ DescriptorTag Descriptor::getDescriptorTag(const unsigned char *d) {
return (DescriptorTag)((const DescriptorHeader*)d)->descriptor_tag;
}
-
Descriptor *DescriptorLoop::getNext(Iterator &it) {
if (it.i<getLength()) {
return createDescriptor(it.i);
@@ -193,8 +186,6 @@ bool DescriptorGroup::isComplete() {
return true;
}
-
-
char *String::getText() {
if (getLength() < 0 || getLength() >4095)
return "text error";
@@ -216,17 +207,17 @@ char *String::getText(char *buffer) {
void String::decodeText(char *buffer) {
const unsigned char *from=data.getData(0);
char *to=buffer;
-
+
/* Disable detection of coding tables - libdtv doesn't do it either
if ( (0x01 <= *from) && (*from <= 0x1f) ) {
codeTable=*from
}
*/
-
+
for (int i = 0; i < getLength(); i++) {
if (*from == 0)
break;
- if ( ((' ' <= *from) && (*from <= '~'))
+ if ( ((' ' <= *from) && (*from <= '~'))
|| (*from == '\n')
|| ((0xA0 <= *from) && (*from <= 0xFF))
)
@@ -310,7 +301,7 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain)
break;
case CaIdentifierDescriptorTag:
d=new CaIdentifierDescriptor();
- break;
+ break;
case ShortEventDescriptorTag:
d=new ShortEventDescriptor();
break;
@@ -329,10 +320,10 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain)
case ApplicationSignallingDescriptorTag:
d=new ApplicationSignallingDescriptor();
break;
-
+
//note that it is no problem to implement one
//of the unimplemented descriptors.
-
+
//defined in ISO-13818-1
case VideoStreamDescriptorTag:
case AudioStreamDescriptorTag:
@@ -350,7 +341,7 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain)
case SmoothingBufferDescriptorTag:
case STDDescriptorTag:
case IBPDescriptorTag:
-
+
//defined in ETSI EN 300 468
case StuffingDescriptorTag:
case VBIDataDescriptorTag:
@@ -374,7 +365,7 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain)
case DSNGDescriptorTag:
case PDCDescriptorTag:
case AncillaryDataDescriptorTag:
- case AnnouncementSupportDescriptorTag:
+ case AnnouncementSupportDescriptorTag:
case AdaptationFieldDataDescriptorTag:
case TransportStreamDescriptorTag:
default:
@@ -421,11 +412,4 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain)
return d;
}
-
-
-
-
-
} //end of namespace
-
-
diff --git a/libsi/si.h b/libsi/si.h
index 89b438df..6dd10543 100644
--- a/libsi/si.h
+++ b/libsi/si.h
@@ -6,9 +6,10 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
+ * $Id: si.h 1.2 2003/12/13 10:42:17 kls Exp $
+ * *
***************************************************************************/
-
#ifndef LIBSI_SI_H
#define LIBSI_SI_H
@@ -44,7 +45,7 @@ enum TableId { TableIdPAT = 0x00, //program association section
TableIdSIT = 0x7F, //service information section
TableIdAIT = 0x74 //application information section
};
-
+
enum DescriptorTag {
// defined by ISO/IEC 13818-1
@@ -65,7 +66,7 @@ enum DescriptorTag {
SmoothingBufferDescriptorTag = 0x10,
STDDescriptorTag = 0x11,
IBPDescriptorTag = 0x12,
- // defined by ISO-13818-6 (DSM-CC)
+ // defined by ISO-13818-6 (DSM-CC)
CarouselIdentifierDescriptorTag = 0x13,
// 0x14 - 0x3F Reserved
// defined by ETSI (EN 300 468)
@@ -138,7 +139,7 @@ enum DescriptorTag {
MHP_PrefetchDescriptorTag = 0x0C,
MHP_DelegatedApplicationDescriptorTag = 0x0E,
MHP_ApplicationStorageDescriptorTag = 0x10,
-
+
//a descriptor currently unimplemented in this library
//the actual value 0xFF is "forbidden" according to the spec.
UnimplementedDescriptorTag = 0xFF
@@ -153,7 +154,6 @@ enum RunningStatus { RunningStatusUndefined = 0,
RunningStatusRunning = 4
};
-
/* Some principles:
- Objects that return references to other objects contained in their data must make sure
that the returned objects have been parsed.
@@ -161,7 +161,6 @@ enum RunningStatus { RunningStatusUndefined = 0,
Note that this does not apply to Loops and Strings (their are never returned by reference, BTW).
*/
-
class Object : public Parsable {
public:
Object();
@@ -183,7 +182,7 @@ public:
Section() {}
TableId getTableId() const;
virtual int getLength();
-
+
static int getLength(const unsigned char *d);
static TableId getTableId(const unsigned char *d);
};
@@ -211,9 +210,6 @@ public:
bool moreThanOneSection() const { return getLastSectionNumber()>1; }
};
-
-
-
class VariableLengthPart : public Object {
public:
//never forget to call this
@@ -225,12 +221,9 @@ private:
int length;
};
-
-
class LoopElement : public Object {
};
-
class SubStructure : public LoopElement {
};
@@ -238,7 +231,7 @@ class Descriptor : public LoopElement {
public:
virtual int getLength();
DescriptorTag getDescriptorTag() const;
-
+
static int getLength(const unsigned char *d);
static DescriptorTag getDescriptorTag(const unsigned char *d);
protected:
@@ -250,8 +243,6 @@ protected:
static Descriptor *getDescriptor(CharArray d, DescriptorTagDomain domain);
};
-
-
class Loop : public VariableLengthPart {
public:
class Iterator {
@@ -338,11 +329,11 @@ public:
return (data.FourBytes(index) << 32) | data.FourBytes(index+4);
}
}
- T getNext(Iterator &it) const
+ T getNext(Iterator &it) const
{
T ret=operator[](it.i);
it.i+=sizeof(T);
- return ret;
+ return ret;
}
bool hasNext() const { return getLength() > it.i; }
};
@@ -352,7 +343,6 @@ public:
MHP_DescriptorLoop() { domain=MHP; }
};
-
//The content of the ExtendedEventDescriptor may be split over several
//descriptors if the text is longer than 256 bytes.
//The following classes provide base functionality to handle this case.
@@ -367,7 +357,7 @@ public:
DescriptorGroup(bool deleteOnDesctruction=true);
~DescriptorGroup();
void Add(GroupDescriptor *d);
- void Delete();
+ void Delete();
int getLength() { return length; }
GroupDescriptor **getDescriptors() { return array; }
bool isComplete(); //if all descriptors have been added
@@ -377,17 +367,15 @@ protected:
bool deleteOnDesctruction;
};
-
-
class String : public VariableLengthPart {
public:
//A note to the length: getLength() returns the length of the raw data.
- //The text may be shorter. Its length can be obtained with one of the
+ //The text may be shorter. Its length can be obtained with one of the
//above functions and strlen.
-
+
//returns text. Data is allocated with new and must be delete'd by the user.
char *getText();
- //copies text into given buffer.
+ //copies text into given buffer.
//a buffer of size getLength()+1 is guaranteed to be sufficiently large.
//In most descriptors the string length is an 8-bit field,
//so the maximum there is 256.
@@ -398,8 +386,6 @@ protected:
void decodeText(char *buffer);
};
-
} //end of namespace
#endif //LIBSI_SI_H
-
diff --git a/libsi/util.c b/libsi/util.c
index 872a3e48..2c1c6e35 100644
--- a/libsi/util.c
+++ b/libsi/util.c
@@ -6,6 +6,8 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
+ * $Id: util.c 1.2 2003/12/13 10:42:18 kls Exp $
+ * *
***************************************************************************/
#include <string.h>
@@ -13,7 +15,6 @@
namespace SI {
-
/*---------------------------- CharArray ----------------------------*/
CharArray::CharArray() : data_(0), off(0) {
@@ -38,7 +39,7 @@ CharArray& CharArray::operator=(const CharArray &f) {
++ f.data_->count_;
}
if (data_) {
- if (--data_->count_ == 0)
+ if (--data_->count_ == 0)
delete data_;
}
data_ = f.data_;
@@ -62,18 +63,18 @@ void CharArray::assign(const unsigned char*data, unsigned int size, bool doCopy)
bool CharArray::operator==(const char *string) const {
//here we can use strcmp, string is null-terminated.
- if (!data_)
+ if (!data_)
return false;
return data_->size ? (!strcmp((const char*)data_->data, string)) : string[0]==0;
}
bool CharArray::operator==(const CharArray &other) const {
- if (!data_ || !other.data_)
+ if (!data_ || !other.data_)
return !(data_ || other.data_); //true if both empty
-
+
if (data_->size != other.data_->size)
return false;
-
+
//do _not_ use strcmp! Data is not necessarily null-terminated.
for (unsigned int i=0;i<data_->size;i++)
if (data_->data[i] != other.data_->data[i])
@@ -98,7 +99,7 @@ CharArray::Data::Data() : count_(1) {
}
CharArray::Data::~Data() {
- /*
+ /*
if (locked)
pthread_mutex_unlock(&mutex);
pthread_mutex_destroy(&mutex);
@@ -108,7 +109,7 @@ CharArray::Data::~Data() {
/*CharArray::Data::Data(const Data& d) : count_(1) {
size=0;
data=0;
-
+
lockingPid = 0;
locked = 0;
pthread_mutex_init(&mutex, NULL);
@@ -143,7 +144,6 @@ void CharArray::DataForeignData::Delete() {
//do not delete!
}
-
/*
void CharArray::Data::assign(unsigned int s) {
if (data)
@@ -184,16 +184,15 @@ void Parsable::CheckParse() {
}
}
-
-//taken and adapted from libdtv, (c) Rolf Hakenes and VDR, (c) Klaus Schmidinger
+//taken and adapted from libdtv, (c) Rolf Hakenes and VDR, (c) Klaus Schmidinger
time_t DVBTime::getTime(unsigned char date_hi, unsigned char date_lo, unsigned char time_hour, unsigned char time_minute, unsigned char time_second) {
unsigned short mjd = date_hi << 8 | date_lo;
struct tm t;
-
+
t.tm_sec = bcdToDec(time_second);
t.tm_min = bcdToDec(time_minute);
t.tm_hour = bcdToDec(time_hour);
-
+
int k;
t.tm_year = (int) ((mjd - 15078.2) / 365.25);
t.tm_mon = (int) ((mjd - 14956.1 - (int)(t.tm_year * 365.25)) / 30.6001);
@@ -205,7 +204,7 @@ time_t DVBTime::getTime(unsigned char date_hi, unsigned char date_lo, unsigned c
t.tm_isdst = -1;
t.tm_gmtoff = 0;
-
+
return timegm(&t);
}
@@ -279,12 +278,4 @@ CRC32::CRC32(const char *d, int len, unsigned long CRCvalue) {
value=CRCvalue;
}
-
-
-
-
-
} //end of namespace
-
-
-
diff --git a/libsi/util.h b/libsi/util.h
index 8df82c4d..d6765104 100644
--- a/libsi/util.h
+++ b/libsi/util.h
@@ -6,9 +6,10 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
+ * $Id: util.h 1.2 2003/12/13 10:42:20 kls Exp $
+ * *
***************************************************************************/
-
#ifndef LIBSI_UTIL_H
#define LIBSI_UTIL_H
@@ -23,28 +24,27 @@
namespace SI {
-
//Holds an array of unsigned char which is deleted
//when the last object pointing to it is deleted.
//Optimized for use in libsi.
class CharArray {
public:
CharArray();
-
+
CharArray(const CharArray &source);
CharArray& operator=(const CharArray &source);
~CharArray();
-
+
//can be called exactly once
void assign(const unsigned char*data, unsigned int size, bool doCopy=true);
//compares to a null-terminated string
- bool operator==(const char *string) const;
+ bool operator==(const char *string) const;
//compares to another CharArray (data not necessarily null-terminated)
bool operator==(const CharArray &other) const;
-
+
//returns another CharArray with its offset incremented by offset
CharArray operator+(const unsigned int offset) const;
-
+
//access and convenience methods
const unsigned char* getData() const { return data_->data+off; }
const unsigned char* getData(int offset) const { return data_->data+offset+off; }
@@ -56,17 +56,17 @@ public:
int getLength() const { return data_->size; }
unsigned short TwoBytes(const unsigned int index) const { return data_->data ? data_->TwoBytes(off+index) : 0; }
unsigned long FourBytes(const unsigned int index) const { return data_->data ? data_->FourBytes(off+index) : 0; }
-
+
void addOffset(unsigned int offset) { off+=offset; }
private:
class Data {
public:
Data();
virtual ~Data();
-
+
virtual void assign(const unsigned char*data, unsigned int size) = 0;
virtual void Delete() = 0;
-
+
unsigned short TwoBytes(const unsigned int index) const
{ return (data[index] << 8) | data[index+1]; }
unsigned long FourBytes(const unsigned int index) const
@@ -81,15 +81,15 @@ private:
Data(const Data& d);
void assign(unsigned int size);
*/
-
+
const unsigned char*data;
unsigned int size;
-
+
unsigned count_;
// count_ is the number of CharArray objects that point at this
// count_ must be initialized to 1 by all constructors
// (it starts as 1 since it is pointed to by the CharArray object that created it)
-
+
/*
pthread_mutex_t mutex;
pid_t lockingPid;
@@ -114,8 +114,8 @@ private:
unsigned int off;
};
-
-
+
+
//abstract base class
class Parsable {
public:
@@ -145,16 +145,12 @@ public:
protected:
static unsigned long crc_table[256];
static unsigned long crc32 (const char *d, int len, unsigned long CRCvalue);
-
+
const char *data;
int length;
unsigned long value;
};
-
-
} //end of namespace
-
#endif
-