From cee904bf522eacf856d149d4919992294e6d2a28 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Thu, 28 Nov 2013 10:47:42 +0000 Subject: [PATCH] mpegts: ensure PMT PID is stored and that on update service restarts --- src/input/mpegts/dvb_psi.c | 12 ++++++++---- src/service.c | 5 +++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index 90f79ba5..2b48b92c 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -187,7 +187,7 @@ dvb_desc_cable_del dvb_mux_conf_t dmc; static const fe_modulation_t qtab [6] = { - QAM_AUTO, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256 + QAM_AUTO, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256 }; /* Not enough data */ @@ -576,6 +576,7 @@ dvb_pat_callback uint16_t nit_pid = 0; mpegts_mux_t *mm = mt->mt_mux; mpegts_table_state_t *st = NULL; + mpegts_service_t *s; /* Begin */ if (tableid != 0) return -1; @@ -606,10 +607,13 @@ dvb_pat_callback } else if (pid) { tvhdebug("pat", " sid %04X (%d) on pid %04X (%d)", sid, sid, pid, pid); int save = 0; - if (mpegts_service_find(mm, sid, pid, 1, &save)) { + if ((s = mpegts_service_find(mm, sid, pid, 1, &save))) { mpegts_table_add(mm, DVB_PMT_BASE, DVB_PMT_MASK, dvb_pmt_callback, NULL, "pmt", MT_CRC | MT_QUICKREQ | MT_RECORD, pid); - } + + if (save) + service_request_save((service_t*)s, 1); + } } /* Next */ @@ -1428,7 +1432,7 @@ psi_parse_pmt case DVB_DESC_LANGUAGE: lang = lang_code_get2((const char*)ptr, 3); audio_type = ptr[3]; - break; + break; case DVB_DESC_TELETEXT: if(estype == 0x06) diff --git a/src/service.c b/src/service.c index f8345a11..81ccf77c 100644 --- a/src/service.c +++ b/src/service.c @@ -886,7 +886,6 @@ service_build_stream_start(service_t *t) if (idnode_is_instance(&t->s_id, &mpegts_service_class)) { mpegts_service_t *ts = (mpegts_service_t*)t; ss->ss_service_id = ts->s_dvb_service_id; - fprintf(stderr,"Streaming service %d, PMT PID is %d\n",ss->ss_service_id,ss->ss_pmt_pid); } return ss; } @@ -1281,6 +1280,7 @@ void service_save ( service_t *t, htsmsg_t *m ) idnode_save(&t->s_id, m); htsmsg_add_u32(m, "pcr", t->s_pcr_pid); + htsmsg_add_u32(m, "pmt", t->s_pmt_pid); pthread_mutex_lock(&t->s_stream_mutex); @@ -1448,7 +1448,8 @@ void service_load ( service_t *t, htsmsg_t *c ) if(!htsmsg_get_u32(c, "pcr", &u32)) t->s_pcr_pid = u32; - + if(!htsmsg_get_u32(c, "pmt", &u32)) + t->s_pmt_pid = u32; pthread_mutex_lock(&t->s_stream_mutex); m = htsmsg_get_list(c, "stream");