summaryrefslogtreecommitdiff
path: root/libdtv/libsi/si_parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdtv/libsi/si_parser.c')
-rw-r--r--libdtv/libsi/si_parser.c66
1 files changed, 63 insertions, 3 deletions
diff --git a/libdtv/libsi/si_parser.c b/libdtv/libsi/si_parser.c
index e8cf8b2..a922b7e 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 +
@@ -1064,6 +1065,68 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
}
break;
+ case DESCR_CABLE_DEL_SYS:
+// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer));
+ {
+ descr_cable_delivery_system_t *cds;
+ cds = (descr_cable_delivery_system_t *) Ptr;
+ if (CheckBcdChar (cds->frequency1) && CheckBcdChar (cds->frequency2) &&
+ CheckBcdChar (cds->frequency3) && CheckBcdChar (cds->frequency4) &&
+ CheckBcdChar (cds->symbol_rate1) && CheckBcdChar (cds->symbol_rate1) &&
+ CheckBcdChar (cds->symbol_rate3) && (cds->fec_inner != 0))
+ {
+ CreateCableDeliverySystemDescriptor (Descriptor,
+ BcdCharToInt (cds->frequency1) * 100 * 1000 * 1000 +
+ BcdCharToInt (cds->frequency2) * 1000 * 1000 +
+ BcdCharToInt (cds->frequency3) * 10 * 1000 +
+ BcdCharToInt (cds->frequency4) * 100,
+ BcdCharToInt (cds->symbol_rate1) * 10 * 1000 +
+ BcdCharToInt (cds->symbol_rate2) * 100 +
+ BcdCharToInt (cds->symbol_rate3),
+ cds->fec_outer,
+ cds->fec_inner,
+ 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
+ {
+ fprintf (stderr, "Illegal cds descriptor\n");
+ siDumpDescriptor (Buffer);
+ } */
+ }
+ break;
+
case DESCR_SERVICE_LIST:
// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer));
CreateServiceListDescriptor (Descriptor);
@@ -1119,12 +1182,10 @@ void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer)
case DESCR_SMOOTHING_BUFFER:
case DESCR_STD:
case DESCR_IBP:
- case DESCR_CABLE_DEL_SYS:
case DESCR_VBI_DATA:
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:
@@ -1181,7 +1242,6 @@ char *siGetDescriptorTextHandler (u_char *Buffer, int Length, int type)
if ((*Buffer >= ' ' && *Buffer <= '~') || (*Buffer == '\n') ||
(*Buffer >= 0xa0 && *Buffer <= 0xff)) *tmp++ = *Buffer;
if (*Buffer == 0x8A) *tmp++ = '\n';
- if (*Buffer == 0x86 || *Buffer == 0x87) *tmp++ = ' ';
if ((*Buffer == 0x86 || *Buffer == 0x87) && !(GDT_NAME_DESCRIPTOR & type)) *tmp++ = ' ';
Buffer++;
}