diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index f9c040db..072d5f0f 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -582,6 +582,8 @@ mpegts_input_open_service ( mpegts_input_t *mi, mpegts_service_t *s, int flags, } } else if (flags & SUBSCRIPTION_TABLES) { mi->mi_open_pid(mi, s->s_dvb_mux, MPEGTS_TABLES_PID, MPS_RAW | MPS_TABLES, s); + } else if (flags & SUBSCRIPTION_MINIMAL) { + mi->mi_open_pid(mi, s->s_dvb_mux, DVB_PAT_PID, MPS_RAW, s); } } diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index 1f9c6670..04962724 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -134,7 +134,8 @@ mpegts_mux_subscribe_keep s = mi->mi_linked; mi->mi_linked = NULL; - r = mpegts_mux_subscribe(mm, mi, "keep", SUBSCRIPTION_PRIO_KEEP, SUBSCRIPTION_NONE); + r = mpegts_mux_subscribe(mm, mi, "keep", SUBSCRIPTION_PRIO_KEEP, + SUBSCRIPTION_RESTART | SUBSCRIPTION_MINIMAL); mi->mi_linked = s; return r; } @@ -203,6 +204,7 @@ mpegts_mux_unsubscribe_linked mpegts_mux_instance_t *mmi; if (mi) { + tvhtrace("mpegts", "unsubscribing linked from '%s'", mi->mi_name); LIST_FOREACH(mmi, &mi->mi_mux_active, mmi_active_link) mpegts_mux_unsubscribe_by_name(mmi->mmi_mux, "keep"); } @@ -721,6 +723,9 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force, int reason ) } } + if (mm->mm_active != mmi) + return; + mi->mi_stopping_mux(mi, mmi); mi->mi_stop_mux(mi, mmi); mi->mi_stopped_mux(mi, mmi); diff --git a/src/input/mpegts/mpegts_mux_sched.c b/src/input/mpegts/mpegts_mux_sched.c index 9e35ba86..287d46c0 100644 --- a/src/input/mpegts/mpegts_mux_sched.c +++ b/src/input/mpegts/mpegts_mux_sched.c @@ -213,7 +213,7 @@ mpegts_mux_sched_timer ( void *p ) mms->mms_sub = subscription_create_from_mux(mms->mms_prch, NULL, mms->mms_weight, mms->mms_creator ?: "", - SUBSCRIPTION_NONE, + SUBSCRIPTION_MINIMAL, NULL, NULL, NULL, NULL); /* Failed (try-again soon) */ diff --git a/src/subscriptions.h b/src/subscriptions.h index ed50453d..c2ad74dc 100644 --- a/src/subscriptions.h +++ b/src/subscriptions.h @@ -37,6 +37,7 @@ extern struct th_subscription_list subscriptions; #define SUBSCRIPTION_IDLESCAN 0x200 ///< for mux subscriptions #define SUBSCRIPTION_USERSCAN 0x400 ///< for mux subscriptions #define SUBSCRIPTION_EPG 0x800 ///< for mux subscriptions +#define SUBSCRIPTION_MINIMAL 0x1000 /* Some internal priorities */ #define SUBSCRIPTION_PRIO_KEEP 1 ///< Keep input rolling