[vdr] [PATCH] time warp
Birgit & Andreas Böttger
fboettger at t-online.de
Sun Jun 26 09:54:23 CEST 2005
Udo Richter schrieb:
>>>I use the nice "set system time" feature of vdr.
>>>But sometimes vdr seems to read gabage time from DVB,
>
> I hereby vote to fix this. I lost a recording today because of time
> errors.
After some tests with other transponders, I currently
use RTL again to set system time, because this is the
most used transponder here.
Sometimes there are "garbage times", but this is no
problem any longer :)
Jun 24 09:25:16 vdr vdr[20898]: diff = 86398, ignored to avoid time warp :)
Jun 24 09:33:38 vdr vdr[20898]: diff = 1047043634, ignored to avoid time warp :)
Jun 24 09:33:47 vdr vdr[20898]: diff = 5038, ignored to avoid time warp :)
Jun 24 09:42:10 vdr vdr[20898]: diff = 49262, ignored to avoid time warp :)
Jun 24 09:50:33 vdr vdr[20898]: diff = 1322, ignored to avoid time warp :)
Jun 24 10:33:29 vdr vdr[20898]: diff = 2843878, ignored to avoid time warp :)
Jun 24 10:33:31 vdr vdr[20898]: diff = 3314218, ignored to avoid time warp :)
Jun 24 10:50:36 vdr vdr[20898]: diff = 1742, ignored to avoid time warp :)
Jun 24 10:58:52 vdr vdr[20898]: diff = 528958, ignored to avoid time warp :)
Jun 24 10:58:56 vdr vdr[20898]: diff = 2132884262, ignored to avoid time warp :)
Jun 24 11:15:47 vdr vdr[20898]: diff = 9461758, ignored to avoid time warp :)
Jun 24 11:24:11 vdr vdr[20898]: diff = 22082, ignored to avoid time warp :)
Jun 24 16:00:54 vdr vdr[11790]: diff = 1916301377, ignored to avoid time warp :)
Jun 24 16:17:48 vdr vdr[11790]: diff = 1744739819, ignored to avoid time warp :)
Jun 24 17:08:13 vdr vdr[11790]: diff = 145784339, ignored to avoid time warp :)
Jun 24 17:24:55 vdr vdr[11790]: diff = 179202481, ignored to avoid time warp :)
Jun 24 17:41:52 vdr vdr[11790]: diff = 1618607957, ignored to avoid time warp :)
Jun 25 11:53:46 vdr vdr[7595]: diff = 9153240, ignored to avoid time warp :)
Jun 25 12:52:28 vdr vdr[7595]: diff = 3000, ignored to avoid time warp :)
Jun 25 13:09:24 vdr vdr[7595]: diff = 4380, ignored to avoid time warp :)
Jun 25 13:31:05 vdr vdr[7595]: diff = 3017820, ignored to avoid time warp :)
Jun 25 13:47:48 vdr vdr[7595]: diff = 5160, ignored to avoid time warp :)
Jun 25 14:04:47 vdr vdr[7595]: diff = 5441340, ignored to avoid time warp :)
Jun 25 14:55:18 vdr vdr[7595]: diff = 1119704119, ignored to avoid time warp :)
Jun 25 16:16:53 vdr vdr[7595]: diff = 311639, ignored to avoid time warp :)
Jun 25 16:58:58 vdr vdr[7595]: diff = 2281, ignored to avoid time warp :)
Jun 25 16:59:05 vdr vdr[7595]: diff = 69059, ignored to avoid time warp :)
Jun 25 17:15:54 vdr vdr[7595]: diff = 8399, ignored to avoid time warp :)
To help you, I have attached a patch against vdr-1.3.27.
This patch should also work with older versions of vdr.
Go to the VDR directory and type:
patch < vdr-1.3.27_time_warp.diff
Kind regards
Andreas Böttger
-------------- next part --------------
diff -Nur vdr-1.3.27.ori/eit.c vdr-1.3.27/eit.c
--- vdr-1.3.27.ori/eit.c 2005-06-11 17:31:21.000000000 +0200
+++ vdr-1.3.27/eit.c 2005-06-25 09:23:57.000000000 +0200
@@ -266,14 +266,21 @@
time_t sattim = getTime();
time_t loctim = time(NULL);
- if (abs(sattim - loctim) > 2) {
- mutex.Lock();
- isyslog("System Time = %s (%ld)\n", *TimeToString(loctim), loctim);
- isyslog("Local Time = %s (%ld)\n", *TimeToString(sattim), sattim);
- if (stime(&sattim) < 0)
- esyslog("ERROR while setting system time: %m");
- mutex.Unlock();
+ static int lastDiff = 0;
+ int diff = abs(sattim - loctim);
+ if (diff > 2) {
+ if (abs(diff - lastDiff) < 3) {
+ mutex.Lock();
+ isyslog("System Time = %s (%ld)\n", *TimeToString(loctim), loctim);
+ isyslog("Local Time = %s (%ld)\n", *TimeToString(sattim), sattim);
+ if (stime(&sattim) < 0)
+ esyslog("ERROR while setting system time: %m");
+ mutex.Unlock();
+ } else {
+ isyslog("diff = %d, ignored to avoid time warp :)", diff);
}
+ lastDiff = diff;
+ }
}
More information about the vdr
mailing list