diff --git a/docs/html/config_dvb.html b/docs/html/config_dvb.html
index 2950c6d1..b7963a7d 100644
--- a/docs/html/config_dvb.html
+++ b/docs/html/config_dvb.html
@@ -119,6 +119,16 @@
Channel name
Double-click on this column to map the service to a channel.
+ DVB default charset
+
+ According to "ETSI EN 300 468", the default character set for EIT data is
+ ISO6937. Unfortunately, some broadcasters actually use ISO-8859-x encodings
+ but fail to correctly announce it. To fix this you can set the default
+ charset to use when none is specified by the broadcaster.
+
+ EIT
+ Uncheck this if EIT data should not be retreived for this service.
+
Type
Type of service. Can not be changed
diff --git a/src/dvb/dvb_tables.c b/src/dvb/dvb_tables.c
index f5b34b3d..74aa4676 100644
--- a/src/dvb/dvb_tables.c
+++ b/src/dvb/dvb_tables.c
@@ -537,6 +537,9 @@ dvb_eit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len,
if(t == NULL || !t->s_enabled || (ch = t->s_ch) == NULL)
return 0;
+ if(!t->s_dvb_eit_enable)
+ return 0;
+
while(len >= 12) {
event_id = ptr[0] << 8 | ptr[1];
start_time = dvb_convert_date(&ptr[2]);
diff --git a/src/dvb/dvb_transport.c b/src/dvb/dvb_transport.c
index 62b776bc..ad41234f 100644
--- a/src/dvb/dvb_transport.c
+++ b/src/dvb/dvb_transport.c
@@ -238,6 +238,10 @@ dvb_transport_load(th_dvb_mux_instance_t *tdmi)
s = htsmsg_get_str(c, "dvb_default_charset");
t->s_dvb_default_charset = s ? strdup(s) : NULL;
+ if(htsmsg_get_u32(c, "dvb_eit_enable", &u32))
+ u32 = 1;
+ t->s_dvb_eit_enable = u32;
+
s = htsmsg_get_str(c, "channelname");
if(htsmsg_get_u32(c, "mapped", &u32))
u32 = 0;
@@ -278,6 +282,8 @@ dvb_transport_save(service_t *t)
if(t->s_dvb_default_charset != NULL)
htsmsg_add_str(m, "dvb_default_charset", t->s_dvb_default_charset);
+ htsmsg_add_u32(m, "dvb_eit_enable", t->s_dvb_eit_enable);
+
pthread_mutex_lock(&t->s_stream_mutex);
psi_save_service_settings(m, t);
pthread_mutex_unlock(&t->s_stream_mutex);
@@ -440,6 +446,8 @@ dvb_transport_build_msg(service_t *t)
if(t->s_dvb_default_charset != NULL)
htsmsg_add_str(m, "dvb_default_charset", t->s_dvb_default_charset);
+ htsmsg_add_u32(m, "dvb_eit_enable", t->s_dvb_eit_enable);
+
return m;
}
diff --git a/src/service.c b/src/service.c
index 49e04bd7..b7eec881 100644
--- a/src/service.c
+++ b/src/service.c
@@ -505,6 +505,7 @@ service_create(const char *identifier, int type, int source_type)
t->s_enabled = 1;
t->s_pcr_last = PTS_UNSET;
t->s_dvb_default_charset = NULL;
+ t->s_dvb_eit_enable = 1;
TAILQ_INIT(&t->s_components);
streaming_pad_init(&t->s_streaming_pad);
@@ -692,6 +693,18 @@ service_set_dvb_default_charset(service_t *t, const char *dvb_default_charset)
t->s_config_save(t);
}
+/**
+ *
+ */
+void
+service_set_dvb_eit_enable(service_t *t, int dvb_eit_enable)
+{
+ if(t->s_dvb_eit_enable == dvb_eit_enable)
+ return;
+
+ t->s_dvb_eit_enable = dvb_eit_enable;
+ t->s_config_save(t);
+}
/**
*
diff --git a/src/service.h b/src/service.h
index 4b8458e5..2185e422 100644
--- a/src/service.h
+++ b/src/service.h
@@ -482,6 +482,11 @@ typedef struct service {
*/
char *s_dvb_default_charset;
+ /**
+ * Set if EIT grab is enabled for DVB service (the default).
+ */
+ int s_dvb_eit_enable;
+
} service_t;
@@ -569,4 +574,6 @@ int service_get_signal_status(service_t *t, signal_status_t *status);
void service_set_dvb_default_charset(service_t *t, const char *dvb_default_charset);
+void service_set_dvb_eit_enable(service_t *t, int dvb_eit_enable);
+
#endif // SERVICE_H__
diff --git a/src/webui/extjs.c b/src/webui/extjs.c
index cd95ceb4..b959214f 100644
--- a/src/webui/extjs.c
+++ b/src/webui/extjs.c
@@ -1134,6 +1134,9 @@ service_update(htsmsg_t *in)
if((dvb_default_charset = htsmsg_get_str(c, "dvb_default_charset")) != NULL)
service_set_dvb_default_charset(t, dvb_default_charset);
+
+ if(!htsmsg_get_u32(c, "dvb_eit_enable", &u32))
+ service_set_dvb_eit_enable(t, u32);
}
}
@@ -1218,6 +1221,8 @@ extjs_servicedetails(http_connection_t *hc,
if(t->s_dvb_default_charset != NULL)
htsmsg_add_str(out, "dvb_default_charset", t->s_dvb_default_charset);
+ htsmsg_add_u32(out, "dvb_eit_enable", t->s_dvb_eit_enable);
+
pthread_mutex_unlock(&global_lock);
htsmsg_json_serialize(out, hq, 0);
@@ -1460,6 +1465,9 @@ extjs_service_update(htsmsg_t *in)
if((dvb_default_charset = htsmsg_get_str(c, "dvb_default_charset")) != NULL)
service_set_dvb_default_charset(t, dvb_default_charset);
+
+ if(!htsmsg_get_u32(c, "dvb_eit_enable", &u32))
+ service_set_dvb_eit_enable(t, u32);
}
}
diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js
index 9063cdbc..7fae890a 100644
--- a/src/webui/static/app/dvb.js
+++ b/src/webui/static/app/dvb.js
@@ -338,6 +338,12 @@ tvheadend.dvb_services = function(adapterId) {
width: 45
});
+ var eitColumn = new Ext.grid.CheckColumn({
+ header: "EIT",
+ dataIndex: 'dvb_eit_enable',
+ width: 45
+ });
+
var actions = new Ext.ux.grid.RowActions({
header:'',
dataIndex: 'actions',
@@ -433,6 +439,7 @@ tvheadend.dvb_services = function(adapterId) {
valueField:'key'
})
},
+ eitColumn,
{
header: "Type",
dataIndex: 'type',
@@ -478,8 +485,8 @@ tvheadend.dvb_services = function(adapterId) {
var store = new Ext.data.JsonStore({
root: 'entries',
fields: Ext.data.Record.create([
- 'id', 'enabled', 'type', 'sid', 'pmt', 'pcr',
- 'svcname', 'network', 'provider', 'mux', 'channelname', 'dvb_default_charset'
+ 'id', 'enabled', 'type', 'sid', 'pmt', 'pcr', 'svcname', 'network',
+ 'provider', 'mux', 'channelname', 'dvb_default_charset', 'dvb_eit_enable'
]),
url: "dvb/services/" + adapterId,
autoLoad: true,
@@ -565,7 +572,7 @@ tvheadend.dvb_services = function(adapterId) {
var grid = new Ext.grid.EditorGridPanel({
stripeRows: true,
title: 'Services',
- plugins: [enabledColumn, actions],
+ plugins: [enabledColumn, eitColumn, actions],
store: store,
clicksToEdit: 2,
cm: cm,