From: Jaroslav Kysela Date: Fri, 12 Feb 2016 12:25:28 +0000 (+0100) Subject: mpegts network: implement EIT time offset (extend localtime flag), fixes #3566 X-Git-Tag: v4.2.1~1029 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d419c2049064c53152a25746aa3026a4dabf610e;p=thirdparty%2Ftvheadend.git mpegts network: implement EIT time offset (extend localtime flag), fixes #3566 --- diff --git a/src/input/mpegts/dvb.h b/src/input/mpegts/dvb.h index ce1ce63bb..ac0fe0f44 100644 --- a/src/input/mpegts/dvb.h +++ b/src/input/mpegts/dvb.h @@ -212,7 +212,9 @@ struct lang_str *atsc_get_string #define bcdtoint(i) ((((i & 0xf0) >> 4) * 10) + (i & 0x0f)) -time_t dvb_convert_date(const uint8_t *dvb_buf, int local); +htsmsg_t *dvb_timezone_enum(void *p, const char *lang); + +time_t dvb_convert_date(const uint8_t *dvb_buf, int tmzone); time_t atsc_convert_gpstime(uint32_t gpstime); 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 00b1c3951..4bdfcd5fe 100644 --- a/src/input/mpegts/dvb_support.c +++ b/src/input/mpegts/dvb_support.c @@ -454,12 +454,60 @@ atsc_get_string return ls; } +/* + * + */ + +static struct strtab dvb_timezone_strtab[] = { + { N_("UTC"), 0 }, + { N_("Local (server) time"), 1 }, + { N_("UTC- 1"), -1*60 }, + { N_("UTC- 2"), -2*60 }, + { N_("UTC- 2:30"), -2*60-30 }, + { N_("UTC- 3"), -3*60 }, + { N_("UTC- 3:30"), -3*60-30 }, + { N_("UTC- 4"), -4*60 }, + { N_("UTC- 4:30"), -4*60-30 }, + { N_("UTC- 5"), -5*60 }, + { N_("UTC- 6"), -6*60 }, + { N_("UTC- 7"), -7*60 }, + { N_("UTC- 8"), -8*60 }, + { N_("UTC- 9"), -9*60 }, + { N_("UTC- 9:30"), -9*60-30 }, + { N_("UTC-10"), -10*60 }, + { N_("UTC-11"), -11*60 }, + { N_("UTC+ 1"), 1*60 }, + { N_("UTC+ 2"), 2*60 }, + { N_("UTC+ 3"), 3*60 }, + { N_("UTC+ 4"), 4*60 }, + { N_("UTC+ 4:30"), 4*60+30 }, + { N_("UTC+ 5"), 5*60 }, + { N_("UTC+ 5:30"), 5*60+30 }, + { N_("UTC+ 5:45"), 5*60+45 }, + { N_("UTC+ 6"), 6*60 }, + { N_("UTC+ 6:30"), 6*60+30 }, + { N_("UTC+ 7"), 7*60 }, + { N_("UTC+ 8"), 8*60 }, + { N_("UTC+ 8:45"), 8*60+45 }, + { N_("UTC+ 9"), 9*60 }, + { N_("UTC+ 9:30"), 9*60+30 }, + { N_("UTC+10"), 10*60 }, + { N_("UTC+10:30"), 10*60+30 }, + { N_("UTC+11"), 11*60 }, +}; + +htsmsg_t * +dvb_timezone_enum ( void *p, const char *lang ) +{ + return strtab2htsmsg(dvb_timezone_strtab, 1, lang); +} + /* * DVB time and date functions */ time_t -dvb_convert_date(const uint8_t *dvb_buf, int local) +dvb_convert_date(const uint8_t *dvb_buf, int tmzone) { int i; int year, month, day, hour, min, sec; @@ -495,7 +543,14 @@ dvb_convert_date(const uint8_t *dvb_buf, int local) dvb_time.tm_isdst = -1; dvb_time.tm_wday = 0; dvb_time.tm_yday = 0; - return local ? mktime(&dvb_time) : timegm(&dvb_time); + + if (tmzone == 0) /* UTC */ + return timegm(&dvb_time); + if (tmzone == 1) /* Local time */ + return mktime(&dvb_time); + + /* apply offset */ + return timegm(&dvb_time) + tmzone; } static time_t _gps_leap_seconds[17] = { diff --git a/src/input/mpegts/mpegts_network.c b/src/input/mpegts/mpegts_network.c index 131dfce06..af08c9e11 100644 --- a/src/input/mpegts/mpegts_network.c +++ b/src/input/mpegts/mpegts_network.c @@ -241,12 +241,12 @@ const idclass_t mpegts_network_class = .opts = PO_ADVANCED, }, { - .type = PT_BOOL, + .type = PT_INT, .id = "localtime", - .name = N_("EIT broadcast in local time"), - .desc = N_("If EIT events use local time rather than UTC enable " - "this option."), + .name = N_("EIT time offset"), + .desc = N_("Select the time offset for EIT events."), .off = offsetof(mpegts_network_t, mn_localtime), + .list = dvb_timezone_enum, .opts = PO_EXPERT, }, {