]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts: ensure PMT PID is stored and that on update service restarts
authorAdam Sutton <dev@adamsutton.me.uk>
Thu, 28 Nov 2013 10:47:42 +0000 (10:47 +0000)
committerAdam Sutton <dev@adamsutton.me.uk>
Sun, 1 Dec 2013 00:11:17 +0000 (00:11 +0000)
src/input/mpegts/dvb_psi.c
src/service.c

index 90f79ba590ea2523820d8862ed1c9ca2c969f9a2..2b48b92c8c362329eb42cd66b93a708103867eaa 100644 (file)
@@ -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)
index f8345a1125e92a7b0102f7004a70d58b4be3684a..81ccf77ce642ce60669e124a3a603129c244a2af 100644 (file)
@@ -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");