]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
service: handle better preferred video types for the service selection
authorJaroslav Kysela <perex@perex.cz>
Wed, 15 Nov 2017 11:17:33 +0000 (12:17 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 15 Nov 2017 18:32:12 +0000 (19:32 +0100)
- use free inputs when preferred inputs are busy
- add UHD->HD fallback and SD->HD fallback

src/service.c

index 7cd0a9af9eec782de5a528c5f6d7b6d1b9591637..967b355bad5e47318b45629b83ad856408b0198d 100644 (file)
@@ -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;