]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
satip server: add 'Force signal level', fixes #4444
authorJaroslav Kysela <perex@perex.cz>
Tue, 20 Jun 2017 15:25:38 +0000 (17:25 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 20 Jun 2017 15:25:38 +0000 (17:25 +0200)
src/satip/rtp.c
src/satip/server.c
src/satip/server.h

index c77bc772afe2928f70222fb1c32bfea41b94f80d..7148a1360fa14d74f41b3c1a4714598437e46b4e 100644 (file)
@@ -668,27 +668,32 @@ satip_status_build(satip_rtp_session_t *rtp, char *buf, int len)
   int r, level = 0, lock = 0, quality = 0;
 
   lock = rtp->sig_lock;
-  switch (rtp->sig.signal_scale) {
-  case SIGNAL_STATUS_SCALE_RELATIVE:
-    level = MINMAX((rtp->sig.signal * 245) / 0xffff, 0, 240);
-    break;
-  case SIGNAL_STATUS_SCALE_DECIBEL:
-    level = MINMAX((rtp->sig.signal + 90000) / 375, 0, 240);
-    break;
-  default:
-    level = lock ? 120 : 0;
-    break;
-  }
-  switch (rtp->sig.snr_scale) {
-  case SIGNAL_STATUS_SCALE_RELATIVE:
-    quality = MINMAX((rtp->sig.snr * 16) / 0xffff, 0, 15);
-    break;
-  case SIGNAL_STATUS_SCALE_DECIBEL:
-    quality = MINMAX(rtp->sig.snr / 2000, 0, 15);
-    break;
-  default:
-    quality = lock ? 10 : 0;
-    break;
+  if (satip_server_conf.satip_force_sig_level > 0) {
+    level = MINMAX(satip_server_conf.satip_force_sig_level, 1, 240);
+    quality = MAX((level + 15) / 15, 15);
+  } else {
+    switch (rtp->sig.signal_scale) {
+    case SIGNAL_STATUS_SCALE_RELATIVE:
+      level = MINMAX((rtp->sig.signal * 245) / 0xffff, 0, 240);
+      break;
+    case SIGNAL_STATUS_SCALE_DECIBEL:
+      level = MINMAX((rtp->sig.signal + 90000) / 375, 0, 240);
+      break;
+    default:
+      level = lock ? 120 : 0;
+      break;
+    }
+    switch (rtp->sig.snr_scale) {
+    case SIGNAL_STATUS_SCALE_RELATIVE:
+      quality = MINMAX((rtp->sig.snr * 16) / 0xffff, 0, 15);
+      break;
+    case SIGNAL_STATUS_SCALE_DECIBEL:
+      quality = MINMAX(rtp->sig.snr / 2000, 0, 15);
+      break;
+    default:
+      quality = lock ? 10 : 0;
+      break;
+    }
   }
 
   mpegts_pid_dump(&rtp->pids, pids, sizeof(pids), 0, 0);
index 88f06b4d05fa6aadd42aa9f5e593f46ef3a6cf46..7ec37052ed60e57a7a9aafdf6833cb69b8961d13 100644 (file)
@@ -715,7 +715,16 @@ const idclass_t satip_server_class = {
       .off    = offsetof(struct satip_server_conf, satip_iptv_sig_level),
       .opts   = PO_EXPERT,
       .group  = 1,
-      .def.i  = 220,
+      .def.u32 = 220,
+    },
+    {
+      .type   = PT_U32,
+      .id     = "force_sig_level",
+      .name   = N_("Force signal level"),
+      .desc   = N_("Force signal level for all streaming (1-240, 0=do not use)."),
+      .off    = offsetof(struct satip_server_conf, satip_force_sig_level),
+      .opts   = PO_EXPERT,
+      .group  = 1,
     },
     {
       .type   = PT_INT,
index 2219b9a16744edfa1673dc757ccaf252da43e479..f34508fd385a1d1bd34a198ef16a4378c718a7cd 100644 (file)
@@ -48,6 +48,7 @@ struct satip_server_conf {
   int satip_muxcnf;
   int satip_nom3u;
   int satip_iptv_sig_level;
+  int satip_force_sig_level;
   int satip_dvbs;
   int satip_dvbs2;
   int satip_dvbt;