diff --git a/src/input/mpegts/mpegts_input.c b/src/input/mpegts/mpegts_input.c index b4649396..e6c6c067 100644 --- a/src/input/mpegts/mpegts_input.c +++ b/src/input/mpegts/mpegts_input.c @@ -294,6 +294,7 @@ mpegts_input_table_thread ( void *aux ) * Creation/Config * *************************************************************************/ +static int mpegts_input_idx = 0; mpegts_input_list_t mpegts_input_all; mpegts_input_t* @@ -317,6 +318,9 @@ mpegts_input_create0 mi->mi_network_class = mpegts_input_network_class; mi->mi_network_create = mpegts_input_network_create; + /* Index */ + mi->mi_instance = ++mpegts_input_idx; + /* Init mutex */ pthread_mutex_init(&mi->mi_delivery_mutex, NULL); diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index e8f9d5c9..dff577bd 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -76,7 +76,7 @@ mpegts_mux_instance_start ( mpegts_mux_instance_t **mmiptr ) mmi->mmi_input->mi_display_name(mmi->mmi_input, buf2, sizeof(buf2)); tvhinfo("mpegts", "%s - tuning on %s", buf, buf2); r = mmi->mmi_input->mi_start_mux(mmi->mmi_input, mmi); - if (!r) return r; + if (r) return r; /* Start */ tvhdebug("mpegts", "%s - started", buf); @@ -192,6 +192,7 @@ mpegts_mux_start ( mpegts_mux_t *mm, const char *reason, int weight ) pass = 0; mmi = NULL; while (pass < 2) { + tune = NULL; if (!mmi) mmi = LIST_FIRST(&mm->mm_instances); /* First pass - free only */ diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index abad1230..d32b1f96 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -80,19 +80,19 @@ mpegts_service_enlist(service_t *t, struct service_instance_list *sil) { mpegts_service_t *s = (mpegts_service_t*)t; mpegts_mux_t *m = s->s_dvb_mux; - mpegts_mux_instance_t *mi; + mpegts_mux_instance_t *mmi; assert(s->s_source_type == S_MPEG_TS); - LIST_FOREACH(mi, &m->mm_instances, mmi_mux_link) { - if (mi->mmi_tune_failed) + LIST_FOREACH(mmi, &m->mm_instances, mmi_mux_link) { + if (mmi->mmi_tune_failed) continue; - // TODO: check the instance is enabled - service_instance_add(sil, t, mi->mmi_input->mi_instance, - //TODO: fix below, - 100, 0); - //mpegts_mux_instance_weight(mi)); + if (!mmi->mmi_input->mi_is_enabled(mmi->mmi_input)) continue; + + service_instance_add(sil, t, mmi->mmi_input->mi_instance, + mmi->mmi_input->mi_current_weight(mmi->mmi_input), + 0/*TODO: priority */); } } @@ -206,6 +206,12 @@ mpegts_service_setsourceinfo(service_t *t, source_info_t *si) m->mm_display_name(m, buf, sizeof(buf)); si->si_mux = strdup(buf); + if(s->s_dvb_active_input) { + mpegts_input_t *mi = s->s_dvb_active_input; + mi->mi_display_name(mi, buf, sizeof(buf)); + si->si_adapter = strdup(buf); + } + if(s->s_dvb_provider != NULL) si->si_provider = strdup(s->s_dvb_provider);