From: Jaroslav Kysela Date: Mon, 30 Nov 2015 21:50:54 +0000 (+0100) Subject: mpegts: pass weight to mi_open_service callback, too X-Git-Tag: v4.2.1~1429 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7934c2a20caee9ddaa30b8d8083585ea9178f7f7;p=thirdparty%2Ftvheadend.git mpegts: pass weight to mi_open_service callback, too --- diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 277a8fc77..5b52ed802 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -528,6 +528,7 @@ struct mpegts_service int (*s_unlink)(mpegts_service_t *master, mpegts_service_t *slave); int s_dvb_subscription_flags; + int s_dvb_subscription_weight; mpegts_apids_t *s_pids; LIST_HEAD(, mpegts_service) s_masters; @@ -712,7 +713,7 @@ struct mpegts_input int (*mi_warm_mux) (mpegts_input_t*,mpegts_mux_instance_t*); int (*mi_start_mux) (mpegts_input_t*,mpegts_mux_instance_t*, int weight); void (*mi_stop_mux) (mpegts_input_t*,mpegts_mux_instance_t*); - void (*mi_open_service) (mpegts_input_t*,mpegts_service_t*,int flags, int first); + void (*mi_open_service) (mpegts_input_t*,mpegts_service_t*, int flags, int first, int weight); void (*mi_close_service) (mpegts_input_t*,mpegts_service_t*); void (*mi_update_pids) (mpegts_input_t*,mpegts_mux_t*); void (*mi_create_mux_instance) (mpegts_input_t*,mpegts_mux_t*); @@ -769,7 +770,7 @@ int mpegts_input_set_networks ( mpegts_input_t *mi, htsmsg_t *msg ); int mpegts_input_add_network ( mpegts_input_t *mi, mpegts_network_t *mn ); -void mpegts_input_open_service ( mpegts_input_t *mi, mpegts_service_t *s, int flags, int init ); +void mpegts_input_open_service ( mpegts_input_t *mi, mpegts_service_t *s, int flags, int init, int weight ); void mpegts_input_close_service ( mpegts_input_t *mi, mpegts_service_t *s ); void mpegts_input_status_timer ( void *p ); diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index 91cbe3cf8..a531e5560 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -630,7 +630,8 @@ mpegts_input_cat_pass_callback } void -mpegts_input_open_service ( mpegts_input_t *mi, mpegts_service_t *s, int flags, int init ) +mpegts_input_open_service + ( mpegts_input_t *mi, mpegts_service_t *s, int flags, int init, int weight ) { mpegts_mux_t *mm = s->s_dvb_mux; elementary_stream_t *st; diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index 8db789d2e..40422dfa6 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -338,7 +338,8 @@ mpegts_service_start(service_t *t, int instance, int weight, int flags) /* Open service */ s->s_dvb_subscription_flags = flags; - mmi->mmi_input->mi_open_service(mmi->mmi_input, s, flags, 1); + s->s_dvb_subscription_weight = weight; + mmi->mmi_input->mi_open_service(mmi->mmi_input, s, flags, 1, weight); } return r; @@ -380,7 +381,7 @@ mpegts_service_refresh(service_t *t) lock_assert(&global_lock); /* Re-open */ - i->mi_open_service(i, s, s->s_dvb_subscription_flags, 0); + i->mi_open_service(i, s, s->s_dvb_subscription_flags, 0, s->s_dvb_subscription_weight); } /* diff --git a/src/input/mpegts/satip/satip_frontend.c b/src/input/mpegts/satip/satip_frontend.c index a7b6c9bc7..95682e641 100644 --- a/src/input/mpegts/satip/satip_frontend.c +++ b/src/input/mpegts/satip/satip_frontend.c @@ -580,12 +580,14 @@ satip_frontend_update_pids } static void -satip_frontend_open_service ( mpegts_input_t *mi, mpegts_service_t *s, int flags, int init ) +satip_frontend_open_service + ( mpegts_input_t *mi, mpegts_service_t *s, int flags, int init, int weight ) { satip_frontend_t *lfe = (satip_frontend_t*)mi; satip_tune_req_t *tr; + int w; - mpegts_input_open_service(mi, s, flags, init); + mpegts_input_open_service(mi, s, flags, init, weight); if (!lfe->sf_device->sd_can_weight) return; @@ -593,7 +595,8 @@ satip_frontend_open_service ( mpegts_input_t *mi, mpegts_service_t *s, int flags pthread_mutex_lock(&lfe->sf_dvr_lock); if ((tr = lfe->sf_req) != NULL && tr->sf_mmi != NULL) { pthread_mutex_lock(&mi->mi_output_lock); - tr->sf_weight = mpegts_mux_instance_weight(tr->sf_mmi); + w = mpegts_mux_instance_weight(tr->sf_mmi); + tr->sf_weight = MAX(w, weight); pthread_mutex_unlock(&mi->mi_output_lock); } pthread_mutex_unlock(&lfe->sf_dvr_lock);