From: Jaroslav Kysela Date: Wed, 15 Nov 2017 11:17:33 +0000 (+0100) Subject: service: handle better preferred video types for the service selection X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=342409d3689545addf5fa8ea3ca22f7937d1d3b1;p=thirdparty%2Ftvheadend.git service: handle better preferred video types for the service selection - use free inputs when preferred inputs are busy - add UHD->HD fallback and SD->HD fallback --- diff --git a/src/service.c b/src/service.c index 219371968..45606cdbe 100644 --- a/src/service.c +++ b/src/service.c @@ -792,9 +792,26 @@ service_find_instance } } } - /* find a valid instance */ + /* find a valid instance, no error and "user" idle */ TAILQ_FOREACH(si, sil, si_link) - if (!si->si_error) break; + if (si->si_weight < SUBSCRIPTION_PRIO_MIN && si->si_error == 0) break; + /* UHD->HD fallback and SD->HD fallback */ + if (si == NULL && pro && + (pro->pro_svfilter == PROFILE_SVF_UHD || + pro->pro_svfilter == PROFILE_SVF_SD)) { + LIST_FOREACH(ilm, &ch->ch_services, ilm_in2_link) { + s = (service_t *)ilm->ilm_in1; + if (s->s_is_enabled(s, flags) && service_is_hdtv(s)) { + r1 = s->s_enlist(s, ti, sil, flags, weight); + if (r1 && r == 0) + r = r1; + } + } + /* find a valid instance, no error and "user" idle */ + TAILQ_FOREACH(si, sil, si_link) + if (si->si_weight < SUBSCRIPTION_PRIO_MIN && si->si_error == 0) break; + } + /* fallback, enlist all instances */ if (si == NULL) { LIST_FOREACH(ilm, &ch->ch_services, ilm_in2_link) { s = (service_t *)ilm->ilm_in1;