mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Added support for "content identifier descriptor" and "default authority descriptor" to 'libsi'
This commit is contained in:
		@@ -2722,3 +2722,7 @@ Marco G
 | 
			
		||||
Johan Andersson <jna@jna.pp.se>
 | 
			
		||||
 for reporting a bug in detecting frames in case the Picture Start Code or Access Unit
 | 
			
		||||
 Delimiter extends over TS packet boundaries
 | 
			
		||||
 | 
			
		||||
Dave Pickles <dave@pickles.me.uk>
 | 
			
		||||
 for adding support for "content identifier descriptor" and "default authority
 | 
			
		||||
 descriptor" to 'libsi'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								HISTORY
									
									
									
									
									
								
							@@ -6607,7 +6607,7 @@ Video Disk Recorder Revision History
 | 
			
		||||
- Avoiding an unecessary call to Recordings.ResetResume() (thanks to Reinhard
 | 
			
		||||
  Nissl).
 | 
			
		||||
 | 
			
		||||
2011-06-13: Version 1.7.19
 | 
			
		||||
2011-06-15: Version 1.7.19
 | 
			
		||||
 | 
			
		||||
- Fixed cString's operator=(const char *String) in case the given string is the
 | 
			
		||||
  same as the existing one (thanks to Dirk Leber).
 | 
			
		||||
@@ -6647,3 +6647,5 @@ Video Disk Recorder Revision History
 | 
			
		||||
- The initial channel is now stored by the channel ID in the setup.conf file, in
 | 
			
		||||
  order to avoid problems in case channels are reordered or deleted (reported by
 | 
			
		||||
  Lars Bl<42>ser).
 | 
			
		||||
- Added support for "content identifier descriptor" and "default authority descriptor"
 | 
			
		||||
  to 'libsi' (thanks to Dave Pickles).
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
 *   the Free Software Foundation; either version 2 of the License, or     *
 | 
			
		||||
 *   (at your option) any later version.                                   *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   $Id: descriptor.c 2.1 2010/11/01 15:24:31 kls Exp $
 | 
			
		||||
 *   $Id: descriptor.c 2.2 2011/06/15 21:26:00 kls Exp $
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
@@ -643,6 +643,33 @@ void ServiceIdentifierDescriptor::Parse() {
 | 
			
		||||
   textualServiceIdentifier.setData(data+sizeof(descr_service_identifier), getLength()-sizeof(descr_service_identifier));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ContentIdentifierDescriptor::Parse() {
 | 
			
		||||
   identifierLoop.setData(data+sizeof(descr_content_identifier), getLength()-sizeof(descr_content_identifier));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ContentIdentifierDescriptor::Identifier::Parse() {
 | 
			
		||||
   int offset=0;
 | 
			
		||||
   data.setPointerAndOffset<const content_identifier_entry>(s, offset);
 | 
			
		||||
   if (s->crid_location == 0) {
 | 
			
		||||
     identifier.setData(data+(offset-1), s->crid_length);
 | 
			
		||||
   }
 | 
			
		||||
   else {
 | 
			
		||||
      identifier.setData(data+(offset-1), 2);
 | 
			
		||||
   }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ContentIdentifierDescriptor::Identifier::getCridType() const {
 | 
			
		||||
   return s->crid_type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int ContentIdentifierDescriptor::Identifier::getCridLocation() const {
 | 
			
		||||
   return s->crid_location;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DefaultAuthorityDescriptor::Parse() {
 | 
			
		||||
   DefaultAuthority.setData(data+sizeof(descr_default_authority), getLength()-sizeof(descr_default_authority));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MultilingualNameDescriptor::Parse() {
 | 
			
		||||
   nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
 *   the Free Software Foundation; either version 2 of the License, or     *
 | 
			
		||||
 *   (at your option) any later version.                                   *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   $Id: descriptor.h 2.1 2010/11/01 15:24:32 kls Exp $
 | 
			
		||||
 *   $Id: descriptor.h 2.2 2011/06/15 21:26:00 kls Exp $
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
@@ -361,6 +361,31 @@ protected:
 | 
			
		||||
   virtual void Parse();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class ContentIdentifierDescriptor : public Descriptor {
 | 
			
		||||
public:
 | 
			
		||||
   class Identifier : public LoopElement {
 | 
			
		||||
   public:
 | 
			
		||||
      String identifier;
 | 
			
		||||
      int getCridType() const;
 | 
			
		||||
      int getCridLocation() const;
 | 
			
		||||
      virtual int getLength() { return sizeof(content_identifier_entry)+identifier.getLength(); }
 | 
			
		||||
   protected:
 | 
			
		||||
      virtual void Parse();
 | 
			
		||||
   private:
 | 
			
		||||
      const content_identifier_entry *s;
 | 
			
		||||
   };
 | 
			
		||||
   StructureLoop<Identifier> identifierLoop;
 | 
			
		||||
protected:
 | 
			
		||||
   virtual void Parse();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class DefaultAuthorityDescriptor : public Descriptor {
 | 
			
		||||
public:
 | 
			
		||||
   String DefaultAuthority; //ID
 | 
			
		||||
protected:
 | 
			
		||||
   virtual void Parse();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//abstract base class
 | 
			
		||||
class MultilingualNameDescriptor : public Descriptor {
 | 
			
		||||
public:
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
 *   the Free Software Foundation; either version 2 of the License, or     *
 | 
			
		||||
 *   (at your option) any later version.                                   *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   $Id: headers.h 2.1 2010/11/01 15:24:32 kls Exp $
 | 
			
		||||
 *   $Id: headers.h 2.2 2011/06/15 21:26:00 kls Exp $
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
@@ -1680,6 +1680,24 @@ struct descr_content_identifier {
 | 
			
		||||
   u_char descriptor_length                      :8;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct content_identifier_entry {
 | 
			
		||||
#if BYTE_ORDER == BIG_ENDIAN
 | 
			
		||||
   u_char crid_type                              :6;
 | 
			
		||||
   u_char crid_location                          :2;
 | 
			
		||||
#else
 | 
			
		||||
   u_char crid_location                          :2;
 | 
			
		||||
   u_char crid_type                              :6;
 | 
			
		||||
#endif
 | 
			
		||||
  union {
 | 
			
		||||
    u_char crid_length                           :8;
 | 
			
		||||
    u_char crid_ref_hi                           :8;
 | 
			
		||||
  };
 | 
			
		||||
  union {
 | 
			
		||||
    u_char crid_byte                             :8;
 | 
			
		||||
    u_char crid_ref_lo                           :8;
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */
 | 
			
		||||
 | 
			
		||||
struct descr_time_slice_fec_identifier {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								libsi/si.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								libsi/si.c
									
									
									
									
									
								
							@@ -6,7 +6,7 @@
 | 
			
		||||
 *   the Free Software Foundation; either version 2 of the License, or     *
 | 
			
		||||
 *   (at your option) any later version.                                   *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   $Id: si.c 2.3 2010/11/01 15:24:32 kls Exp $
 | 
			
		||||
 *   $Id: si.c 2.4 2011/06/15 21:26:00 kls Exp $
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
@@ -609,6 +609,12 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
 | 
			
		||||
         case RegistrationDescriptorTag:
 | 
			
		||||
            d=new RegistrationDescriptor();
 | 
			
		||||
            break;
 | 
			
		||||
         case ContentIdentifierDescriptorTag:
 | 
			
		||||
            d=new ContentIdentifierDescriptor();
 | 
			
		||||
            break;
 | 
			
		||||
         case DefaultAuthorityDescriptorTag:
 | 
			
		||||
            d=new DefaultAuthorityDescriptor();
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
         //note that it is no problem to implement one
 | 
			
		||||
         //of the unimplemented descriptors.
 | 
			
		||||
@@ -650,10 +656,8 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
 | 
			
		||||
         case TransportStreamDescriptorTag:
 | 
			
		||||
 | 
			
		||||
         //defined in ETSI EN 300 468 v 1.7.1
 | 
			
		||||
         case DefaultAuthorityDescriptorTag:
 | 
			
		||||
         case RelatedContentDescriptorTag:
 | 
			
		||||
         case TVAIdDescriptorTag:
 | 
			
		||||
         case ContentIdentifierDescriptorTag:
 | 
			
		||||
         case TimeSliceFecIdentifierDescriptorTag:
 | 
			
		||||
         case ECMRepetitionRateDescriptorTag:
 | 
			
		||||
         case EnhancedAC3DescriptorTag:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user