]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
fastscan/bouquet: the satpos in local urls is human readable now
authorJaroslav Kysela <perex@perex.cz>
Sat, 1 Nov 2014 14:50:59 +0000 (15:50 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sat, 8 Nov 2014 20:05:38 +0000 (21:05 +0100)
src/input/mpegts/dvb.h
src/input/mpegts/dvb_psi.c
src/input/mpegts/dvb_support.c

index 2f6a733726c05eb0f0aaf1bad69ff2b500cc1d7c..fc52004f590f9274e8c175bd8563e38fe6b8c4f9 100644 (file)
@@ -492,6 +492,10 @@ int dvb_delsys2type ( enum dvb_fe_delivery_system ds );
 
 int dvb_mux_conf_str ( dvb_mux_conf_t *conf, char *buf, size_t bufsize );
 
+int dvb_sat_position( const dvb_mux_conf_t *mc );
+
+const char *dvb_sat_position_to_str( int position, char *buf, size_t buflen );
+
 #endif /* ENABLE_MPEGTS_DVB */
 
 void dvb_done       ( void );
index caa3b1614e1abd27e38242c11b880f91eb529062..5431c3c1dc4039f12338666ec851b14b63726669 100644 (file)
@@ -811,10 +811,9 @@ dvb_nit_callback
       if (idnode_is_instance(&mm->mm_id, &dvb_mux_dvbs_class)) {
         dvb_mux_conf_t *mc = &((dvb_mux_t *)mm)->lm_tuning;
         if (mc->u.dmc_fe_qpsk.orbital_dir) {
-          int pos = mc->u.dmc_fe_qpsk.orbital_pos;
-          if (mc->u.dmc_fe_qpsk.orbital_dir == 'W')
-            pos = -pos;
-          snprintf(dauth, sizeof(dauth), "dvb-bouquet://dvbs,%d/%s", pos, name);
+          char buf[16];
+          dvb_sat_position_to_str(dvb_sat_position(mc), buf, sizeof(buf));
+          snprintf(dauth, sizeof(dauth), "dvb-bouquet://dvbs,%s/%s", buf, name);
         }
       } else if (idnode_is_instance(&mux->mm_id, &dvb_mux_dvbt_class)) {
         snprintf(dauth, sizeof(dauth), "dvb-bouquet://dvbt/%s", name);
@@ -1801,12 +1800,9 @@ psi_tables_dvb ( mpegts_mux_t *mm )
 #if ENABLE_MPEGTS_DVB
   if (idnode_is_instance(&mm->mm_id, &dvb_mux_dvbs_class)) {
     dvb_mux_conf_t *mc = &((dvb_mux_t *)mm)->lm_tuning;
-    if (mc->dmc_fe_type == DVB_TYPE_S) {
-      int pos = mc->u.dmc_fe_qpsk.orbital_pos;
-      if (mc->u.dmc_fe_qpsk.orbital_dir == 'W')
-        pos = -pos;
-      dvb_fastscan_each(mm, pos, mc->dmc_fe_freq, psi_tables_dvb_fastscan);
-    }
+    if (mc->dmc_fe_type == DVB_TYPE_S)
+      dvb_fastscan_each(mm, dvb_sat_position(mc),
+                        mc->dmc_fe_freq, psi_tables_dvb_fastscan);
   }
 #endif
 }
index 7af24e5b3c962a6b38ef875bead31f02f0a275dc..89ca76bdc0b37ff0b371ad14a016b5d1bcad6824 100644 (file)
@@ -842,6 +842,32 @@ dvb_mux_conf_str ( dvb_mux_conf_t *dmc, char *buf, size_t bufsize )
   }
 }
 
+int
+dvb_sat_position(const dvb_mux_conf_t *mc)
+{
+  int pos = mc->u.dmc_fe_qpsk.orbital_pos;
+  assert(mc->dmc_fe_type == DVB_TYPE_S);
+  if (!mc->u.dmc_fe_qpsk.orbital_dir)
+    return INT_MAX;
+  if (mc->u.dmc_fe_qpsk.orbital_dir == 'W')
+    return -pos;
+  return pos;
+}
+
+const char *
+dvb_sat_position_to_str(int position, char *buf, size_t buflen)
+{
+  const int dec = position % 10;
+
+  if (!buf || !buflen)
+    return "";
+  snprintf(buf, buflen, "%d", position / 10);
+  if (dec)
+    snprintf(buf + strlen(buf), buflen - strlen(buf), ".%d", dec);
+  snprintf(buf + strlen(buf), buflen - strlen(buf), "%c", dec < 0 ? 'W' : 'E');
+  return buf;
+}
+
 #endif /* ENABLE_MPEGTS_DVB */
 
 /**