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.0.5~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1fad0f3c252737850ddec6ee601b7830c71ff654;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 b85c4cf53..e021c369b 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -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)); diff --git a/src/input/mpegts/linuxdvb/linuxdvb_private.h b/src/input/mpegts/linuxdvb/linuxdvb_private.h index b88ae94ce..d1804a847 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_private.h +++ b/src/input/mpegts/linuxdvb/linuxdvb_private.h @@ -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 diff --git a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c index 9400ae54f..79c887a92 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; }