diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index abda550d..48abe760 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -301,20 +301,6 @@ linuxdvb_frontend_start_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi ) { linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t*)mi; - mpegts_mux_instance_t *cur = LIST_FIRST(&lfe->mi_mux_active); - - /* Currently active */ - if (cur != NULL) { - - /* Already tuned */ - if (mmi == cur) - return 0; - - /* Stop current */ - cur->mmi_mux->mm_stop(cur->mmi_mux, 1); - } - assert(LIST_FIRST(&lfe->mi_mux_active) == NULL); - if (lfe->lfe_satconf) return linuxdvb_satconf_start_mux(lfe->lfe_satconf, mmi); return linuxdvb_frontend_tune1((linuxdvb_frontend_t*)mi, mmi, -1); diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index faa3160b..9a6cb2b9 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -94,34 +94,47 @@ mpegts_mux_instance_start ( mpegts_mux_instance_t **mmiptr ) { int r; - char buf[256], buf2[256];; + char buf[256], buf2[256]; mpegts_mux_instance_t *mmi = *mmiptr; - mpegts_mux_t *mm = mmi->mmi_mux; + mpegts_mux_instance_t *cur; + mpegts_mux_t * mm = mmi->mmi_mux; + mpegts_input_t * mi = mmi->mmi_input; mpegts_mux_nice_name(mm, buf, sizeof(buf)); /* Already active */ if (mm->mm_active) { *mmiptr = mm->mm_active; tvhdebug("mpegts", "%s - already active", buf); - mpegts_mux_scan_active(mm, buf, mmi->mmi_input); + mpegts_mux_scan_active(mm, buf, (*mmiptr)->mmi_input); return 0; } + cur = LIST_FIRST(&mi->mi_mux_active); + if (cur != NULL) { + /* Already tuned */ + if (mmi == cur) + return 0; + + /* Stop current */ + cur->mmi_mux->mm_stop(cur->mmi_mux, 1); + } + assert(LIST_FIRST(&mi->mi_mux_active) == NULL); + /* Start */ - mmi->mmi_input->mi_display_name(mmi->mmi_input, buf2, sizeof(buf2)); + mi->mi_display_name(mi, buf2, sizeof(buf2)); tvhinfo("mpegts", "%s - tuning on %s", buf, buf2); - r = mmi->mmi_input->mi_start_mux(mmi->mmi_input, mmi); + r = mi->mi_start_mux(mi, mmi); if (r) return r; /* Start */ tvhdebug("mpegts", "%s - started", buf); - mmi->mmi_input->mi_started_mux(mmi->mmi_input, mmi); + mi->mi_started_mux(mi, mmi); /* Event handler */ mpegts_fire_event(mm, ml_mux_start); /* Link */ - mpegts_mux_scan_active(mm, buf, mmi->mmi_input); + mpegts_mux_scan_active(mm, buf, mi); return 0; } diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c index ea0459d6..41ae9243 100644 --- a/src/input/mpegts/satip/satip_frontend.c +++ b/src/input/mpegts/satip/satip_frontend.c @@ -1312,18 +1312,6 @@ static int satip_frontend_tune0 ( satip_frontend_t *lfe, mpegts_mux_instance_t *mmi ) { - mpegts_mux_instance_t *cur = LIST_FIRST(&lfe->mi_mux_active); - - if (cur != NULL) { - /* Already tuned */ - if (mmi == cur) - return 0; - - /* Stop current */ - cur->mmi_mux->mm_stop(cur->mmi_mux, 1); - } - assert(LIST_FIRST(&lfe->mi_mux_active) == NULL); - if (udp_bind_double(&lfe->sf_rtp, &lfe->sf_rtcp, "satip", "rtp", "rtpc", satip_frontend_bindaddr(lfe), lfe->sf_udp_rtp_port,