From 0999618cc968d05de5f62c52fd938c8d9ede4ead Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Mon, 3 Sep 2012 15:25:46 +0100 Subject: [PATCH] Ensure that quality monitoring is properly adhered to and also low quality services are not completely ignored. Fixes #1196. --- src/dvb/dvb_multiplex.c | 4 ++-- src/service.c | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/dvb/dvb_multiplex.c b/src/dvb/dvb_multiplex.c index a3d77479..a24f641f 100644 --- a/src/dvb/dvb_multiplex.c +++ b/src/dvb/dvb_multiplex.c @@ -548,7 +548,7 @@ dvb_mux_save(th_dvb_mux_instance_t *tdmi) htsmsg_t *m = htsmsg_create_map(); - htsmsg_add_u32(m, "quality", tdmi->tdmi_quality); + htsmsg_add_u32(m, "quality", tdmi->tdmi_adapter->tda_qmon ? tdmi->tdmi_quality : 100); htsmsg_add_u32(m, "enabled", tdmi->tdmi_enabled); htsmsg_add_str(m, "status", dvb_mux_status(tdmi)); @@ -777,7 +777,7 @@ tdmi_create_by_msg(th_dvb_adapter_t *tda, htsmsg_t *m, const char *identifier) if((s = htsmsg_get_str(m, "status")) != NULL) tdmi->tdmi_fe_status = str2val(s, muxfestatustab); - if(!htsmsg_get_u32(m, "quality", &u32)) + if(tda->tda_qmon && !htsmsg_get_u32(m, "quality", &u32)) tdmi->tdmi_quality = u32; } return NULL; diff --git a/src/service.c b/src/service.c index ca271373..5e289eec 100644 --- a/src/service.c +++ b/src/service.c @@ -336,15 +336,6 @@ service_find(channel_t *ch, unsigned int weight, const char *loginfo, continue; } - if(t->s_quality_index(t) < 10) { - if(loginfo != NULL) { - tvhlog(LOG_NOTICE, "Service", - "%s: Skipping \"%s\" -- Quality below 10%%", - loginfo, service_nicename(t)); - err = SM_CODE_BAD_SIGNAL; - } - continue; - } vec[cnt++] = t; tvhlog(LOG_DEBUG, "Service", "%s: Adding adapter \"%s\" for service \"%s\"", @@ -372,6 +363,15 @@ service_find(channel_t *ch, unsigned int weight, const char *loginfo, /* First, try all services without stealing */ for(i = off; i < cnt; i++) { t = vec[i]; + if(t->s_quality_index(t) < 10) { + if(loginfo != NULL) { + tvhlog(LOG_NOTICE, "Service", + "%s: Skipping \"%s\" -- Quality below 10%%", + loginfo, service_nicename(t)); + err = SM_CODE_BAD_SIGNAL; + } + continue; + } tvhlog(LOG_DEBUG, "Service", "%s: Probing adapter \"%s\" without stealing for service \"%s\"", loginfo, service_adapter_nicename(t), service_nicename(t));