From: Adam Sutton Date: Thu, 13 Jun 2013 21:43:55 +0000 (+0100) Subject: mpegts: add callback in input for creating instances X-Git-Tag: v3.9^2~112 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7eb0f700efe0ea2ed8cf98e1cdda5ddec20c9ebf;p=thirdparty%2Ftvheadend.git mpegts: add callback in input for creating instances 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. --- diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 9540df784..c991517a6 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -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); }; diff --git a/src/input/mpegts/linuxdvb/linuxdvb_mux.c b/src/input/mpegts/linuxdvb/linuxdvb_mux.c index ca61727cd..ce15307f9 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_mux.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_mux.c @@ -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 diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index 446d48cca..71fa4ca88 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -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;