]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts: pass weight to mi_open_service callback, too
authorJaroslav Kysela <perex@perex.cz>
Mon, 30 Nov 2015 21:50:54 +0000 (22:50 +0100)
committerJaroslav Kysela <perex@perex.cz>
Mon, 30 Nov 2015 21:50:54 +0000 (22:50 +0100)
src/input/mpegts.h
src/input/mpegts/mpegts_input.c
src/input/mpegts/mpegts_service.c
src/input/mpegts/satip/satip_frontend.c

index 277a8fc775451d4e972ce38f89cfe73d63056edd..5b52ed802eeb35ad9ddc7b63ecaa079f2f944310 100644 (file)
@@ -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 );
index 91cbe3cf8f73a14568e433f560d64dd5da5ed7c2..a531e556020049db3b9364b9c4c87b6dc86f1e11 100644 (file)
@@ -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;
index 8db789d2e4c5e68ff88f762cd046884a34670e9b..40422dfa61bcb1f07a6b56df25a6c4a20aa88290 100644 (file)
@@ -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);
 }
 
 /*
index a7b6c9bc7f7bfbd55251fe16057333b59626fd22..95682e641c6fb3517d670caf1279c811797c436a 100644 (file)
@@ -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);