]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
linuxdvb: set DELIVERY SYSTEM before satconf, fixes #2933
authorJaroslav Kysela <perex@perex.cz>
Tue, 9 Jun 2015 13:01:07 +0000 (15:01 +0200)
committerJaroslav Kysela <perex@perex.cz>
Tue, 9 Jun 2015 13:01:36 +0000 (15:01 +0200)
src/input/mpegts/linuxdvb/linuxdvb_frontend.c
src/input/mpegts/linuxdvb/linuxdvb_private.h
src/input/mpegts/linuxdvb/linuxdvb_satconf.c

index b85c4cf53afbb2b09fdbd0a70b6d3c74ef7e2f59..e021c369bb01532df30296ee153314bcf3f05aa2 100644 (file)
@@ -1106,7 +1106,7 @@ int linuxdvb2tvh_delsys ( int delsys )
 
 int
 linuxdvb_frontend_clear
-  ( linuxdvb_frontend_t *lfe )
+  ( linuxdvb_frontend_t *lfe, mpegts_mux_instance_t *mmi )
 {
   char buf1[256];
 
@@ -1136,6 +1136,23 @@ linuxdvb_frontend_clear
     tvherror("linuxdvb", "%s - DTV_CLEAR failed [e=%s]", buf1, strerror(errno));
     return -1;
   }
+
+  if (mmi) {
+    dvb_mux_t *lm = (dvb_mux_t*)mmi->mmi_mux;
+    dvb_mux_conf_t *dmc = &lm->lm_tuning;
+
+    struct dtv_property delsys_p;
+    struct dtv_properties delsys_cmdseq = {
+      .num = 1,
+      .props = &delsys_p
+    };
+    delsys_p.cmd = DTV_DELIVERY_SYSTEM;
+    delsys_p.u.data = TR(delsys, delsys_tbl, SYS_UNDEFINED);
+    if ((ioctl(lfe->lfe_fe_fd, FE_SET_PROPERTY, &delsys_cmdseq)) != 0) {
+      tvherror("linuxdvb", "%s - DTV_DELIVERY_SYSTEM failed [e=%s]", buf1, strerror(errno));
+      return -1;
+    }
+  }
 #endif
 
   return 0;
@@ -1274,7 +1291,7 @@ linuxdvb_frontend_tune0
   dvb_mux_conf_t *dmc;
   struct dvb_frontend_parameters p;
 
-  r = linuxdvb_frontend_clear(lfe);
+  r = linuxdvb_frontend_clear(lfe, NULL);
   if (r) return r;
 
   lfe->mi_display_name((mpegts_input_t*)lfe, buf1, sizeof(buf1));
index b88ae94cecfaedb7493d78c3ba99f3d8c320f5cc..d1804a84773afb5f151dce4e068e51b0d5bf8279 100644 (file)
@@ -363,7 +363,7 @@ void linuxdvb_frontend_add_network
   ( linuxdvb_frontend_t *lfe, linuxdvb_network_t *net );
 
 int linuxdvb_frontend_clear
-  ( linuxdvb_frontend_t *lfe );
+  ( linuxdvb_frontend_t *lfe, mpegts_mux_instance_t *mmi );
 int linuxdvb_frontend_tune0
   ( linuxdvb_frontend_t *lfe, mpegts_mux_instance_t *mmi, uint32_t freq );
 int linuxdvb_frontend_tune1
index 9400ae54f24167a597d8c5d7ecc74ae9fe76ab62..79c887a929187e973e41afd225bef5bda3f86521 100644 (file)
@@ -852,7 +852,7 @@ linuxdvb_satconf_start_mux
     if (r) return r;
   } else {
     /* Clear the frontend settings, open frontend fd */
-    r = linuxdvb_frontend_clear(lfe);
+    r = linuxdvb_frontend_clear(lfe, mmi);
     if (r) return r;
   }