]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Do not trust tsid in the NIT mux delivery descriptor
authorJaroslav Kysela <perex@perex.cz>
Wed, 14 May 2014 09:08:17 +0000 (11:08 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 14 May 2014 10:36:05 +0000 (12:36 +0200)
Reason:

 Thor 0.8W
   onid 1111 (4369) tsid 000B (11)
     dvb-s  pos 8W freq 12090000 H sym 280000 fec 7/8 mod QPSK roff 35
   onid 1111 (4369) tsid 0063 (99)
     dvb-s  pos 8W freq 12092000 H sym 280000 fec 7/8 mod QPSK roff 35

The frequency is same for DVB-S tuners, but tsid in other tables is 11.

src/input/mpegts.h
src/input/mpegts/dvb_psi.c
src/input/mpegts/mpegts_mux.c

index 37a62b2f2e910def6c9d758a17bd6f85edd2c958..4660181662f25ac641276961b2afe0c48aa95a24 100644 (file)
@@ -658,7 +658,7 @@ int mpegts_mux_instance_start
 
 int mpegts_mux_instance_weight ( mpegts_mux_instance_t *mmi );
 
-int mpegts_mux_set_tsid ( mpegts_mux_t *mm, uint16_t tsid );
+int mpegts_mux_set_tsid ( mpegts_mux_t *mm, uint16_t tsid, int force );
 int mpegts_mux_set_onid ( mpegts_mux_t *mm, uint16_t onid );
 int mpegts_mux_set_crid_authority ( mpegts_mux_t *mm, const char *defauth );
 
index 81b3f3a9348b957f9692e0e623e30b49a3b19500..1155ec2cd2cdcede6059db4b41004b79753f40ef 100644 (file)
@@ -573,7 +573,7 @@ dvb_pat_callback
 
   /* Multiplex */
   tvhdebug("pat", "tsid %04X (%d)", tsid, tsid);
-  mpegts_mux_set_tsid(mm, tsid);
+  mpegts_mux_set_tsid(mm, tsid, 1);
   
   /* Process each programme */
   ptr += 5;
@@ -835,7 +835,7 @@ dvb_nit_callback
             mux = dvb_desc_terr_del(mm, onid, tsid, dptr, dlen);
           if (mux) {
             mpegts_mux_set_onid(mux, onid);
-            mpegts_mux_set_tsid(mux, tsid);
+            mpegts_mux_set_tsid(mux, tsid, 0);
           }
           break;
         
@@ -893,7 +893,7 @@ dvb_sdt_callback
   /* Find Transport Stream */
   if (tableid == 0x42) {
     mpegts_mux_set_onid(mm, onid);
-    mpegts_mux_set_tsid(mm, tsid);
+    mpegts_mux_set_tsid(mm, tsid, 1);
   } else {
     LIST_FOREACH(mm, &mn->mn_muxes, mm_network_link)
       if (mm->mm_onid == onid && mm->mm_tsid == tsid)
index 3358fa82f6885ac07d3d2a70e787834094f3afcc..3a012c14a645428df53307fbc5b126ebbdd916a0 100644 (file)
@@ -821,11 +821,13 @@ mpegts_mux_set_onid ( mpegts_mux_t *mm, uint16_t onid )
 }
 
 int
-mpegts_mux_set_tsid ( mpegts_mux_t *mm, uint16_t tsid )
+mpegts_mux_set_tsid ( mpegts_mux_t *mm, uint16_t tsid, int force )
 {
   char buf[256];
   if (tsid == mm->mm_tsid)
     return 0;
+  if (!force && mm->mm_tsid)
+    return 0;
   mm->mm_tsid = tsid;
   mm->mm_display_name(mm, buf, sizeof(buf));
   mm->mm_config_save(mm);