From: Jaroslav Kysela Date: Wed, 14 May 2014 09:08:17 +0000 (+0200) Subject: Do not trust tsid in the NIT mux delivery descriptor X-Git-Tag: v4.1~2096 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7d08ccdcc98c343afeea2bb466bf43bfee816616;p=thirdparty%2Ftvheadend.git Do not trust tsid in the NIT mux delivery descriptor 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. --- diff --git a/src/input/mpegts.h b/src/input/mpegts.h index 37a62b2f2..466018166 100644 --- a/src/input/mpegts.h +++ b/src/input/mpegts.h @@ -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 ); diff --git a/src/input/mpegts/dvb_psi.c b/src/input/mpegts/dvb_psi.c index 81b3f3a93..1155ec2cd 100644 --- a/src/input/mpegts/dvb_psi.c +++ b/src/input/mpegts/dvb_psi.c @@ -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) diff --git a/src/input/mpegts/mpegts_mux.c b/src/input/mpegts/mpegts_mux.c index 3358fa82f..3a012c14a 100644 --- a/src/input/mpegts/mpegts_mux.c +++ b/src/input/mpegts/mpegts_mux.c @@ -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);