[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