From 03f7bc187bf9872c0582ccaebfa71b8348e1b780 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Wed, 7 Nov 2012 23:02:10 +0000 Subject: [PATCH] Tweak to the full mux configuration, all USB is now filtered mode by default. --- src/dvb/dvb.h | 4 ++-- src/dvb/dvb_adapter.c | 33 ++++++++++++++++++++++++--------- src/webui/extjs_dvb.c | 6 +++--- src/webui/static/app/dvb.js | 17 +++++++++++++---- 4 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/dvb/dvb.h b/src/dvb/dvb.h index 847074a9..6b42de90 100644 --- a/src/dvb/dvb.h +++ b/src/dvb/dvb.h @@ -212,7 +212,7 @@ typedef struct th_dvb_adapter { uint32_t tda_diseqc_version; uint32_t tda_diseqc_repeats; uint32_t tda_disable_pmt_monitor; - uint32_t tda_disable_full_mux_rx; + int32_t tda_full_mux_rx; char *tda_displayname; char *tda_fe_path; @@ -364,7 +364,7 @@ void dvb_adapter_set_diseqc_repeats(th_dvb_adapter_t *tda, void dvb_adapter_set_disable_pmt_monitor(th_dvb_adapter_t *tda, int on); -void dvb_adapter_set_disable_full_mux_rx(th_dvb_adapter_t *tda, int on); +void dvb_adapter_set_full_mux_rx(th_dvb_adapter_t *tda, int r); void dvb_adapter_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src); diff --git a/src/dvb/dvb_adapter.c b/src/dvb/dvb_adapter.c index 3776dcc6..3a971d02 100644 --- a/src/dvb/dvb_adapter.c +++ b/src/dvb/dvb_adapter.c @@ -94,7 +94,7 @@ tda_save(th_dvb_adapter_t *tda) htsmsg_add_u32(m, "extrapriority", tda->tda_extrapriority); htsmsg_add_u32(m, "skip_initialscan", tda->tda_skip_initialscan); htsmsg_add_u32(m, "disable_pmt_monitor", tda->tda_disable_pmt_monitor); - htsmsg_add_u32(m, "disable_full_mux_rx", tda->tda_disable_full_mux_rx); + htsmsg_add_s32(m, "full_mux_rx", tda->tda_full_mux_rx); hts_settings_save(m, "dvbadapters/%s", tda->tda_identifier); htsmsg_destroy(m); } @@ -369,17 +369,23 @@ dvb_adapter_set_disable_pmt_monitor(th_dvb_adapter_t *tda, int on) * */ void -dvb_adapter_set_disable_full_mux_rx(th_dvb_adapter_t *tda, int on) +dvb_adapter_set_full_mux_rx(th_dvb_adapter_t *tda, int on) { - if(tda->tda_disable_full_mux_rx == on) + const char* label[] = { "Auto", "Off", "On" }; + + if (on < -1) on = -1; + if (on > 1) on = 1; + + if(tda->tda_full_mux_rx == on) return; lock_assert(&global_lock); - tvhlog(LOG_NOTICE, "dvb", "Adapter \"%s\" disabled full MUX receive set to: %s", - tda->tda_displayname, on ? "On" : "Off"); + tvhlog(LOG_NOTICE, "dvb", + "Adapter \"%s\" disabled full MUX receive set to: %s", + tda->tda_displayname, label[on+1]); - tda->tda_disable_full_mux_rx = on; + tda->tda_full_mux_rx = on; tda_save(tda); } @@ -408,12 +414,15 @@ check_full_stream(th_dvb_adapter_t *tda) struct dmx_pes_filter_params dmx_param; int r; - if(tda->tda_disable_full_mux_rx) - return 0; + if(tda->tda_full_mux_rx != -1) + return tda->tda_full_mux_rx; if(tda->tda_hostconnection == HOSTCONNECTION_USB12) return 0; // Don't even bother, device <-> host interface is too slow + if(tda->tda_hostconnection == HOSTCONNECTION_USB480) + return 0; // USB in general appears to have CPU loading issues? + int fd = tvh_open(tda->tda_demux_path, O_RDWR, 0); if(fd == -1) return 0; @@ -462,6 +471,7 @@ tda_add(int adapter_num) tda->tda_fe_path = strdup(fname); tda->tda_fe_fd = -1; tda->tda_dvr_pipe[0] = -1; + tda->tda_full_mux_rx = -1; tda->tda_fe_info = malloc(sizeof(struct dvb_frontend_info)); @@ -542,6 +552,8 @@ tda_add_from_file(const char *filename) tda->tda_idlescan = 0; tda->tda_sat = 0; + + tda->tda_full_mux_rx = 1; /* Come up with an initial displayname, user can change it and it will be overridden by any stored settings later on */ @@ -632,6 +644,7 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile) htsmsg_field_t *f; const char *name, *s; int i, type; + uint32_t u32; th_dvb_adapter_t *tda; TAILQ_INIT(&dvb_adapters); @@ -685,7 +698,9 @@ dvb_adapter_init(uint32_t adapter_mask, const char *rawfile) htsmsg_get_u32(c, "extrapriority", &tda->tda_extrapriority); htsmsg_get_u32(c, "skip_initialscan", &tda->tda_skip_initialscan); htsmsg_get_u32(c, "disable_pmt_monitor", &tda->tda_disable_pmt_monitor); - htsmsg_get_u32(c, "disable_full_mux_rx", &tda->tda_disable_full_mux_rx); + if (htsmsg_get_s32(c, "full_mux_rx", &tda->tda_full_mux_rx)) + if (!htsmsg_get_u32(c, "disable_full_mux_rx", &u32) && u32) + tda->tda_full_mux_rx = 0; } htsmsg_destroy(l); } diff --git a/src/webui/extjs_dvb.c b/src/webui/extjs_dvb.c index 525ed10e..d1ce5b15 100644 --- a/src/webui/extjs_dvb.c +++ b/src/webui/extjs_dvb.c @@ -157,7 +157,7 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) htsmsg_add_u32(r, "sidtochan", tda->tda_sidtochan); htsmsg_add_u32(r, "nitoid", tda->tda_nitoid); htsmsg_add_u32(r, "disable_pmt_monitor", tda->tda_disable_pmt_monitor); - htsmsg_add_u32(r, "disable_full_mux_rx", tda->tda_disable_full_mux_rx); + htsmsg_add_u32(r, "full_mux_rx", tda->tda_full_mux_rx+1); htsmsg_add_str(r, "diseqcversion", ((const char *[]){"DiSEqC 1.0 / 2.0", "DiSEqC 1.1 / 2.1"}) @@ -200,8 +200,8 @@ extjs_dvbadapter(http_connection_t *hc, const char *remain, void *opaque) s = http_arg_get(&hc->hc_req_args, "disable_pmt_monitor"); dvb_adapter_set_disable_pmt_monitor(tda, !!s); - s = http_arg_get(&hc->hc_req_args, "disable_full_mux_rx"); - dvb_adapter_set_disable_full_mux_rx(tda, !!s); + s = http_arg_get(&hc->hc_req_args, "full_mux_rx"); + dvb_adapter_set_full_mux_rx(tda, atoi(s)-1); if((s = http_arg_get(&hc->hc_req_args, "nitoid")) != NULL) dvb_adapter_set_nitoid(tda, atoi(s)); diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index 18a823ba..dcda443a 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -1089,7 +1089,7 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { }, [ 'name', 'automux', 'skip_initialscan', 'idlescan', 'diseqcversion', 'diseqcrepeats', 'qmon', 'skip_checksubscr', 'poweroff', 'sidtochan', 'nitoid', 'extrapriority', - ,'disable_pmt_monitor', 'disable_full_mux_rx', 'idleclose' ]); + ,'disable_pmt_monitor', 'full_mux_rx', 'idleclose' ]); function saveConfForm() { confform.getForm().submit({ @@ -1135,9 +1135,18 @@ tvheadend.dvb_adapter_general = function(adapterData, satConfStore) { fieldLabel : 'Monitor signal quality', name : 'qmon' }), - new Ext.form.Checkbox({ - fieldLabel : 'Disable full MUX reception', - name : 'disable_full_mux_rx' + new Ext.form.ComboBox({ + fieldLabel : 'Full mux reception', + name : 'full_mux_rx', + hiddenName: 'full_mux_rx', + displayField: 'num', + valueField: 'str', + editable : false, + allowBlank : false, + mode : 'remote', + triggerAction : 'all', + fields: [ 'num', 'str' ], + store : [ [0, 'Auto'], [1, 'Off'], [2, 'On'] ] }), new Ext.form.Checkbox({ fieldLabel : 'Disable PMT monitoring',