]> 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:07 +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 8d2dd4dcacdb842da97ee3a3550e31f43953a85e..0ce8d72dd38abb9d575c95b00ce9fa2744ba91de 100644 (file)
@@ -1110,7 +1110,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];
 
@@ -1140,6 +1140,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;
@@ -1278,7 +1295,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 291447e2035f04984f8c5cd4f8302c898dd254c1..00bca980350641fb5508b382ad22d78ab120cbd2 100644 (file)
@@ -367,7 +367,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 7d379bd749881cf33863efa48851a3cad7459242..d12ca94ab69c1187b1f2582a0fb4a686052623c9 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;
   }