Implemented the CableDeliverySystemDescriptor in libdtv

This commit is contained in:
Klaus Schmidinger 2003-05-10 09:25:14 +02:00
parent dc8fd12f91
commit 91b5114838
5 changed files with 69 additions and 5 deletions

View File

@ -409,6 +409,7 @@ Gregoire Favre <greg@ulima.unil.ch>
Sven Grothklags <sven@uni-paderborn.de>
for fixing the cutting mechanism to make it re-sync in case a frame is larger
than the buffer
for implementing the CableDeliverySystemDescriptor in libdtv
Tomas Prybil <tomas.prybil@copper.se>
for translating OSD texts to the Swedish language

View File

@ -2109,9 +2109,10 @@ Video Disk Recorder Revision History
- The red ("Record") and yellow ("Pause") button in the "Main" menu are no longer
available when replaying.
2003-05-09: Version 1.1.31
2003-05-10: Version 1.1.31
- Introduced the new function cPlugin::Initialize(), in order to be able to separate
the startup of a plugin into an "early" (Initialize()) and "late" (Start()) phase
(suggested by Andreas Schultz). Plugin authors should please read the section
about "Getting started" in PLUGINS.html and adapt their code if applicable.
- Implemented the CableDeliverySystemDescriptor in libdtv (thanks to Sven Grothklags)

View File

@ -1054,6 +1054,28 @@ struct SatelliteDeliverySystemDescriptor {
((struct SatelliteDeliverySystemDescriptor *)descr)->FEC = fec; \
} while (0)
/* CableDeliverySystemDescriptor */
struct CableDeliverySystemDescriptor {
struct NODE Node;
unsigned short Tag;
long Frequency;
long SymbolRate;
char FEC;
char Modulation;
};
#define CreateCableDeliverySystemDescriptor(descr, freq, sr, fec, 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)->Modulation = mod; \
} while (0)
/* ServiceListDescriptor */
struct ServiceListDescriptor {

View File

@ -540,6 +540,19 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
}
break;
case DESCR_CABLE_DEL_SYS:
{
struct CableDeliverySystemDescriptor *cds =
(struct CableDeliverySystemDescriptor *)Descriptor;
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 Modulation: %d\n", Prepend, cds->Modulation);
}
break;
case DESCR_SERVICE_LIST:
{
struct ServiceListEntry *Entry;
@ -572,7 +585,6 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
break;
case DESCR_STUFFING:
case DESCR_CABLE_DEL_SYS:
case DESCR_VBI_DATA:
case DESCR_VBI_TELETEXT:
case DESCR_MOSAIC:
@ -598,7 +610,7 @@ void siDebugDescriptors (char *Prepend, struct LIST *Descriptors)
case DESCR_CELL_FREQ_LINK:
case DESCR_ANNOUNCEMENT_SUPPORT:
default:
printf ("%sDescriptor: (noch nicht unterstützt)\n", Prepend);
printf ("%sDescriptor: %02x (noch nicht unterstützt)\n", Prepend, DescriptorTag (Descriptor));
break;
}
}

View File

@ -1064,6 +1064,36 @@ 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_inner,
cds->modulation
);
}
/* 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,7 +1149,6 @@ 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:
@ -1181,7 +1210,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++;
}