From: Jaroslav Kysela Date: Wed, 20 Mar 2019 13:45:08 +0000 (+0100) Subject: linuxdvb: create the mux instances also for the slave tuners, issue #5128 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=937a5fb78552f067f889279a7c20a418c39e283e;p=thirdparty%2Ftvheadend.git linuxdvb: create the mux instances also for the slave tuners, issue #5128 --- diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 9636dbaa5..7eae6216b 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -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 diff --git a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c index 19aa2fcc7..a7c38b516 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_frontend.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_frontend.c @@ -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; diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index 0bb4c22df..bebb1de29 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -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