Issue #1376 - add option to manually disable full mux rx.

It appears this mode can cause problems on some systems, particulary
related to USB tuners. Can cause high CPU load.
This commit is contained in:
Adam Sutton 2012-10-31 17:29:42 +00:00
parent 7367f713c1
commit 3cd6336314
4 changed files with 36 additions and 1 deletions

View file

@ -212,6 +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;
char *tda_displayname;
char *tda_fe_path;
@ -363,6 +364,8 @@ 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_clone(th_dvb_adapter_t *dst, th_dvb_adapter_t *src);
void dvb_adapter_clean(th_dvb_adapter_t *tda);

View file

@ -94,6 +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);
hts_settings_save(m, "dvbadapters/%s", tda->tda_identifier);
htsmsg_destroy(m);
}
@ -364,6 +365,25 @@ 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)
{
if(tda->tda_disable_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");
tda->tda_disable_full_mux_rx = on;
tda_save(tda);
}
/**
*
*/
@ -388,6 +408,9 @@ 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_hostconnection == HOSTCONNECTION_USB12)
return 0; // Don't even bother, device <-> host interface is too slow
@ -658,6 +681,7 @@ 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);
}
htsmsg_destroy(l);
}

View file

@ -157,6 +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_str(r, "diseqcversion",
((const char *[]){"DiSEqC 1.0 / 2.0",
"DiSEqC 1.1 / 2.1"})
@ -199,6 +200,9 @@ 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);
if((s = http_arg_get(&hc->hc_req_args, "nitoid")) != NULL)
dvb_adapter_set_nitoid(tda, atoi(s));

View file

@ -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', 'idleclose' ]);
,'disable_pmt_monitor', 'disable_full_mux_rx', 'idleclose' ]);
function saveConfForm() {
confform.getForm().submit({
@ -1135,6 +1135,10 @@ 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.Checkbox({
fieldLabel : 'Disable PMT monitoring',
name : 'disable_pmt_monitor'