]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts: add callback in input for creating instances
authorAdam Sutton <dev@adamsutton.me.uk>
Thu, 13 Jun 2013 21:43:55 +0000 (22:43 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Fri, 14 Jun 2013 16:35:26 +0000 (17:35 +0100)
This will be necessary for DVB-S where we will have a slightly
strange arragement as the satconf will be the primary input and will
be backed by multiple frontends.

src/input/mpegts.h
src/input/mpegts/linuxdvb/linuxdvb_mux.c
src/input/mpegts/mpegts_input.c

index 9540df7840f369aa7e31d89d3ff57727803037db..c991517a60b5d58f70176dd45d168087d5b7ef21 100644 (file)
@@ -392,6 +392,7 @@ struct mpegts_input
   void (*mi_stop_mux)       (mpegts_input_t*,mpegts_mux_instance_t*);
   void (*mi_open_service)   (mpegts_input_t*,mpegts_service_t*);
   void (*mi_close_service)  (mpegts_input_t*,mpegts_service_t*);
+  void (*mi_create_mux_instance) (mpegts_input_t*,mpegts_mux_t*);
   const idclass_t *(*mi_network_class) (mpegts_input_t *mi);
   mpegts_network_t *(*mi_network_create) (mpegts_input_t *mi, htsmsg_t *c);
 };
index ca61727cdff994f3bb069f218a14c72dc6f24fc6..ce15307f93fa4d582e6b1549e041d21407980b34 100644 (file)
@@ -330,16 +330,9 @@ linuxdvb_mux_display_name ( mpegts_mux_t *mm, char *buf, size_t len )
 static void
 linuxdvb_mux_create_instances ( mpegts_mux_t *mm )
 {
-  extern const idclass_t mpegts_mux_instance_class;
   mpegts_input_t *mi;
-  mpegts_mux_instance_t *mmi;
-  LIST_FOREACH(mi, &mm->mm_network->mn_inputs, mi_network_link) {
-    LIST_FOREACH(mmi, &mi->mi_mux_instances, mmi_input_link)
-      if (mmi->mmi_mux == mm) break;
-    if (!mmi)
-      mmi = mpegts_mux_instance_create(mpegts_mux_instance, NULL, mi, mm);
-    // TODO: we might eventually want to keep history!
-  }
+  LIST_FOREACH(mi, &mm->mm_network->mn_inputs, mi_network_link)
+    mi->mi_create_mux_instance(mi, mm);
 }
 
 static void
index 446d48ccac565c06ca0b884838b76a7cdbafbac0..71fa4ca884bd793855b5d698482e23c6bf91a2aa 100644 (file)
@@ -152,6 +152,18 @@ mpegts_input_close_service ( mpegts_input_t *mi, mpegts_service_t *s )
 {
 }
 
+static void
+mpegts_input_create_mux_instance
+  ( mpegts_input_t *mi, mpegts_mux_t *mm )
+{
+  extern const idclass_t mpegts_mux_instance_class;
+  mpegts_mux_instance_t *mmi;
+  LIST_FOREACH(mmi, &mi->mi_mux_instances, mmi_input_link)
+    if (mmi->mmi_mux == mm) break;
+  if (!mmi)
+    (void)mpegts_mux_instance_create(mpegts_mux_instance, NULL, mi, mm);
+}
+
 /* **************************************************************************
  * Data processing
  * *************************************************************************/
@@ -312,16 +324,17 @@ mpegts_input_create0
     idnode_load(&mi->mi_id, c);
   
   /* Defaults */
-  mi->mi_is_enabled     = mpegts_input_is_enabled;
-  mi->mi_display_name   = mpegts_input_display_name;
-  mi->mi_is_free        = mpegts_input_is_free;
-  mi->mi_current_weight = mpegts_input_current_weight;
-  mi->mi_start_mux      = mpegts_input_start_mux;
-  mi->mi_stop_mux       = mpegts_input_stop_mux;
-  mi->mi_open_service   = mpegts_input_open_service;
-  mi->mi_close_service  = mpegts_input_close_service;
-  mi->mi_network_class  = mpegts_input_network_class;
-  mi->mi_network_create = mpegts_input_network_create;
+  mi->mi_is_enabled           = mpegts_input_is_enabled;
+  mi->mi_display_name         = mpegts_input_display_name;
+  mi->mi_is_free              = mpegts_input_is_free;
+  mi->mi_current_weight       = mpegts_input_current_weight;
+  mi->mi_start_mux            = mpegts_input_start_mux;
+  mi->mi_stop_mux             = mpegts_input_stop_mux;
+  mi->mi_open_service         = mpegts_input_open_service;
+  mi->mi_close_service        = mpegts_input_close_service;
+  mi->mi_network_class        = mpegts_input_network_class;
+  mi->mi_network_create       = mpegts_input_network_create;
+  mi->mi_create_mux_instance  = mpegts_input_create_mux_instance;
 
   /* Index */
   mi->mi_instance       = ++mpegts_input_idx;