From 630b40d5908d0f6326d8b55780a5f074384d77ee Mon Sep 17 00:00:00 2001 From: Marc Perrudin Date: Fri, 19 Aug 2011 17:54:12 +0200 Subject: [PATCH 1/3] Add support for disabling EIT grabbing on selected services. --- src/dvb/dvb_tables.c | 3 +++ src/dvb/dvb_transport.c | 8 +++++++ src/service.c | 13 +++++++++++ src/service.h | 7 ++++++ src/webui/extjs.c | 8 +++++++ src/webui/static/app/dvb.js | 45 +++++++++++++++++++++++++++++++++++-- 6 files changed, 82 insertions(+), 2 deletions(-) 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..f98a9a48 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -433,6 +433,47 @@ tvheadend.dvb_services = function(adapterId) { valueField:'key' }) }, + { + header: "EIT", + dataIndex: 'dvb_eit_enable', + width: 100, + renderer: function(value, metadata, record, row, col, store) { + if (value == '0') + return 'Disabled'; + if (value == '1') + return 'Enabled'; + }, + editor: new fm.ComboBox({ + mode: 'local', + store: new Ext.data.SimpleStore({ + fields: ['key','value'], + data: [ + ['0','Disabled'], + ['1','Enabled'] + ] + }), + typeAhead: true, + lazyRender: true, + triggerAction: 'all', + displayField:'value', + valueField:'key' + }) + }, +/* var eitColumn = new Ext.grid.CheckColumn({ + header: "EIT Check", + dataIndex: 'dvb_eit_enable', + width: 45 + }); + + { + header: "EIT", + dataIndex: 'dvb_eit_enable', + width: 45, + editor: new fm.Checkbox({ + fieldLabel: 'EIT', + name: 'eit', + }) + },*/ { header: "Type", dataIndex: 'type', @@ -478,8 +519,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, From d615aefe0d2572204a65019478a531082c7b04ca Mon Sep 17 00:00:00 2001 From: Marc Perrudin Date: Fri, 19 Aug 2011 18:08:47 +0200 Subject: [PATCH 2/3] Code cleanup --- src/webui/static/app/dvb.js | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index f98a9a48..e9cbf8da 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -434,12 +434,12 @@ tvheadend.dvb_services = function(adapterId) { }) }, { - header: "EIT", - dataIndex: 'dvb_eit_enable', + header: "EIT", + dataIndex: 'dvb_eit_enable', width: 100, renderer: function(value, metadata, record, row, col, store) { if (value == '0') - return 'Disabled'; + return 'Disabled'; if (value == '1') return 'Enabled'; }, @@ -450,7 +450,7 @@ tvheadend.dvb_services = function(adapterId) { data: [ ['0','Disabled'], ['1','Enabled'] - ] + ] }), typeAhead: true, lazyRender: true, @@ -459,21 +459,6 @@ tvheadend.dvb_services = function(adapterId) { valueField:'key' }) }, -/* var eitColumn = new Ext.grid.CheckColumn({ - header: "EIT Check", - dataIndex: 'dvb_eit_enable', - width: 45 - }); - - { - header: "EIT", - dataIndex: 'dvb_eit_enable', - width: 45, - editor: new fm.Checkbox({ - fieldLabel: 'EIT', - name: 'eit', - }) - },*/ { header: "Type", dataIndex: 'type', @@ -520,7 +505,7 @@ tvheadend.dvb_services = function(adapterId) { root: 'entries', fields: Ext.data.Record.create([ 'id', 'enabled', 'type', 'sid', 'pmt', 'pcr', 'svcname', 'network', - 'provider', 'mux', 'channelname', 'dvb_default_charset', 'dvb_eit_enable' + 'provider', 'mux', 'channelname', 'dvb_default_charset', 'dvb_eit_enable' ]), url: "dvb/services/" + adapterId, autoLoad: true, From 462fd53f62cd47dd392f3d7eb82e5bdb70cfe878 Mon Sep 17 00:00:00 2001 From: Marc Perrudin Date: Fri, 19 Aug 2011 22:31:00 +0200 Subject: [PATCH 3/3] Use checkbox instead of combobox for EIT Update doc --- docs/html/config_dvb.html | 10 ++++++++++ src/webui/static/app/dvb.js | 35 ++++++++--------------------------- 2 files changed, 18 insertions(+), 27 deletions(-) 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/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index e9cbf8da..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,32 +439,7 @@ tvheadend.dvb_services = function(adapterId) { valueField:'key' }) }, - { - header: "EIT", - dataIndex: 'dvb_eit_enable', - width: 100, - renderer: function(value, metadata, record, row, col, store) { - if (value == '0') - return 'Disabled'; - if (value == '1') - return 'Enabled'; - }, - editor: new fm.ComboBox({ - mode: 'local', - store: new Ext.data.SimpleStore({ - fields: ['key','value'], - data: [ - ['0','Disabled'], - ['1','Enabled'] - ] - }), - typeAhead: true, - lazyRender: true, - triggerAction: 'all', - displayField:'value', - valueField:'key' - }) - }, + eitColumn, { header: "Type", dataIndex: 'type', @@ -591,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,