From: Jaroslav Kysela Date: Tue, 9 Jun 2015 13:01:07 +0000 (+0200) Subject: linuxdvb: set DELIVERY SYSTEM before satconf, fixes #2933 X-Git-Tag: v4.2.1~2356 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=21d03bd28298d89af742a025ace262bc770e4fee;p=thirdparty%2Ftvheadend.git linuxdvb: set DELIVERY SYSTEM before satconf, fixes #2933 --- diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index 8d2dd4dca..0ce8d72dd 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -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)); diff --git a/src/input/mpegts/linuxdvb/linuxdvb_private.h b/src/input/mpegts/linuxdvb/linuxdvb_private.h index 291447e20..00bca9803 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_private.h +++ b/src/input/mpegts/linuxdvb/linuxdvb_private.h @@ -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 diff --git a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c index 7d379bd74..d12ca94ab 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c @@ -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; }