diff --git a/docs/html/config_networks.html b/docs/html/config_networks.html index fa4a059c..0db10096 100644 --- a/docs/html/config_networks.html +++ b/docs/html/config_networks.html @@ -79,6 +79,12 @@ Buttons have the following functions:
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. +

+

Ignore Provider's Channel Numbers +
Do not use the local channel numbers defined by provider. +

+

EIT Local Time +
EPG (EIT) events uses local time instead UTC.

Character Set
The character encoding for this network (e.g. UTF-8). diff --git a/src/epggrab/module/eit.c b/src/epggrab/module/eit.c index 313e8364..91aa0615 100644 --- a/src/epggrab/module/eit.c +++ b/src/epggrab/module/eit.c @@ -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; diff --git a/src/input/mpegts.h b/src/input/mpegts.h index ac2088e9..2754144b 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -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 diff --git a/src/input/mpegts/dvb.h b/src/input/mpegts/dvb.h index df0d626b..2b5f4a80 100644 --- a/src/input/mpegts/dvb.h +++ b/src/input/mpegts/dvb.h @@ -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); diff --git a/src/input/mpegts/dvb_support.c b/src/input/mpegts/dvb_support.c index 02964932..3a6ad443 100644 --- a/src/input/mpegts/dvb_support.c +++ b/src/input/mpegts/dvb_support.c @@ -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); } /* diff --git a/src/input/mpegts/mpegts_network.c b/src/input/mpegts/mpegts_network.c index 3ec3df7e..8bc9bd92 100644 --- a/src/input/mpegts/mpegts_network.c +++ b/src/input/mpegts/mpegts_network.c @@ -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",