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-Tag: v4.2.5~24 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d31c14265b89e34eaf9fe3e36510802ccc69c334;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 7cd0a9af9..967b355ba 100644 --- a/src/service.c +++ b/src/service.c @@ -770,9 +770,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;