mpegts: sorted some mistakes in mux tuning and also service enumeration

Added automatic mpegts_input instance numbering as required for service
enumeration.
This commit is contained in:
Adam Sutton 2013-06-08 12:53:10 +01:00
parent 2222362f66
commit 9ba1b55db4
3 changed files with 20 additions and 9 deletions

View file

@ -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);

View file

@ -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 */

View file

@ -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);