diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 28040221..fdf255f8 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -397,6 +397,7 @@ struct mpegts_input mpegts_network_t *(*mi_network_create) (mpegts_input_t *mi, htsmsg_t *c); void (*mi_started_mux) (mpegts_input_t*,mpegts_mux_instance_t*); void (*mi_stopped_mux) (mpegts_input_t*,mpegts_mux_instance_t*); + int (*mi_has_subscription) (mpegts_input_t*, mpegts_mux_t *mm); }; #endif /* __TVH_MPEGTS_H__ */ diff --git a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c index 02cecd07..2df82d30 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c @@ -280,6 +280,14 @@ linuxdvb_satconf_stopped_mux ls->ls_frontend->mi_stopped_mux(ls->ls_frontend, mmi); } +static int +linuxdvb_satconf_has_subscription + ( mpegts_input_t *mi, mpegts_mux_t *mm ) +{ + linuxdvb_satconf_t *ls = (linuxdvb_satconf_t*)mi; + return ls->ls_frontend->mi_has_subscription(ls->ls_frontend, mm); +} + static int linuxdvb_satconf_open_pid ( linuxdvb_frontend_t *lfe, int pid, const char *name ) @@ -331,6 +339,7 @@ linuxdvb_satconf_create0 ls->mi_network_create = linuxdvb_satconf_network_create; ls->mi_started_mux = linuxdvb_satconf_started_mux; ls->mi_stopped_mux = linuxdvb_satconf_stopped_mux; + ls->mi_has_subscription = linuxdvb_satconf_has_subscription; ls->lfe_open_pid = linuxdvb_satconf_open_pid; /* Unoversal LMB */ diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index af07ed23..b4c09df6 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -204,6 +204,16 @@ mpegts_input_stopped_mux } } +static int +mpegts_input_has_subscription ( mpegts_input_t *mi, mpegts_mux_t *mm ) +{ + service_t *t; + LIST_FOREACH(t, &mi->mi_transports, s_active_link) + if (((mpegts_service_t*)t)->s_dvb_mux == mm) + return 1; + return 0; +} + /* ************************************************************************** * Data processing * *************************************************************************/ @@ -217,7 +227,6 @@ mpegts_input_recv_packets int len = l; int i = 0, table_wakeup = 0; mpegts_mux_t *mm = mmi->mmi_mux; - //assert(mmi->mmi_input == mi); assert(mm != NULL); assert(name != NULL); @@ -394,6 +403,7 @@ mpegts_input_create0 mi->mi_create_mux_instance = mpegts_input_create_mux_instance; mi->mi_started_mux = mpegts_input_started_mux; mi->mi_stopped_mux = mpegts_input_stopped_mux; + mi->mi_has_subscription = mpegts_input_has_subscription; /* Index */ mi->mi_instance = ++mpegts_input_idx; diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index 73e78406..26d1d2d4 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -331,13 +331,9 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt ) static int mpegts_mux_has_subscribers ( mpegts_mux_t *mm ) { - service_t *t; mpegts_mux_instance_t *mmi = mm->mm_active; - if (mmi) { - LIST_FOREACH(t, &mmi->mmi_input->mi_transports, s_active_link) - if (((mpegts_service_t*)t)->s_dvb_mux == mm) - return 1; - } + if (mmi) + return mmi->mmi_input->mi_has_subscription(mmi->mmi_input, mm); return 0; }