Hello, In PAT are found several services identified by service_id and associated with PMT referenced by one pid.
Several PMT could be transported on same pid : scan.c tool doesn't take care of that point (see attached patch for linux DVB drivers 1.0.1). PMT filtering for a service must contain tid_ext = service_id. See problem with TS on Astra-19.2E (S 12207000 V 27500000 3/4): pid 0x0512 transports several PMTs. VDR 1.3.x have same problem with autopid feature, but it's more complex to resolve. Stephane PS: This rule must be followed for all DVB tables (NIT, EIT...). In fact, tid_ext could be important.
155c155 < int pid, int tid, int run_once, int segmented, int timeout); --- > int pid, int tid, int tid_ext, int run_once, int segmented, int timeout); 632c632 < s->pmt_pid, 0x02, 1, 0, 5); --- > s->pmt_pid, 0x02, s->service_id, 1, 0, 5); 1006c1006 < int pid, int tid, int run_once, int segmented, int timeout) --- > int pid, int tid, int tid_ext, int run_once, int segmented, int timeout) 1023c1023 < s->table_id_ext = -1; --- > s->table_id_ext = tid_ext; 1075a1076,1082 > if (s->table_id_ext < 0x10000 && s->table_id_ext > 0) { > f.filter.filter[1] = (uint8_t) ((s->table_id_ext >> 8) & 0xff); > f.filter.filter[2] = (uint8_t) (s->table_id_ext & 0xff); > f.filter.mask[1] = 0xff; > f.filter.mask[2] = 0xff; > } > 1475,1476c1482,1483 < setup_filter (&s0, demux_devname, 0x00, 0x00, 1, 0, 5); /* PAT */ < setup_filter (&s1, demux_devname, 0x11, 0x42, 1, 0, 5); /* SDT */ --- > setup_filter (&s0, demux_devname, 0x00, 0x00, -1, 1, 0, 5); /* PAT */ > setup_filter (&s1, demux_devname, 0x11, 0x42, -1, 1, 0, 5); /* SDT */ 1482c1489 < setup_filter (&s2, demux_devname, 0x10, 0x40, 1, 0, 15); /* NIT */ --- > setup_filter (&s2, demux_devname, 0x10, 0x40, -1, 1, 0, 15); /* NIT */ 1489c1496 < setup_filter (&s3, demux_devname, 0x10, 0x41, 1, 1, 15); --- > setup_filter (&s3, demux_devname, 0x10, 0x41, -1, 1, 1, 15);