]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
SAT>IP Client: add configurable grace timeout
authorJaroslav Kysela <perex@perex.cz>
Mon, 27 Apr 2015 18:40:51 +0000 (20:40 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 27 Apr 2015 18:54:33 +0000 (20:54 +0200)
src/input/mpegts/satip/satip_frontend.c
src/input/mpegts/satip/satip_private.h
src/input/mpegts/satip/satip_satconf.c

index a60f6c0c5a468ea43a51d83d9addd4e9015fbb12..185f151d1a5e7525e766ddd082881c70aebb6e5a 100644 (file)
@@ -378,7 +378,7 @@ satip_frontend_get_grace ( mpegts_input_t *mi, mpegts_mux_t *mm )
   satip_frontend_t *lfe = (satip_frontend_t*)mi;
   int r = 5;
   if (lfe->sf_positions)
-    r = 10;
+    r = MIN(60, MAX(r, satip_satconf_get_grace(lfe, mm) ?: 10));
   return r;
 }
 
index 5880fdd5e4870692d7ee5ad9dea7f28fbe87b597..96a0ad22b091c899fcdad7ff277975a5aff9263a 100644 (file)
@@ -160,6 +160,7 @@ struct satip_satconf
   int                        sfc_enabled;
   int                        sfc_position;
   int                        sfc_priority;
+  int                        sfc_grace;
   char                      *sfc_name;
 
   /*
@@ -208,6 +209,9 @@ void satip_satconf_updated_positions
 int satip_satconf_get_priority
   ( satip_frontend_t *lfe, mpegts_mux_t *mm );
 
+int satip_satconf_get_grace
+  ( satip_frontend_t *lfe, mpegts_mux_t *mm );
+
 int satip_satconf_get_position
   ( satip_frontend_t *lfe, mpegts_mux_t *mm );
 
index 91765b78176ed67e38b1760c8a8def01003272ee..55f0d3ea2b4b05a34b44c8f2a7f2e130b25d02a8 100644 (file)
@@ -29,6 +29,19 @@ static satip_satconf_t *
 satip_satconf_find_ele( satip_frontend_t *lfe, mpegts_mux_t *mux )
 {
   satip_satconf_t *sfc;
+  satip_frontend_t *lfe2;
+
+  if (lfe->sf_master) {
+    TAILQ_FOREACH(lfe2, &lfe->sf_device->sd_frontends, sf_link)
+      if (lfe2->sf_number != lfe->sf_number &&
+          lfe2->sf_number == lfe->sf_master &&
+          lfe2->sf_master == 0) {
+        lfe = lfe2;
+        goto found;
+      }
+    return 0;
+  }
+found:
   TAILQ_FOREACH(sfc, &lfe->sf_satconf, sfc_link) {
     if (idnode_set_exists(sfc->sfc_networks, &mux->mm_network->mn_id))
       return sfc;
@@ -44,23 +57,19 @@ satip_satconf_get_priority
   return sfc ? sfc->sfc_priority : 0;
 }
 
+int
+satip_satconf_get_grace
+  ( satip_frontend_t *lfe, mpegts_mux_t *mm )
+{
+  satip_satconf_t *sfc = satip_satconf_find_ele(lfe, mm);
+  return sfc ? sfc->sfc_grace : 0;
+}
+
 int
 satip_satconf_get_position
   ( satip_frontend_t *lfe, mpegts_mux_t *mm )
 {
   satip_satconf_t *sfc;
-  satip_frontend_t *lfe2;
-  if (lfe->sf_master) {
-    TAILQ_FOREACH(lfe2, &lfe->sf_device->sd_frontends, sf_link)
-      if (lfe2->sf_number != lfe->sf_number &&
-          lfe2->sf_number == lfe->sf_master &&
-          lfe2->sf_master == 0) {
-        lfe = lfe2;
-        goto found;
-      }
-    return 0;
-  }
-found:
   sfc = satip_satconf_find_ele(lfe, mm);
   return sfc && sfc->sfc_enabled ? sfc->sfc_position : 0;
 }
@@ -193,6 +202,14 @@ const idclass_t satip_satconf_class =
       .off      = offsetof(satip_satconf_t, sfc_priority),
       .opts     = PO_ADVANCED,
     },
+    {
+      .type     = PT_INT,
+      .id       = "timeout",
+      .name     = "Timeout (seconds)",
+      .off      = offsetof(satip_satconf_t, sfc_grace),
+      .opts     = PO_ADVANCED,
+      .def.i    = 10
+    },
     {
       .type     = PT_INT,
       .id       = "position",
@@ -241,6 +258,7 @@ satip_satconf_create0
   sfc->sfc_networks = idnode_set_create(0);
   sfc->sfc_lfe      = lfe;
   sfc->sfc_position = position + 1;
+  sfc->sfc_grace    = 10;
   TAILQ_INSERT_TAIL(&lfe->sf_satconf, sfc, sfc_link);
   if (conf)
     idnode_load(&sfc->sfc_id, conf);