summaryrefslogtreecommitdiff
path: root/libdtv
diff options
context:
space:
mode:
Diffstat (limited to 'libdtv')
-rw-r--r--libdtv/libsi/include/libsi.h44
-rw-r--r--libdtv/libsi/include/si_tables.h36
-rw-r--r--libdtv/libsi/si_debug_services.c23
-rw-r--r--libdtv/libsi/si_parser.c36
4 files changed, 130 insertions, 9 deletions
diff --git a/libdtv/libsi/include/libsi.h b/libdtv/libsi/include/libsi.h
index a5e587b2..fca96ba7 100644
--- a/libdtv/libsi/include/libsi.h
+++ b/libdtv/libsi/include/libsi.h
@@ -1037,18 +1037,20 @@ struct SatelliteDeliverySystemDescriptor {
unsigned short Tag;
long Frequency;
short OrbitalPosition;
+ short Modulation;
char Polarization;
long SymbolRate;
char FEC;
};
-#define CreateSatelliteDeliverySystemDescriptor(descr, freq, orb, polar, sr, fec) \
+#define CreateSatelliteDeliverySystemDescriptor(descr, freq, orb, mod, polar, sr, fec) \
do \
{ \
xCreateNode (((struct SatelliteDeliverySystemDescriptor *)descr), NULL); \
((struct SatelliteDeliverySystemDescriptor *)descr)->Tag = DESCR_SAT_DEL_SYS; \
((struct SatelliteDeliverySystemDescriptor *)descr)->Frequency = freq; \
((struct SatelliteDeliverySystemDescriptor *)descr)->OrbitalPosition = orb; \
+ ((struct SatelliteDeliverySystemDescriptor *)descr)->Modulation = mod; \
((struct SatelliteDeliverySystemDescriptor *)descr)->Polarization = polar; \
((struct SatelliteDeliverySystemDescriptor *)descr)->SymbolRate = sr; \
((struct SatelliteDeliverySystemDescriptor *)descr)->FEC = fec; \
@@ -1061,21 +1063,55 @@ struct CableDeliverySystemDescriptor {
unsigned short Tag;
long Frequency;
long SymbolRate;
- char FEC;
+ char FECouter;
+ char FECinner;
char Modulation;
};
-#define CreateCableDeliverySystemDescriptor(descr, freq, sr, fec, mod) \
+#define CreateCableDeliverySystemDescriptor(descr, freq, sr, fec_o, fec_i, mod) \
do \
{ \
xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \
((struct CableDeliverySystemDescriptor *)descr)->Tag = DESCR_CABLE_DEL_SYS; \
((struct CableDeliverySystemDescriptor *)descr)->Frequency = freq; \
((struct CableDeliverySystemDescriptor *)descr)->SymbolRate = sr; \
- ((struct CableDeliverySystemDescriptor *)descr)->FEC = fec; \
+ ((struct CableDeliverySystemDescriptor *)descr)->FECouter = fec_o; \
+ ((struct CableDeliverySystemDescriptor *)descr)->FECinner = fec_i; \
((struct CableDeliverySystemDescriptor *)descr)->Modulation = mod; \
} while (0)
+/* TerrestrialDeliverySystemDescriptor */
+
+struct TerrestrialDeliverySystemDescriptor {
+ struct NODE Node;
+ unsigned short Tag;
+ long Frequency;
+ char Bandwidth;
+ char Constellation;
+ char Hierarchy;
+ char CodeRateHP;
+ char CodeRateLP;
+ char GuardInterval;
+ char TransmissionMode;
+ char OtherFrequencyFlag;
+};
+
+#define CreateTerrestrialDeliverySystemDescriptor(descr, freq, bw, cst, hr, crh, crl, gi, tm, ofm) \
+ do \
+ { \
+ xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->Tag = DESCR_TERR_DEL_SYS; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->Frequency = freq; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->Bandwidth = bw; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->Constellation = cst; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->Hierarchy = hr; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->CodeRateHP = crh; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->CodeRateLP = crl; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->GuardInterval = gi; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->TransmissionMode = tm; \
+ ((struct TerrestrialDeliverySystemDescriptor *)descr)->OtherFrequencyFlag = ofm; \
+ } while (0)
+
/* ServiceListDescriptor */
struct ServiceListDescriptor {
diff --git a/libdtv/libsi/include/si_tables.h b/libdtv/libsi/include/si_tables.h
index 9da31a0f..f5e659ca 100644
--- a/libdtv/libsi/include/si_tables.h
+++ b/libdtv/libsi/include/si_tables.h
@@ -1126,7 +1126,41 @@ typedef struct item_subtitling_struct {
typedef struct descr_terrestrial_delivery_struct {
u_char descriptor_tag :8;
u_char descriptor_length :8;
- /* TBD */
+ u_char frequency1 :8;
+ u_char frequency2 :8;
+ u_char frequency3 :8;
+ u_char frequency4 :8;
+#if BYTE_ORDER == BIG_ENDIAN
+ u_char bandwidth :3;
+ u_char reserved1 :5;
+#else
+ u_char reserved1 :5;
+ u_char bandwidth :3;
+#endif
+#if BYTE_ORDER == BIG_ENDIAN
+ u_char constellation :2;
+ u_char hierarchy :3;
+ u_char code_rate_HP :3;
+#else
+ u_char code_rate_HP :3;
+ u_char hierarchy :3;
+ u_char constellation :2;
+#endif
+#if BYTE_ORDER == BIG_ENDIAN
+ u_char code_rate_LP :3;
+ u_char guard_interval :2;
+ u_char transmission_mode :2;
+ u_char other_frequency_flag :1;
+#else
+ u_char other_frequency_flag :1;
+ u_char transmission_mode :2;
+ u_char guard_interval :2;
+ u_char code_rate_LP :3;
+#endif
+ u_char reserver2 :8;
+ u_char reserver3 :8;
+ u_char reserver4 :8;
+ u_char reserver5 :8;
} descr_terrestrial_delivery_system_t;
#define CastTerrestrialDeliverySystemDescriptor(x) ((descr_terrestrial_delivery_system_t *)(x))
diff --git a/libdtv/libsi/si_debug_services.c b/libdtv/libsi/si_debug_services.c
index 9138d803..1ff74000 100644
--- a/libdtv/libsi/si_debug_services.c
+++ b/libdtv/libsi/si_debug_services.c
@@ -535,6 +535,7 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
printf ("%s Frequency: %ld\n", Prepend, sds->Frequency);
printf ("%s OrbitalPosition: %d\n", Prepend, sds->OrbitalPosition);
printf ("%s Polarization: %c\n", Prepend, sds->Polarization);
+ printf ("%s Modulation: %c\n", Prepend, sds->Modulation);
printf ("%s SymbolRate: %ld\n", Prepend, sds->SymbolRate);
printf ("%s FEC: %c\n", Prepend, sds->FEC);
}
@@ -548,11 +549,30 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
printf ("%sDescriptor: Cable Delivery System\n", Prepend);
printf ("%s Frequency: %ld\n", Prepend, cds->Frequency);
printf ("%s SymbolRate: %ld\n", Prepend, cds->SymbolRate);
- printf ("%s FEC: %d\n", Prepend, cds->FEC);
+ printf ("%s FEC outer: %d\n", Prepend, cds->FECouter);
+ printf ("%s FEC inner: %d\n", Prepend, cds->FECinner);
printf ("%s Modulation: %d\n", Prepend, cds->Modulation);
}
break;
+ case DESCR_TERR_DEL_SYS:
+ {
+ struct TerrestrialDeliverySystemDescriptor *tds =
+ (struct TerrestrialDeliverySystemDescriptor *)Descriptor;
+
+ printf ("%sDescriptor: Terrestrial Delivery System\n", Prepend);
+ printf ("%s Frequency: %ld\n", Prepend, tds->Frequency);
+ printf ("%s Bandwidth: %d\n", Prepend, tds->Bandwidth);
+ printf ("%s Constellation: %d\n", Prepend, tds->Constellation);
+ printf ("%s Hierarchy: %d\n", Prepend, tds->Hierarchy);
+ printf ("%s CodeRateHP: %d\n", Prepend, tds->CodeRateHP);
+ printf ("%s CodeRateLP: %d\n", Prepend, tds->CodeRateLP);
+ printf ("%s GuardInterval: %d\n", Prepend, tds->GuardInterval);
+ printf ("%s TransmissionMode: %d\n", Prepend, tds->TransmissionMode);
+ printf ("%s OtherFrequencyFlag: %d\n", Prepend, tds->OtherFrequencyFlag);
+ }
+ break;
+
case DESCR_SERVICE_LIST:
{
struct ServiceListEntry *Entry;
@@ -589,7 +609,6 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
case DESCR_VBI_TELETEXT:
case DESCR_MOSAIC:
case DESCR_TELEPHONE:
- case DESCR_TERR_DEL_SYS:
case DESCR_ML_NW_NAME:
case DESCR_ML_BQ_NAME:
case DESCR_ML_SERVICE_NAME:
diff --git a/libdtv/libsi/si_parser.c b/libdtv/libsi/si_parser.c
index 1ca311be..a922b7e3 100644
--- a/libdtv/libsi/si_parser.c
+++ b/libdtv/libsi/si_parser.c
@@ -1050,6 +1050,7 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
(sds->west_east_flag ? 1 : -1) *
(BcdCharToInt (sds->orbital_position1) * 100 +
BcdCharToInt (sds->orbital_position2)),
+ sds->modulation,
sds->polarization,
BcdCharToInt (sds->symbol_rate1) * 10 * 1000 +
BcdCharToInt (sds->symbol_rate2) * 100 +
@@ -1082,8 +1083,40 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
BcdCharToInt (cds->symbol_rate1) * 10 * 1000 +
BcdCharToInt (cds->symbol_rate2) * 100 +
BcdCharToInt (cds->symbol_rate3),
+ cds->fec_outer,
cds->fec_inner,
- cds->modulation
+ cds->modulation
+ );
+ }
+ /* else
+ {
+ fprintf (stderr, "Illegal cds descriptor\n");
+ siDumpDescriptor (Buffer);
+ } */
+ }
+ break;
+
+ case DESCR_TERR_DEL_SYS:
+// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer));
+ {
+ descr_terrestrial_delivery_system_t *tds;
+ tds = (descr_terrestrial_delivery_system_t *) Ptr;
+ if (CheckBcdChar (tds->frequency1) && CheckBcdChar (tds->frequency2) &&
+ CheckBcdChar (tds->frequency3) && CheckBcdChar (tds->frequency4))
+ {
+ CreateTerrestrialDeliverySystemDescriptor (Descriptor,
+ BcdCharToInt (tds->frequency1) * 100 * 1000 * 1000 +
+ BcdCharToInt (tds->frequency2) * 1000 * 1000 +
+ BcdCharToInt (tds->frequency3) * 10 * 1000 +
+ BcdCharToInt (tds->frequency4) * 100,
+ tds->bandwidth,
+ tds->constellation,
+ tds->hierarchy,
+ tds->code_rate_HP,
+ tds->code_rate_LP,
+ tds->guard_interval,
+ tds->transmission_mode,
+ tds->other_frequency_flag
);
}
/* else
@@ -1153,7 +1186,6 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
case DESCR_VBI_TELETEXT:
case DESCR_MOSAIC:
case DESCR_TELEPHONE:
- case DESCR_TERR_DEL_SYS:
case DESCR_ML_NW_NAME:
case DESCR_ML_BQ_NAME:
case DESCR_ML_SERVICE_NAME: