mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Implemented the TerrestrialDeliverySystemDescriptor in libdtv
This commit is contained in:
		| @@ -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' | ||||
|   | ||||
							
								
								
									
										3
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -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 | ||||
|   | ||||
| @@ -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 { | ||||
|   | ||||
| @@ -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)) | ||||
|  | ||||
|   | ||||
| @@ -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: | ||||
|   | ||||
| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user