diff options
| author | dave <dave@sodom.pickles.me.uk> | 2009-11-22 19:43:22 +0000 |
|---|---|---|
| committer | dave <dave@sodom.pickles.me.uk> | 2009-11-22 20:48:32 +0000 |
| commit | c5cd645edb4b6d51f4f0ea1a3179becc88791315 (patch) | |
| tree | 38dba539623c5ad0041a715cbdf7df48070a794f | |
| parent | d878b218fb2c82ea2779f670fb025ad987217e98 (diff) | |
| download | vdrtva-c5cd645edb4b6d51f4f0ea1a3179becc88791315.tar.gz vdrtva-c5cd645edb4b6d51f4f0ea1a3179becc88791315.tar.bz2 | |
Updated for vdr 1.7.10.
Add accurate start-stop (VPS functionality).
Version 0.0.6.
| -rw-r--r-- | HISTORY | 5 | ||||
| -rw-r--r-- | README | 5 | ||||
| -rw-r--r-- | README - series | 4 | ||||
| -rw-r--r-- | README - vps | 16 | ||||
| -rw-r--r-- | vdrtva-1.6.0.diff | 12 | ||||
| -rw-r--r-- | vdrtva-1.7.10.diff (renamed from vdrtva-1.7.9.diff) | 70 |
6 files changed, 79 insertions, 33 deletions
@@ -22,3 +22,8 @@ 2009/8/23 - Version 0.0.5 (vdr versions 1.6.0-2 and 1.7.9) - New patch for development version of vdr. + +2009/11/22 - Version 0.0.6 (vdr versions 1.6.0-2 and 1.7.10) +- timer.c - Apply an old VPS patch by Anssi Hannula to use Running Status for VPS. +- series.pl - Auto-created timers use Running Status to set start/stop times. +- README-vps New file. @@ -1,10 +1,10 @@ TV-Anytime is the name given to a set of technologies which aim to simplify the process of recording and replaying broadcast content. The standards are published -by ETSI and are available without cost from www.etsi.org (registration required). +by ETSI and are available without cost from www.etsi.org (registration required). The main standard is ETSI TS 102 323. In the UK a subset of the TV-Anytime specification is broadcast on the DTV service under the trade name "FreeView Plus". This patch is written for the UK version but -should work with the full specification. +should work with the full specification (untested). TV-Anytime data is contained in Content Reference Identifiers (CRIDs). The syntax of a CRID is described in RFC 4078; it is a URI-compliant string of the form: @@ -30,4 +30,3 @@ was repeated the following day on channel BBC3, the item CRID remained the same the series CRID was 'KCJ12C'. Meanwhile the episode broadcast on BBC2 one week later on 2008-01-24 had CRID '54BXLD' but the same series as the previous week. Hence it is possible for a PVR to record an entire series by using the series CRID, or to find an alternative broadcast for an individual item if there is a clash with another recording. - diff --git a/README - series b/README - series index 069d063..7d819e9 100644 --- a/README - series +++ b/README - series @@ -3,11 +3,13 @@ This is a very simple script to demonstrate the 'series link' concept. Run it ev Configuration parameters at the start of the file must be set to match your vdr settings. The 'padding' values must match those used when you manually set timers (eg when using vdradmin). +If you set the 'VPS' config parameter to '1', and also set 'UseVps = 1' in VDR's setup.conf, new timers will be created to use the EIT Running Status to set start and end times. An accurate Running Status is a requirement of the Freeview Plus specification. + The script creates a file "links.data" in the vdr directory when run. This file contains series CRIDs of all of the timers which have been set, and the item CRIDs of the individual programmes which have had recordings scheduled. A timestamp against each entry gives the date of the last timer set, so that old series can be automatically purged. Points to remember: -- Not all channels on UK Freeview have CRIDs in the EPG (at present just the BBC, ITV, C4 and C5 stables plus Sky 3). +- Not all channels on UK Freeview have CRIDs in the EPG (at present just the BBC, ITV, C4 and C5 stables plus Sky 3 and Virgin 1). - Different programme providers have different ideas of what constitutes a 'series'. diff --git a/README - vps b/README - vps new file mode 100644 index 0000000..966f575 --- /dev/null +++ b/README - vps @@ -0,0 +1,16 @@ +One of the important features of a video recorder is the ability to deal with programme schedule changes and to ensure that the wanted programme is always recorded. TVAnytime has its own set of data descriptors to handle late-running or cancelled programmes but these are not used by Freeview Plus. Instead the Running Status from the now/next section of the EIT is used to start and stop the recording. + +VDR can control timers from the running status by using 'VPS' functions in conjunction with this patch. Note however that the normal VPS operation will no longer work. + +To use VPS for accurate recording, some conditions must be met: + +- Parameter 'UseVps' in VDR's setup.conf must be set to 1 +- Timers must have the 'use VPS' flag set in timers.conf +- The start time of a timer must be set to exactly the scheduled start time of the programme (ie no padding). + +With these conditions met, the sequence of events is: + +- Shortly before the scheduled time of the recording (set by 'VpsMargin' in VDR's setup.conf) VDR switches to the multiplex containing the channel to be recorded +- VDR monitors the running status of the programme to be recorded +- When the running status changes to 'running', VDR starts recording +- When the running status changes to 'not running', VDR stops recording and deletes the timer. diff --git a/vdrtva-1.6.0.diff b/vdrtva-1.6.0.diff index 0df555b..f601725 100644 --- a/vdrtva-1.6.0.diff +++ b/vdrtva-1.6.0.diff @@ -422,6 +422,18 @@ diff -ur vdr-1.6.0/sdt.c vdr-1.5/sdt.c default: ; } delete d; +diff -ur vdr-1.6.0/timers.c vdr-1.5/timers.c +--- vdr-1.6.0/timers.c 2008-03-09 13:43:20.000000000 +0000 ++++ vdr-1.5/timers.c 2009-11-01 13:54:46.000000000 +0000 +@@ -413,7 +413,7 @@ + } + + if (HasFlags(tfActive)) { +- if (HasFlags(tfVps) && event && event->Vps()) { ++ if (HasFlags(tfVps) && event) { + if (Margin || !Directly) { + startTime = event->StartTime(); + stopTime = event->EndTime(); diff -ur vdr-1.6.0/vdr.5 vdr-1.5/vdr.5 --- vdr-1.6.0/vdr.5 2008-03-09 15:46:57.000000000 +0000 +++ vdr-1.5/vdr.5 2008-03-16 12:55:17.000000000 +0000 diff --git a/vdrtva-1.7.9.diff b/vdrtva-1.7.10.diff index d410ca9..22b962f 100644 --- a/vdrtva-1.7.9.diff +++ b/vdrtva-1.7.10.diff @@ -1,6 +1,6 @@ -diff -ur vdr-1.7.9/channels.c vdr-1.7/channels.c ---- vdr-1.7.9/channels.c 2009-08-16 16:08:49.000000000 +0100 -+++ vdr-1.7/channels.c 2009-08-23 15:15:16.000000000 +0100 +diff -ur vdr-1.7.10/channels.c vdr-1.7/channels.c +--- vdr-1.7.10/channels.c 2009-08-30 12:25:50.000000000 +0100 ++++ vdr-1.7/channels.c 2009-11-22 16:12:06.000000000 +0000 @@ -188,6 +188,7 @@ shortName = strdup(""); provider = strdup(""); @@ -47,7 +47,7 @@ diff -ur vdr-1.7.9/channels.c vdr-1.7/channels.c #define STRDIFF 0x01 #define VALDIFF 0x02 -@@ -752,11 +763,11 @@ +@@ -755,11 +766,11 @@ q += IntArrayToString(q, Channel->dpids, 10, Channel->dlangs); } *q = 0; @@ -61,7 +61,7 @@ diff -ur vdr-1.7.9/channels.c vdr-1.7/channels.c } return buffer; } -@@ -791,13 +802,16 @@ +@@ -794,13 +805,16 @@ char *vpidbuf = NULL; char *apidbuf = NULL; char *caidbuf = NULL; @@ -79,7 +79,7 @@ diff -ur vdr-1.7.9/channels.c vdr-1.7/channels.c caids[0] = tpid; caids[1] = 0; tpid = 0; -@@ -904,12 +918,17 @@ +@@ -907,12 +921,17 @@ } name = strcpyrealloc(name, namebuf); @@ -97,9 +97,9 @@ diff -ur vdr-1.7.9/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.9/channels.h vdr-1.7/channels.h ---- vdr-1.7.9/channels.h 2009-08-16 15:58:26.000000000 +0100 -+++ vdr-1.7/channels.h 2009-08-23 15:15:16.000000000 +0100 +diff -ur vdr-1.7.10/channels.h vdr-1.7/channels.h +--- vdr-1.7.10/channels.h 2009-08-30 12:05:54.000000000 +0100 ++++ vdr-1.7/channels.h 2009-11-22 16:12:06.000000000 +0000 @@ -116,6 +116,7 @@ char *shortName; char *provider; @@ -124,8 +124,8 @@ diff -ur vdr-1.7.9/channels.h vdr-1.7/channels.h void SetPids(int Vpid, int Ppid, int Vtype, int *Apids, char ALangs[][MAXLANGCODE2], int *Dpids, 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.9/eit.c vdr-1.7/eit.c ---- vdr-1.7.9/eit.c 2009-06-21 14:46:20.000000000 +0100 +diff -ur vdr-1.7.10/eit.c vdr-1.7/eit.c +--- vdr-1.7.10/eit.c 2009-06-21 14:46:20.000000000 +0100 +++ vdr-1.7/eit.c 2009-08-23 15:15:16.000000000 +0100 @@ -121,6 +121,8 @@ SI::Descriptor *d; @@ -184,9 +184,9 @@ diff -ur vdr-1.7.9/eit.c vdr-1.7/eit.c pEvent->SetComponents(Components); -diff -ur vdr-1.7.9/epg.c vdr-1.7/epg.c ---- vdr-1.7.9/epg.c 2008-05-01 15:53:55.000000000 +0100 -+++ vdr-1.7/epg.c 2009-06-06 09:48:00.000000000 +0100 +diff -ur vdr-1.7.10/epg.c vdr-1.7/epg.c +--- vdr-1.7.10/epg.c 2008-05-01 15:53:55.000000000 +0100 ++++ vdr-1.7/epg.c 2009-11-03 18:06:11.000000000 +0000 @@ -115,6 +115,8 @@ startTime = 0; duration = 0; @@ -244,8 +244,8 @@ diff -ur vdr-1.7.9/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.9/epg.h vdr-1.7/epg.h ---- vdr-1.7.9/epg.h 2006-10-07 14:47:19.000000000 +0100 +diff -ur vdr-1.7.10/epg.h vdr-1.7/epg.h +--- vdr-1.7.10/epg.h 2006-10-07 14:47:19.000000000 +0100 +++ vdr-1.7/epg.h 2009-06-06 09:48:00.000000000 +0100 @@ -66,6 +66,8 @@ int duration; // Duration of this event in seconds @@ -274,8 +274,8 @@ diff -ur vdr-1.7.9/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.9/libsi/descriptor.c vdr-1.7/libsi/descriptor.c ---- vdr-1.7.9/libsi/descriptor.c 2007-02-03 11:45:58.000000000 +0000 +diff -ur vdr-1.7.10/libsi/descriptor.c vdr-1.7/libsi/descriptor.c +--- vdr-1.7.10/libsi/descriptor.c 2007-02-03 11:45:58.000000000 +0000 +++ vdr-1.7/libsi/descriptor.c 2009-06-06 09:48:00.000000000 +0100 @@ -643,6 +643,29 @@ textualServiceIdentifier.setData(data+sizeof(descr_service_identifier), getLength()-sizeof(descr_service_identifier)); @@ -307,8 +307,8 @@ diff -ur vdr-1.7.9/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.9/libsi/descriptor.h vdr-1.7/libsi/descriptor.h ---- vdr-1.7.9/libsi/descriptor.h 2007-02-03 11:45:58.000000000 +0000 +diff -ur vdr-1.7.10/libsi/descriptor.h vdr-1.7/libsi/descriptor.h +--- vdr-1.7.10/libsi/descriptor.h 2007-02-03 11:45:58.000000000 +0000 +++ vdr-1.7/libsi/descriptor.h 2009-06-06 09:48:00.000000000 +0100 @@ -361,6 +361,25 @@ virtual void Parse(); @@ -336,8 +336,8 @@ diff -ur vdr-1.7.9/libsi/descriptor.h vdr-1.7/libsi/descriptor.h //abstract base class class MultilingualNameDescriptor : public Descriptor { public: -diff -ur vdr-1.7.9/libsi/headers.h vdr-1.7/libsi/headers.h ---- vdr-1.7.9/libsi/headers.h 2007-02-03 11:45:58.000000000 +0000 +diff -ur vdr-1.7.10/libsi/headers.h vdr-1.7/libsi/headers.h +--- vdr-1.7.10/libsi/headers.h 2007-02-03 11:45:58.000000000 +0000 +++ vdr-1.7/libsi/headers.h 2009-06-06 09:48:00.000000000 +0100 @@ -1673,11 +1673,39 @@ u_char descriptor_length :8; @@ -379,8 +379,8 @@ diff -ur vdr-1.7.9/libsi/headers.h vdr-1.7/libsi/headers.h }; /* 0x77 time_slice_fec_identifier_descriptor (ETSI EN 301 192) */ -diff -ur vdr-1.7.9/libsi/si.c vdr-1.7/libsi/si.c ---- vdr-1.7.9/libsi/si.c 2008-03-05 17:00:55.000000000 +0000 +diff -ur vdr-1.7.10/libsi/si.c vdr-1.7/libsi/si.c +--- vdr-1.7.10/libsi/si.c 2008-03-05 17:00:55.000000000 +0000 +++ vdr-1.7/libsi/si.c 2009-06-06 09:48:00.000000000 +0100 @@ -605,6 +605,12 @@ case ExtensionDescriptorTag: @@ -406,8 +406,8 @@ diff -ur vdr-1.7.9/libsi/si.c vdr-1.7/libsi/si.c case TimeSliceFecIdentifierDescriptorTag: case ECMRepetitionRateDescriptorTag: case EnhancedAC3DescriptorTag: -diff -ur vdr-1.7.9/sdt.c vdr-1.7/sdt.c ---- vdr-1.7.9/sdt.c 2008-04-12 14:33:55.000000000 +0100 +diff -ur vdr-1.7.10/sdt.c vdr-1.7/sdt.c +--- vdr-1.7.10/sdt.c 2008-04-12 14:33:55.000000000 +0100 +++ vdr-1.7/sdt.c 2009-06-06 09:48:00.000000000 +0100 @@ -124,6 +124,12 @@ } @@ -422,9 +422,21 @@ diff -ur vdr-1.7.9/sdt.c vdr-1.7/sdt.c default: ; } delete d; -diff -ur vdr-1.7.9/vdr.5 vdr-1.7/vdr.5 ---- vdr-1.7.9/vdr.5 2009-01-06 12:37:35.000000000 +0000 -+++ vdr-1.7/vdr.5 2009-06-06 09:48:00.000000000 +0100 +diff -ur vdr-1.7.10/timers.c vdr-1.7/timers.c +--- vdr-1.7.10/timers.c 2009-08-09 13:43:20.000000000 +0100 ++++ vdr-1.7/timers.c 2009-11-01 13:54:46.000000000 +0000 +@@ -423,7 +423,7 @@ + } + + if (HasFlags(tfActive)) { +- if (HasFlags(tfVps) && event && event->Vps()) { ++ if (HasFlags(tfVps) && event) { + if (Margin || !Directly) { + startTime = event->StartTime(); + stopTime = event->EndTime(); +diff -ur vdr-1.7.10/vdr.5 vdr-1.7/vdr.5 +--- vdr-1.7.10/vdr.5 2009-10-18 15:09:07.000000000 +0100 ++++ vdr-1.7/vdr.5 2009-11-22 16:12:06.000000000 +0000 @@ -186,6 +186,9 @@ .B RID The Radio ID of this channel (typically 0, may be used to distinguish channels where |
