]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
linuxdvb: create the mux instances also for the slave tuners, issue #5128
authorJaroslav Kysela <perex@perex.cz>
Wed, 20 Mar 2019 13:45:08 +0000 (14:45 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 20 Mar 2019 13:45:08 +0000 (14:45 +0100)
src/input/mpegts.h
src/input/mpegts/linuxdvb/linuxdvb_frontend.c
src/input/mpegts/mpegts_input.c

index 9636dbaa55071ab1879f63f94a6c6c96d148532f..7eae6216b3fdd12865126350cb267740b97c6e86 100644 (file)
@@ -984,6 +984,8 @@ mpegts_mux_find_pid(mpegts_mux_t *mm, int pid, int create)
 
 void mpegts_mux_update_pids ( mpegts_mux_t *mm );
 
+void mpegts_input_create_mux_instance ( mpegts_input_t *mi, mpegts_mux_t *mm );
+
 int mpegts_mux_compare ( mpegts_mux_t *a, mpegts_mux_t *b );
 
 void mpegts_input_recv_packets
index 19aa2fcc739aa9de9a9fa41bd4fe5b03290839fa..a7c38b516a28f4538d4e6e4f1d731422e89d0d9e 100644 (file)
@@ -817,6 +817,27 @@ linuxdvb_frontend_update_pids
     tvh_write(lfe->lfe_dvr_pipe.wr, "c", 1);
 }
 
+static void
+linuxdvb_frontend_create_mux_instance
+  ( mpegts_input_t *mi, mpegts_mux_t *mm )
+{
+  tvh_hardware_t *th;
+  linuxdvb_adapter_t *la;
+  linuxdvb_frontend_t *lfe = (linuxdvb_frontend_t *)mi, *lfe2;
+  char ubuf[UUID_HEX_SIZE];
+
+  idnode_uuid_as_str(&lfe->ti_id, ubuf);
+  mpegts_input_create_mux_instance(mi, mm);
+  /* create the instances for the slaves */
+  LIST_FOREACH(th, &tvh_hardware, th_link) {
+    if (!idnode_is_instance(&th->th_id, &linuxdvb_adapter_class)) continue;
+    la = (linuxdvb_adapter_t*)th;
+    LIST_FOREACH(lfe2, &la->la_frontends, lfe_link)
+      if (lfe2->lfe_master && strcmp(lfe2->lfe_master, ubuf) == 0)
+        mpegts_input_create_mux_instance((mpegts_input_t *)lfe2, mm);
+  }
+}
+
 static idnode_set_t *
 linuxdvb_frontend_network_list ( mpegts_input_t *mi )
 {
@@ -2195,16 +2216,17 @@ linuxdvb_frontend_create
   lfe->lfe_dvr_path = strdup(dvr_path);
 
   /* Input callbacks */
-  lfe->ti_wizard_get      = linuxdvb_frontend_wizard_get;
-  lfe->ti_wizard_set      = linuxdvb_frontend_wizard_set;
-  lfe->mi_is_enabled      = linuxdvb_frontend_is_enabled;
-  lfe->mi_warm_mux        = linuxdvb_frontend_warm_mux;
-  lfe->mi_start_mux       = linuxdvb_frontend_start_mux;
-  lfe->mi_stop_mux        = linuxdvb_frontend_stop_mux;
-  lfe->mi_network_list    = linuxdvb_frontend_network_list;
-  lfe->mi_update_pids     = linuxdvb_frontend_update_pids;
-  lfe->mi_enabled_updated = linuxdvb_frontend_enabled_updated;
-  lfe->mi_empty_status    = mpegts_input_empty_status;
+  lfe->ti_wizard_get          = linuxdvb_frontend_wizard_get;
+  lfe->ti_wizard_set          = linuxdvb_frontend_wizard_set;
+  lfe->mi_is_enabled          = linuxdvb_frontend_is_enabled;
+  lfe->mi_warm_mux            = linuxdvb_frontend_warm_mux;
+  lfe->mi_start_mux           = linuxdvb_frontend_start_mux;
+  lfe->mi_stop_mux            = linuxdvb_frontend_stop_mux;
+  lfe->mi_network_list        = linuxdvb_frontend_network_list;
+  lfe->mi_update_pids         = linuxdvb_frontend_update_pids;
+  lfe->mi_create_mux_instance = linuxdvb_frontend_create_mux_instance;
+  lfe->mi_enabled_updated     = linuxdvb_frontend_enabled_updated;
+  lfe->mi_empty_status        = mpegts_input_empty_status;
 
   /* Adapter link */
   lfe->lfe_adapter = la;
index 0bb4c22dfa52a267a63679c8cc4239c7a2337abc..bebb1de2948b2bf27f28ef6c9c667da1588e3a69 100644 (file)
@@ -962,7 +962,7 @@ no_pids:
   s->s_dvb_mux->mm_stop(s->s_dvb_mux, 0, SM_CODE_OK);
 }
 
-static void
+void
 mpegts_input_create_mux_instance
   ( mpegts_input_t *mi, mpegts_mux_t *mm )
 {
@@ -971,7 +971,7 @@ mpegts_input_create_mux_instance
   LIST_FOREACH(tii, &mi->mi_mux_instances, tii_input_link)
     if (((mpegts_mux_instance_t *)tii)->mmi_mux == mm) break;
   if (!tii)
-    (void)mpegts_mux_instance_create(mpegts_mux_instance, NULL, mi, mm);
+    mpegts_mux_instance_create(mpegts_mux_instance, NULL, mi, mm);
 }
 
 static void