diff --git a/src/input/mpegts.h b/src/input/mpegts.h index b669f033..6ac7de1d 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -578,6 +578,8 @@ mpegts_service_t *mpegts_mux_find_service(mpegts_mux_t *ms, uint16_t sid); int mpegts_mux_instance_start ( mpegts_mux_instance_t **mmiptr ); +int mpegts_mux_instance_weight ( mpegts_mux_instance_t *mmi ); + int mpegts_mux_set_tsid ( mpegts_mux_t *mm, uint16_t tsid ); int mpegts_mux_set_onid ( mpegts_mux_t *mm, uint16_t onid ); int mpegts_mux_set_crid_authority ( mpegts_mux_t *mm, const char *defauth ); diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index 2bdc32bb..1813ebd3 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -116,6 +116,33 @@ mpegts_mux_instance_start return 0; } +int +mpegts_mux_instance_weight ( mpegts_mux_instance_t *mmi ) +{ + int w = 0; + const service_t *s; + const th_subscription_t *ths; + mpegts_input_t *mi = mmi->mmi_input; + lock_assert(&mi->mi_delivery_mutex); + + /* Direct subs */ + LIST_FOREACH(ths, &mmi->mmi_subs, ths_mmi_link) { + w = MAX(w, ths->ths_weight); + } + + /* Service subs */ + LIST_FOREACH(s, &mi->mi_transports, s_active_link) { + mpegts_service_t *ms = (mpegts_service_t*)s; + if (ms->s_dvb_mux == mmi->mmi_mux) { + LIST_FOREACH(ths, &s->s_subscriptions, ths_service_link) { + w = MAX(w, ths->ths_weight); + } + } + } + + return w; +} + /* **************************************************************************** * Class definition * ***************************************************************************/