]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvb network: Add EIT local time option, fixes #2617
authorJaroslav Kysela <perex@perex.cz>
Wed, 14 Jan 2015 08:47:12 +0000 (09:47 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 14 Jan 2015 08:47:12 +0000 (09:47 +0100)
docs/html/config_networks.html
src/epggrab/module/eit.c
src/input/mpegts.h
src/input/mpegts/dvb.h
src/input/mpegts/dvb_support.c
src/input/mpegts/mpegts_network.c

index fa4a059c961ac4927ff88980e181919f6421838c..0db10096db840ade5d11a7b9e5c90cdafbfdec8b 100644 (file)
@@ -79,6 +79,12 @@ Buttons have the following functions:
                <dd>If you experience problems caused by overlaps between multiple network
   providers this option can be used to filter which network ID is received
   by a given adapter.
+<p>
+               <dt><b>Ignore Provider's Channel Numbers</b>
+               <dd>Do not use the local channel numbers defined by provider.
+<p>
+               <dt><b>EIT Local Time</b>
+               <dd>EPG (EIT) events uses local time instead UTC.
 <p>
                <dt><b>Character Set</b>
                <dd>The character encoding for this network (e.g. UTF-8).
index 313e83649a6c8601222d97725ba68ff356976a8f..91aa0615c0245bb04eeff80bf1ec50948c0076e4 100644 (file)
@@ -398,7 +398,7 @@ static int _eit_desc_crid
 static int _eit_process_event
   ( epggrab_module_t *mod, int tableid,
     mpegts_service_t *svc, const uint8_t *ptr, int len,
-    int *resched, int *save )
+    int local, int *resched, int *save )
 {
   int save2 = 0;
   int ret, dllen;
@@ -415,7 +415,7 @@ static int _eit_process_event
 
   /* Core fields */
   eid   = ptr[0] << 8 | ptr[1];
-  start = dvb_convert_date(&ptr[2]);
+  start = dvb_convert_date(&ptr[2], local);
   stop  = start + bcdtoint(ptr[7] & 0xff) * 3600 +
                   bcdtoint(ptr[8] & 0xff) * 60 +
                   bcdtoint(ptr[9] & 0xff);
@@ -643,6 +643,7 @@ _eit_callback
   while (len) {
     int r;
     if ((r = _eit_process_event(mod, tableid, svc, ptr, len,
+                                mm->mm_network->mn_localtime,
                                 &resched, &save)) < 0)
       break;
     len -= r;
index ac2088e9b248ae6ff98494991c002f1c2b5806ea..2754144bffc83ee5c3a538c5ee56ccbc1e2bf9d2 100644 (file)
@@ -298,6 +298,7 @@ struct mpegts_network
   char    *mn_charset;
   int      mn_idlescan;
   int      mn_ignore_chnum;
+  int      mn_localtime;
 };
 
 typedef enum mpegts_mux_scan_state
index df0d626b6a336973a4109814df16af0c808ff7a0..2b5f4a80f7c27d299a3a5164915ad09bd16e4b69 100644 (file)
@@ -162,7 +162,7 @@ int dvb_get_string_with_len
 
 #define bcdtoint(i) ((((i & 0xf0) >> 4) * 10) + (i & 0x0f))
 
-time_t dvb_convert_date(const uint8_t *dvb_buf);
+time_t dvb_convert_date(const uint8_t *dvb_buf, int local);
 
 void atsc_utf16_to_utf8(const uint8_t *src, int len, char *buf, int buflen);
 
index 02964932b27b1973defdb02c045baceb5f51f6f4..3a6ad44351dcf3b4a3fef5e6b71d86b312b8fad6 100644 (file)
@@ -396,7 +396,7 @@ atsc_utf16_to_utf8(const uint8_t *src, int len, char *buf, int buflen)
  */
 
 time_t
-dvb_convert_date(const uint8_t *dvb_buf)
+dvb_convert_date(const uint8_t *dvb_buf, int local)
 {
   int i;
   int year, month, day, hour, min, sec;
@@ -432,7 +432,7 @@ dvb_convert_date(const uint8_t *dvb_buf)
   dvb_time.tm_isdst = -1;
   dvb_time.tm_wday = 0;
   dvb_time.tm_yday = 0;
-  return (timegm(&dvb_time));
+  return local ? mktime(&dvb_time) : timegm(&dvb_time);
 }
 
 /*
index 3ec3df7ecb10d2615bd8888f8ed32d8d3685bb71..8bc9bd92f46445095330d8855a9fe943fb27a546 100644 (file)
@@ -189,6 +189,13 @@ const idclass_t mpegts_network_class =
       .list     = dvb_charset_enum,
       .opts     = PO_ADVANCED,
     },
+    {
+      .type     = PT_BOOL,
+      .id       = "localtime",
+      .name     = "EIT Local Time",
+      .off      = offsetof(mpegts_network_t, mn_localtime),
+      .opts     = PO_ADVANCED,
+    },
     {
       .type     = PT_INT,
       .id       = "num_mux",