diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index f1c170d3..83687b21 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -178,8 +178,9 @@ mpegts_mux_open_table ( mpegts_mux_t *mm, mpegts_table_t *mt ) { if (mt->mt_pid >= 0x2000) return; + if (!mm->mm_table_filter[mt->mt_pid]) + printf("table opened %04X\n", mt->mt_pid); mm->mm_table_filter[mt->mt_pid] = 1; - printf("table opened %04X\n", mt->mt_pid); } static void @@ -188,6 +189,7 @@ mpegts_mux_close_table ( mpegts_mux_t *mm, mpegts_table_t *mt ) if (mt->mt_pid >= 0x2000) return; mm->mm_table_filter[mt->mt_pid] = 0; + printf("table closed %04X\n", mt->mt_pid); } mpegts_mux_t * diff --git a/src/input/mpegts/mpegts_service.c b/src/input/mpegts/mpegts_service.c index 62f06118..045e6ffa 100644 --- a/src/input/mpegts/mpegts_service.c +++ b/src/input/mpegts/mpegts_service.c @@ -211,7 +211,8 @@ mpegts_service_create0 ( size_t alloc, const idclass_t *class, const char *uuid, mpegts_mux_t *mm, uint16_t sid, uint16_t pmt_pid ) { - mpegts_service_t *s = (mpegts_service_t*)idnode_create0(alloc, class, uuid); + mpegts_service_t *s = (mpegts_service_t*)service_create0(alloc, uuid, class, S_MPEG_TS); + printf("mpegts_service_create0 = %p\n", s); /* Create */ tvhlog(LOG_DEBUG, "mpegts", "Add service %04X on %s", sid, "TODO"); @@ -255,7 +256,7 @@ mpegts_service_find lock_assert(&global_lock); /* Find existing service */ - LIST_FOREACH(s, &mm->mm_services, s_dvb_mux_link) + LIST_FOREACH(s, &mm->mm_services, s_dvb_mux_link) { if (s->s_dvb_service_id == sid) { if (pmt_pid && pmt_pid != s->s_pmt_pid) { s->s_pmt_pid = pmt_pid; @@ -263,6 +264,7 @@ mpegts_service_find } return s; } + } /* Ignore */ if (!pmt_pid) diff --git a/src/input/mpegts/psi.c b/src/input/mpegts/psi.c index 0aaa257b..3219e7e0 100644 --- a/src/input/mpegts/psi.c +++ b/src/input/mpegts/psi.c @@ -81,10 +81,10 @@ psi_pat_callback } else if (pid) { int save = 0; tvhtrace("pat", "SID %04X (%d) on PID %04X (%d)", sid, sid, pid, pid); - mpegts_service_find(mm, sid, pid, NULL, &save); - // TODO: option to disable PMT monitor - //if (save) - psi_table_add_pmt(mm, pid); + if (mpegts_service_find(mm, sid, pid, NULL, &save)) + if (save) + psi_table_add_pmt(mm, pid); + // TODO: make PMT monitoring optional } /* Next */ diff --git a/src/service.c b/src/service.c index 02529952..bb9e16bd 100644 --- a/src/service.c +++ b/src/service.c @@ -483,7 +483,8 @@ service_destroy(service_t *t) service_t * service_create0(size_t alloc, const char *uuid, const idclass_t *idc, int source_type) { - service_t *t = calloc(1, alloc); + service_t *t = (service_t*)idnode_create0(alloc, idc, uuid); +printf("service_create0 = %p\n", t); lock_assert(&global_lock); @@ -503,8 +504,6 @@ service_create0(size_t alloc, const char *uuid, const idclass_t *idc, int source streaming_pad_init(&t->s_streaming_pad); - idnode_insert(&t->s_id, uuid, idc); - return t; }