Implemented the TerrestrialDeliverySystemDescriptor in libdtv

This commit is contained in:
Klaus Schmidinger 2003-05-11 15:14:22 +02:00
parent 848e79eec8
commit 7b9f3dc568
6 changed files with 133 additions and 10 deletions

View File

@ -203,6 +203,7 @@ Andreas Schultz <aschultz@warp10.net>
for suggesting to remove the Mute() call from cDvbDevice::StillPicture()
for suggesting to separate the startup of a plugin into an "early" and a "late" phase
for changing C++ style comments in libdtv into C style to avoid warnings in gcc 3.x
for implementing the TerrestrialDeliverySystemDescriptor in libdtv
Aaron Holtzman
for writing 'ac3dec'

View File

@ -2115,7 +2115,8 @@ Video Disk Recorder Revision History
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)
- Implemented the CableDeliverySystemDescriptor and TerrestrialDeliverySystemDescriptor
in libdtv (thanks to Sven Grothklags and Andreas Schultz)
- Fixed keeping live video active in case the primary device doesn't have an MPEG
decoder (thanks to Wolfgang Goeller for reporting this one).
- Implemented cDevice::ActualDevice(), which returns the actual receiving device in

View File

@ -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 {

View File

@ -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))

View File

@ -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:

View File

@ -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: