]> 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>
Thu, 6 Jul 2017 13:23:54 +0000 (15:23 +0200)
src/satip/rtp.c
src/satip/server.c
src/satip/server.h

index 68aa5c936641f42f6eacbf550a95568342861adc..4ef931e0d564aecff298ec3926eb877ab5e4189e 100644 (file)
@@ -655,27 +655,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 3fd578e9d9609082fafd6ed10cf25e8a0cdde3a1..c429056ab074ba74c145eea6dec31ae9aa04b9a5 100644 (file)
@@ -724,7 +724,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 3de498d1819486ac3aa17e0d228c2a39434ba37c..4035a11c1e0aa6210bf8e45fdb610a4524df640e 100644 (file)
@@ -49,6 +49,7 @@ struct satip_server_conf {
   int satip_nom3u;
   int satip_anonymize;
   int satip_iptv_sig_level;
+  int satip_force_sig_level;
   int satip_dvbs;
   int satip_dvbs2;
   int satip_dvbt;