diff options
| author | Dave <vdr@pickles.me.uk> | 2010-09-26 11:45:19 +0100 |
|---|---|---|
| committer | Dave <vdr@pickles.me.uk> | 2010-09-26 11:45:19 +0100 |
| commit | 5fe3a865573fea8ffc100bf34037dec955281bdf (patch) | |
| tree | de6eeebf58f61044c703acb2475a52e8bc704f12 | |
| parent | 59f78a41725524d56c442c1d39734f0a1d905958 (diff) | |
| download | vdrtva-5fe3a865573fea8ffc100bf34037dec955281bdf.tar.gz vdrtva-5fe3a865573fea8ffc100bf34037dec955281bdf.tar.bz2 | |
Improved compliance with ETSI TS 102 323. For vdr 1.7.16.
| -rw-r--r-- | vdrtva-1.7.16.diff (renamed from vdrtva-1.7.15.diff) | 217 |
1 files changed, 92 insertions, 125 deletions
diff --git a/vdrtva-1.7.15.diff b/vdrtva-1.7.16.diff index 3f91141..68bb7d0 100644 --- a/vdrtva-1.7.15.diff +++ b/vdrtva-1.7.16.diff @@ -1,6 +1,6 @@ -diff -ur vdr-1.7.15/channels.c vdr-1.7/channels.c ---- vdr-1.7.15/channels.c 2010-06-05 14:33:57.000000000 +0100 -+++ vdr-1.7/channels.c 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/channels.c vdr-test/channels.c +--- vdr-1.7.16/channels.c 2010-06-05 14:33:57.000000000 +0100 ++++ vdr-test/channels.c 2010-09-23 18:01:18.000000000 +0100 @@ -61,6 +61,7 @@ shortName = strdup(""); provider = strdup(""); @@ -97,9 +97,9 @@ diff -ur vdr-1.7.15/channels.c vdr-1.7/channels.c if (!GetChannelID().Valid()) { esyslog("ERROR: channel data results in invalid ID!"); return false; -diff -ur vdr-1.7.15/channels.h vdr-1.7/channels.h ---- vdr-1.7.15/channels.h 2010-06-05 14:12:54.000000000 +0100 -+++ vdr-1.7/channels.h 2010-06-06 14:57:09.000000000 +0100 +diff -ur vdr-1.7.16/channels.h vdr-test/channels.h +--- vdr-1.7.16/channels.h 2010-06-05 14:12:54.000000000 +0100 ++++ vdr-test/channels.h 2010-09-23 18:01:18.000000000 +0100 @@ -96,6 +96,7 @@ char *shortName; char *provider; @@ -124,9 +124,9 @@ diff -ur vdr-1.7.15/channels.h vdr-1.7/channels.h void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, int *Atypes, char ALangs[][MAXLANGCODE2], int *Dpids, int *Dtypes, char DLangs[][MAXLANGCODE2], int *Spids, char SLangs[][MAXLANGCODE2], int Tpid); void SetCaIds(const int *CaIds); // list must be zero-terminated void SetCaDescriptors(int Level); -diff -ur vdr-1.7.15/config.c vdr-1.7/config.c ---- vdr-1.7.15/config.c 2010-06-06 11:06:43.000000000 +0100 -+++ vdr-1.7/config.c 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/config.c vdr-test/config.c +--- vdr-1.7.16/config.c 2010-06-06 11:06:43.000000000 +0100 ++++ vdr-test/config.c 2010-09-23 18:01:18.000000000 +0100 @@ -353,6 +353,7 @@ UseSubtitle = 1; UseVps = 0; @@ -151,9 +151,9 @@ diff -ur vdr-1.7.15/config.c vdr-1.7/config.c Store("RecordingDirs", RecordingDirs); Store("FoldersInTimerMenu", FoldersInTimerMenu); Store("NumberKeysForChars", NumberKeysForChars); -diff -ur vdr-1.7.15/config.h vdr-1.7/config.h ---- vdr-1.7.15/config.h 2010-06-06 10:53:02.000000000 +0100 -+++ vdr-1.7/config.h 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/config.h vdr-test/config.h +--- vdr-1.7.16/config.h 2010-09-12 12:31:21.000000000 +0100 ++++ vdr-test/config.h 2010-09-23 18:01:18.000000000 +0100 @@ -252,6 +252,7 @@ int UseSubtitle; int UseVps; @@ -162,69 +162,41 @@ diff -ur vdr-1.7.15/config.h vdr-1.7/config.h int RecordingDirs; int FoldersInTimerMenu; int NumberKeysForChars; -diff -ur vdr-1.7.15/eit.c vdr-1.7/eit.c ---- vdr-1.7.15/eit.c 2010-05-14 15:08:35.000000000 +0100 -+++ vdr-1.7/eit.c 2010-06-06 14:54:48.000000000 +0100 -@@ -121,6 +121,8 @@ - SI::Descriptor *d; - SI::ExtendedEventDescriptors *ExtendedEventDescriptors = NULL; - SI::ShortEventDescriptor *ShortEventDescriptor = NULL; -+ SI::ContentIdentifierDescriptor *itemCrid = NULL; -+ SI::ContentIdentifierDescriptor *seriesCrid = NULL; - cLinkChannels *LinkChannels = NULL; - cComponents *Components = NULL; - for (SI::Loop::Iterator it2; (d = SiEitEvent.eventDescriptors.getNext(it2)); ) { -@@ -265,6 +267,23 @@ +diff -ur vdr-1.7.16/eit.c vdr-test/eit.c +--- vdr-1.7.16/eit.c 2010-05-14 15:08:35.000000000 +0100 ++++ vdr-test/eit.c 2010-09-25 14:49:53.000000000 +0100 +@@ -265,6 +265,27 @@ } } break; + case SI::ContentIdentifierDescriptorTag: { + SI::ContentIdentifierDescriptor *cd = (SI::ContentIdentifierDescriptor *)d; -+ switch (cd->getCridType()) { -+ case 0x01: -+ case 0x31: { -+ itemCrid = cd; -+ d = NULL; // so that it is not deleted -+ break; -+ } -+ case 0x02: -+ case 0x32: { -+ seriesCrid = cd; -+ d = NULL; // so that it is not deleted -+ break; -+ } ++ SI::ContentIdentifierDescriptor::Identifier cde; ++ for (SI::Loop::Iterator ite; (cd->identifierLoop.getNext(cde,ite)); ) { ++ if (cde.getCridLocation() == 0) { ++ char buffer[Utf8BufSize(256)]; ++ strcpy (buffer, channel->DefaultAuthority()); ++ strcat(buffer, cde.identifier.getText()); ++ switch (cde.getCridType()) { ++ case 0x01: ++ case 0x31: ++ pEvent->SetItemCRID(buffer); ++ break; ++ case 0x02: ++ case 0x32: ++ pEvent->SetSeriesCRID(buffer); ++ break; ++ } ++ } + } + } default: ; } delete d; -@@ -286,9 +305,23 @@ - } - else if (!HasExternalData) - pEvent->SetDescription(NULL); -+ if (itemCrid && (itemCrid->getCridLocation() == 0)) { -+ char buffer[Utf8BufSize(256)]; -+ strcpy (buffer, channel->DefaultAuthority()); -+ strcat(buffer, itemCrid->entry.getText()); -+ pEvent->SetItemCRID(buffer); - } -+ if (seriesCrid && (seriesCrid->getCridLocation() == 0)) { -+ char buffer[Utf8BufSize(256)]; -+ strcpy (buffer, channel->DefaultAuthority()); -+ strcat(buffer, seriesCrid->entry.getText()); -+ pEvent->SetSeriesCRID(buffer); -+ } -+ } - delete ExtendedEventDescriptors; - delete ShortEventDescriptor; -+ delete itemCrid; -+ delete seriesCrid; - - pEvent->SetComponents(Components); -diff -ur vdr-1.7.15/epg.c vdr-1.7/epg.c ---- vdr-1.7.15/epg.c 2010-02-28 14:24:55.000000000 +0000 -+++ vdr-1.7/epg.c 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/epg.c vdr-test/epg.c +--- vdr-1.7.16/epg.c 2010-02-28 14:24:55.000000000 +0000 ++++ vdr-test/epg.c 2010-09-23 18:01:18.000000000 +0100 @@ -117,6 +117,8 @@ startTime = 0; duration = 0; @@ -282,9 +254,9 @@ diff -ur vdr-1.7.15/epg.c vdr-1.7/epg.c default: esyslog("ERROR: unexpected tag while reading EPG data: %s", s); return false; } -diff -ur vdr-1.7.15/epg.h vdr-1.7/epg.h ---- vdr-1.7.15/epg.h 2010-01-08 15:20:34.000000000 +0000 -+++ vdr-1.7/epg.h 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/epg.h vdr-test/epg.h +--- vdr-1.7.16/epg.h 2010-01-08 15:20:34.000000000 +0000 ++++ vdr-test/epg.h 2010-09-23 18:01:18.000000000 +0100 @@ -86,6 +86,8 @@ int duration; // Duration of this event in seconds time_t vps; // Video Programming Service timestamp (VPS, aka "Programme Identification Label", PIL) @@ -312,29 +284,33 @@ diff -ur vdr-1.7.15/epg.h vdr-1.7/epg.h void SetSeen(void); cString ToDescr(void) const; void Dump(FILE *f, const char *Prefix = "", bool InfoOnly = false) const; -diff -ur vdr-1.7.15/libsi/descriptor.c vdr-1.7/libsi/descriptor.c ---- vdr-1.7.15/libsi/descriptor.c 2007-02-03 11:45:58.000000000 +0000 -+++ vdr-1.7/libsi/descriptor.c 2010-06-06 14:54:48.000000000 +0100 -@@ -643,6 +643,29 @@ +diff -ur vdr-1.7.16/libsi/descriptor.c vdr-test/libsi/descriptor.c +--- vdr-1.7.16/libsi/descriptor.c 2007-02-03 11:45:58.000000000 +0000 ++++ vdr-test/libsi/descriptor.c 2010-09-25 15:04:17.000000000 +0100 +@@ -643,6 +643,33 @@ 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 descr_content_identifier>(s, offset); ++ data.setPointerAndOffset<const content_identifier_entry>(s, offset); + if (s->crid_location == 0) { -+ entry.setData(data+(offset-1), s->crid_length); ++ identifier.setData(data+(offset-1), s->crid_length); + } + else { -+ entry.setData(data+(offset-1), 2); ++ identifier.setData(data+(offset-1), 2); + } +} + -+int ContentIdentifierDescriptor::getCridType() const { ++int ContentIdentifierDescriptor::Identifier::getCridType() const { + return s->crid_type; +} + -+int ContentIdentifierDescriptor::getCridLocation() const { ++int ContentIdentifierDescriptor::Identifier::getCridLocation() const { + return s->crid_location; +} + @@ -345,23 +321,29 @@ diff -ur vdr-1.7.15/libsi/descriptor.c vdr-1.7/libsi/descriptor.c void MultilingualNameDescriptor::Parse() { nameLoop.setData(data+sizeof(descr_multilingual_network_name), getLength()-sizeof(descr_multilingual_network_name)); } -diff -ur vdr-1.7.15/libsi/descriptor.h vdr-1.7/libsi/descriptor.h ---- vdr-1.7.15/libsi/descriptor.h 2007-02-03 11:45:58.000000000 +0000 -+++ vdr-1.7/libsi/descriptor.h 2010-06-06 14:54:48.000000000 +0100 -@@ -361,6 +361,25 @@ +diff -ur vdr-1.7.16/libsi/descriptor.h vdr-test/libsi/descriptor.h +--- vdr-1.7.16/libsi/descriptor.h 2007-02-03 11:45:58.000000000 +0000 ++++ vdr-test/libsi/descriptor.h 2010-09-23 18:20:14.000000000 +0100 +@@ -361,6 +361,31 @@ virtual void Parse(); }; +class ContentIdentifierDescriptor : public Descriptor { +public: -+ String entry; -+ int getCridType() const; -+ int getCridLocation() const; -+// virtual int getLength() { return sizeof(descr_content_identifier)+entry.getLength(); } ++ 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 descr_content_identifier *s; ++ const content_identifier_entry *s; ++ }; ++ StructureLoop<Identifier> identifierLoop; +protected: -+ virtual void Parse(); ++ virtual void Parse(); +}; + +class DefaultAuthorityDescriptor : public Descriptor { @@ -374,31 +356,14 @@ diff -ur vdr-1.7.15/libsi/descriptor.h vdr-1.7/libsi/descriptor.h //abstract base class class MultilingualNameDescriptor : public Descriptor { public: -diff -ur vdr-1.7.15/libsi/headers.h vdr-1.7/libsi/headers.h ---- vdr-1.7.15/libsi/headers.h 2007-02-03 11:45:58.000000000 +0000 -+++ vdr-1.7/libsi/headers.h 2010-06-06 14:54:48.000000000 +0100 -@@ -1673,11 +1673,39 @@ +diff -ur vdr-1.7.16/libsi/headers.h vdr-test/libsi/headers.h +--- vdr-1.7.16/libsi/headers.h 2007-02-03 11:45:58.000000000 +0000 ++++ vdr-test/libsi/headers.h 2010-09-22 19:42:12.000000000 +0100 +@@ -1680,6 +1681,24 @@ u_char descriptor_length :8; }; -+struct entry_tva_id { -+ u_char tva_id_hi :8; -+ u_char tva_id_lo :8; -+#if BYTE_ORDER == BIG_ENDIAN -+ u_char reserved :5; -+ u_char running_status :3; -+#else -+ u_char running_status :3; -+ u_char reserved :5; -+#endif -+}; -+ -+ - /* 0x76 content_identifier_descriptor (ETSI TS 102 323) */ - - struct descr_content_identifier { - u_char descriptor_tag :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; @@ -414,12 +379,14 @@ diff -ur vdr-1.7.15/libsi/headers.h vdr-1.7/libsi/headers.h + u_char crid_byte :8; + u_char crid_ref_lo :8; + }; - }; - ++}; ++ /* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */ -diff -ur vdr-1.7.15/libsi/si.c vdr-1.7/libsi/si.c ---- vdr-1.7.15/libsi/si.c 2010-02-13 10:31:52.000000000 +0000 -+++ vdr-1.7/libsi/si.c 2010-06-06 14:54:48.000000000 +0100 + + struct descr_time_slice_fec_identifier { +diff -ur vdr-1.7.16/libsi/si.c vdr-test/libsi/si.c +--- vdr-1.7.16/libsi/si.c 2010-02-13 10:31:52.000000000 +0000 ++++ vdr-test/libsi/si.c 2010-09-19 15:09:18.000000000 +0100 @@ -606,6 +606,12 @@ case ExtensionDescriptorTag: d=new ExtensionDescriptor(); @@ -444,9 +411,9 @@ diff -ur vdr-1.7.15/libsi/si.c vdr-1.7/libsi/si.c case TimeSliceFecIdentifierDescriptorTag: case ECMRepetitionRateDescriptorTag: case EnhancedAC3DescriptorTag: -diff -ur vdr-1.7.15/menu.c vdr-1.7/menu.c ---- vdr-1.7.15/menu.c 2010-06-06 10:56:16.000000000 +0100 -+++ vdr-1.7/menu.c 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/menu.c vdr-test/menu.c +--- vdr-1.7.16/menu.c 2010-06-06 10:56:16.000000000 +0100 ++++ vdr-test/menu.c 2010-09-23 18:01:18.000000000 +0100 @@ -3051,6 +3051,7 @@ Add(new cMenuEditBoolItem(tr("Setup.Recording$Use episode name"), &data.UseSubtitle)); Add(new cMenuEditBoolItem(tr("Setup.Recording$Use VPS"), &data.UseVps)); @@ -455,9 +422,9 @@ diff -ur vdr-1.7.15/menu.c vdr-1.7/menu.c Add(new cMenuEditBoolItem(tr("Setup.Recording$Mark instant recording"), &data.MarkInstantRecord)); Add(new cMenuEditStrItem( tr("Setup.Recording$Name instant recording"), data.NameInstantRecord, sizeof(data.NameInstantRecord))); Add(new cMenuEditIntItem( tr("Setup.Recording$Instant rec. time (min)"), &data.InstantRecordTime, 1, MAXINSTANTRECTIME)); -diff -ur vdr-1.7.15/sdt.c vdr-1.7/sdt.c ---- vdr-1.7.15/sdt.c 2010-05-16 15:23:21.000000000 +0100 -+++ vdr-1.7/sdt.c 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/sdt.c vdr-test/sdt.c +--- vdr-1.7.16/sdt.c 2010-05-16 15:23:21.000000000 +0100 ++++ vdr-test/sdt.c 2010-09-23 18:01:18.000000000 +0100 @@ -128,6 +128,12 @@ } } @@ -471,9 +438,9 @@ diff -ur vdr-1.7.15/sdt.c vdr-1.7/sdt.c default: ; } delete d; -diff -ur vdr-1.7.15/timers.c vdr-1.7/timers.c ---- vdr-1.7.15/timers.c 2010-01-16 11:18:53.000000000 +0000 -+++ vdr-1.7/timers.c 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/timers.c vdr-test/timers.c +--- vdr-1.7.16/timers.c 2010-01-16 11:18:53.000000000 +0000 ++++ vdr-test/timers.c 2010-09-23 18:01:18.000000000 +0100 @@ -423,7 +423,7 @@ } @@ -483,9 +450,9 @@ diff -ur vdr-1.7.15/timers.c vdr-1.7/timers.c if (Margin || !Directly) { startTime = event->StartTime(); stopTime = event->EndTime(); -diff -ur vdr-1.7.15/vdr.5 vdr-1.7/vdr.5 ---- vdr-1.7.15/vdr.5 2010-05-16 13:15:48.000000000 +0100 -+++ vdr-1.7/vdr.5 2010-06-06 14:54:48.000000000 +0100 +diff -ur vdr-1.7.16/vdr.5 vdr-test/vdr.5 +--- vdr-1.7.16/vdr.5 2010-05-16 13:15:48.000000000 +0100 ++++ vdr-test/vdr.5 2010-09-19 15:09:18.000000000 +0100 @@ -247,6 +247,9 @@ .B RID The Radio ID of this channel (typically 0, may be used to distinguish channels where |
