mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Added support for "content identifier descriptor" and "default authority descriptor" to 'libsi'
This commit is contained in:
parent
263dc29508
commit
b2812b7e71
@ -2722,3 +2722,7 @@ Marco G
|
|||||||
Johan Andersson <jna@jna.pp.se>
|
Johan Andersson <jna@jna.pp.se>
|
||||||
for reporting a bug in detecting frames in case the Picture Start Code or Access Unit
|
for reporting a bug in detecting frames in case the Picture Start Code or Access Unit
|
||||||
Delimiter extends over TS packet boundaries
|
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
|
- Avoiding an unecessary call to Recordings.ResetResume() (thanks to Reinhard
|
||||||
Nissl).
|
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
|
- Fixed cString's operator=(const char *String) in case the given string is the
|
||||||
same as the existing one (thanks to Dirk Leber).
|
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
|
- 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
|
order to avoid problems in case channels are reordered or deleted (reported by
|
||||||
Lars Bläser).
|
Lars Blä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 *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (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));
|
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() {
|
void MultilingualNameDescriptor::Parse() {
|
||||||
nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name));
|
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 *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (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();
|
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
|
//abstract base class
|
||||||
class MultilingualNameDescriptor : public Descriptor {
|
class MultilingualNameDescriptor : public Descriptor {
|
||||||
public:
|
public:
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (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;
|
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) */
|
/* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */
|
||||||
|
|
||||||
struct descr_time_slice_fec_identifier {
|
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 *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (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:
|
case RegistrationDescriptorTag:
|
||||||
d=new RegistrationDescriptor();
|
d=new RegistrationDescriptor();
|
||||||
break;
|
break;
|
||||||
|
case ContentIdentifierDescriptorTag:
|
||||||
|
d=new ContentIdentifierDescriptor();
|
||||||
|
break;
|
||||||
|
case DefaultAuthorityDescriptorTag:
|
||||||
|
d=new DefaultAuthorityDescriptor();
|
||||||
|
break;
|
||||||
|
|
||||||
//note that it is no problem to implement one
|
//note that it is no problem to implement one
|
||||||
//of the unimplemented descriptors.
|
//of the unimplemented descriptors.
|
||||||
@ -650,10 +656,8 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain,
|
|||||||
case TransportStreamDescriptorTag:
|
case TransportStreamDescriptorTag:
|
||||||
|
|
||||||
//defined in ETSI EN 300 468 v 1.7.1
|
//defined in ETSI EN 300 468 v 1.7.1
|
||||||
case DefaultAuthorityDescriptorTag:
|
|
||||||
case RelatedContentDescriptorTag:
|
case RelatedContentDescriptorTag:
|
||||||
case TVAIdDescriptorTag:
|
case TVAIdDescriptorTag:
|
||||||
case ContentIdentifierDescriptorTag:
|
|
||||||
case TimeSliceFecIdentifierDescriptorTag:
|
case TimeSliceFecIdentifierDescriptorTag:
|
||||||
case ECMRepetitionRateDescriptorTag:
|
case ECMRepetitionRateDescriptorTag:
|
||||||
case EnhancedAC3DescriptorTag:
|
case EnhancedAC3DescriptorTag:
|
||||||
|
Loading…
Reference in New Issue
Block a user