/* Multiplex */
tvhdebug("pat", "tsid %04X (%d)", tsid, tsid);
+ if (mm->mm_tsid && mm->mm_tsid != tsid) {
+ char buf[256];
+ if (++mm->mm_tsid_checks > 10) {
+ mpegts_mux_nice_name(mm, buf, sizeof(buf));
+ tvhwarn("pat", "%s: TSID change detected - old %04x (%d), new %04x (%d)",
+ buf, mm->mm_tsid, mm->mm_tsid, tsid, tsid);
+ mm->mm_tsid_checks = 0;
+ } else {
+ if (tvhtrace_enabled()) {
+ mpegts_mux_nice_name(mm, buf, sizeof(buf));
+ tvhtrace("pat", "%s: ignore TSID - old %04x (%d), new %04x (%d)",
+ buf, mm->mm_tsid, mm->mm_tsid, tsid, tsid);
+ }
+ return 0; /* keep rolling */
+ }
+ } else {
+ mm->mm_tsid_checks = 0;
+ }
mpegts_mux_set_tsid(mm, tsid, 1);
/* Process each programme */
/* Find Transport Stream */
if (tableid == 0x42) {
+ if (mm->mm_tsid != tsid) return 0; /* keep rolling - perhaps PAT was not parsed yet */
mpegts_mux_set_onid(mm, onid);
- mpegts_mux_set_tsid(mm, tsid, 1);
r = dvb_sdt_mux(mt, mm, mm, ptr, len, tableid);
if (r)
return r;
LIST_FOREACH(s, &mm->mm_services, s_dvb_mux_link)
s->s_dvb_check_seen = s->s_dvb_last_seen;
+ mm->mm_tsid_checks = 0;
+
/* Start */
mi->mi_display_name(mi, buf2, sizeof(buf2));
tvhinfo("mpegts", "%s - tuning on %s", buf, buf2);
int
mpegts_mux_set_onid ( mpegts_mux_t *mm, uint16_t onid )
{
- char buf[256];
if (onid == mm->mm_onid)
return 0;
mm->mm_onid = onid;
- mpegts_mux_nice_name(mm, buf, sizeof(buf));
+ if (tvhtrace_enabled()) {
+ char buf[256];
+ mpegts_mux_nice_name(mm, buf, sizeof(buf));
+ tvhtrace("mpegts", "%s - set onid %04X (%d)", buf, onid, onid);
+ }
idnode_changed(&mm->mm_id);
return 1;
}