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>
|
||||
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ä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:
|
||||
|
Loading…
Reference in New Issue
Block a user