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;
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*);
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 );
}
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;
/* 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;
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);
}
/*
}
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;
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);