Allan Stirling wrote: > Allan Stirling wrote: > >> dvbsnoop gives me the following: >> ------------------------------------------------------------ >> SECT-Packet: 00000001 PID: 0 (0x0000), Length: 44 (0x002c) >> Time received: Thu 2005-06-23 22:20:09.035 >> ------------------------------------------------------------ >> 0000: 00 b0 29 07 ee e3 00 00 00 00 e0 10 11 39 e1 01 >> ..)..........9.. >> 0010: 11 fa e1 07 11 fb e1 09 12 5f e1 04 12 c2 e1 0c >> ........._...... >> 0020: 12 c9 e1 0b 13 2a e1 0a 24 a9 24 84 .....*..$.$. >> >> PID: 0 (0x0000) [= assigned for: ISO 13818-1 Program Association >> Table (PAT)] >> Guess table from table id... >> PAT-decoding.... >> Table_ID: 0 (0x00) [= Program Association Table (PAT)] >> section_syntax_indicator: 1 (0x01) >> (fixed): 0 (0x00) >> reserved_1: 3 (0x03) >> Section_length: 41 (0x0029) >> Transport_Stream_ID: 2030 (0x07ee) >> reserved_2: 3 (0x03) >> Version_number: 17 (0x11) >> current_next_indicator: 1 (0x01) [= valid now] >> Section_number: 0 (0x00) >> Last_Section_number: 0 (0x00) >> >> Program_number: 0 (0x0000) >> reserved: 7 (0x07) >> Network_PID: 16 (0x0010) >> >> Program_number: 4409 (0x1139) >> reserved: 7 (0x07) >> Program_map_PID: 257 (0x0101) >> >> Program_number: 4602 (0x11fa) >> reserved: 7 (0x07) >> Program_map_PID: 263 (0x0107) >> >> Program_number: 4603 (0x11fb) >> reserved: 7 (0x07) >> Program_map_PID: 265 (0x0109) >> >> Program_number: 4703 (0x125f) >> reserved: 7 (0x07) >> Program_map_PID: 260 (0x0104) >> >> Program_number: 4802 (0x12c2) >> reserved: 7 (0x07) >> Program_map_PID: 268 (0x010c) >> >> Program_number: 4809 (0x12c9) >> reserved: 7 (0x07) >> Program_map_PID: 267 (0x010b) >> >> Program_number: 4906 (0x132a) >> reserved: 7 (0x07) >> Program_map_PID: 266 (0x010a) >> >> Where you can clearly see that 4703 is listed, with a PID of 260. I >> think there must be something wrong in the PAT parsing, since I get >> the following with a slightly modified ca_zap: >> >> parse_pat: PAT => Section Length=[41], TS ID=[12270] >> service_id: 4703 >> program_number: 176 PID: 2311 >> program_number: 61155 PID: 0 >> program_number: 12288 PID: 16 >> program_number: 65337 PID: 7937 >> program_number: 65530 PID: 7943 >> program_number: 4603 PID: 265 >> program_number: 15967 PID: 260 >> program_number: 65474 PID: 7948 >> program_number: 4809 PID: 267 >> program_number: 4906 PID: 266 >> >> As you can see, some of the program_numbers as well as some of the >> PIDs are correct, but some are not. This is repeatable between runs. >> >> The TS ID is also different. I'm just about to try hardcoding the PID >> as Manu originally suggested. >> > Okay. That gets me more output, but I don't think it's good. > > parse_sat_channel_list: Channel=[Sky One], Frequency=[12285], > Satellite=[0], Symbol Rate=[27500], Video=[513], Audio=[641], > Service=[4703] > Service ID=[4703] > parse_pat: ----------------->parse PAT section > parse_pat: PAT => Section Length=[41], TS ID=[12270] > service_id: 4703 > program_number: 176 PID: 2311 > program_number: 61155 PID: 0 > program_number: 12288 PID: 16 > program_number: 65337 PID: 7937 > program_number: 65530 PID: 7943 > program_number: 4603 PID: 265 > program_number: 15967 PID: 260 > parse_si: PMT PID = [260] > program_number: 65474 PID: 7948 > program_number: 4809 PID: 267 > program_number: 4906 PID: 266 > parse_si: PAT: Close Demux /dev/dvb/adapter3/demux0 > parse_pmt: PMT Words=[ 02 b2 f5 12 5f c9 00 00 ff fe f0 13 0c 04 80 b4 > 81 68 0e 03 c5 df bb 10 06 c5 df bb c0 08 00 02 e2 01 f0 1c 02 03 1a > 48 5f 09 04 09 60 e5 00 09 04 09 61 e5 00 52 01 01 0e 03 c0 4f f0 06 > 01 02 04 e2 81 f0 1d 03 01 67 09 04 09 60 e5 00 09 04 09 61 e5 00 0a > 04 65 6e 67 00 52 01 81 0e 03 c0 02 0a 04 e2 95 f0 1d 03 01 67 09 04 > 09 60 e5 00 09 04 09 61 e5 00 0a 04 4e 41 52 00 52 01 95 0e 03 c0 02 > 0a 06 e2 40 f0 0f 56 05 65 6e 67 09 00 52 01 40 0e 03 c0 01 78 06 e2 > 41 f0 0f 56 05 65 6e 67 10 88 52 01 41 0e 03 c0 00 bc 05 e9 80 f0 17 > 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 45 54 30 31 52 01 5a > 05 e9 81 f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 45 54 > 30 32 52 01 5b 05 e9 82 f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 > 90 fe 04 45 54 30 33 52 01 5c 05 e9 83 f0 17 0e 03 c0 46 d8 0f 04 4f > 54 56 00 90 01 90 fe 04 57 54 53 33 52 01 0f 05 e9 84 f0 17 0e 03 c0 > 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 45 54 30 34 52 01 5d 05 e9 85 > f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 45 54 30 35 52 > 01 5e 05 e9 86 f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 > 45 54 30 36 52 01 5f 05 e9 87 f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 > 90 01 90 fe 04 45 54 30 37 52 01 60 05 e9 88 f0 17 0e 03 c0 46 d8 0f > 04 4f 54 56 00 90 01 90 fe 04 45 54 30 38 52 01 61 05 e9 89 f0 17 0e > 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 45 54 30 39 52 01 62 05 > e9 8a f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 57 49 41 > 31 52 01 7e 05 e9 8b f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 > fe 04 57 49 41 32 52 01 7f 05 e9 8c f0 17 0e 03 c0 46 d8 0f 04 4f 54 > 56 00 90 01 90 fe 04 57 49 41 33 52 01 80 05 e9 8d f0 17 0e 03 c0 46 > d8 0f 04 4f 54 56 00 90 01 90 fe 04 57 54 56 43 52 01 c9 05 e9 8e f0 > 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 57 54 56 30 52 01 > ca 05 ec 01 f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 54 > 58 54 00 52 01 3a 05 ec 02 f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 > 01 90 fe 04 54 58 54 01 52 01 3b 05 ec 03 f0 17 0e 03 c0 46 d8 0f 04 > 4f 54 56 00 90 01 90 fe 04 54 58 54 02 52 01 3c 05 ec 04 f0 17 0e 03 > c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 54 58 54 03 52 01 3d 05 e9 > 93 f0 17 0e 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 49 53 4d 00 > 52 01 f7 05 e4 06 f0 13 5f 04 4f 54 56 00 90 01 9d fe 04 54 47 54 00 > 66 02 01 07 5c fc 4f 1d ] > > parse_pmt: ----------->parse PMT section, PMT PID=[260], bytes=[760] > parse_pmt_header: Table ID=[2], Section Length=[757], Program > Number=[4703], Section Number=[0], PCR PID=[8190], Program info > length=[19] > parse_pmt: Program info length=[19] > parse_pmt: Count=[16], Position=[16], Program descriptor count=[19] > parse_pmt: Count=[137], Position=[120], Program descriptor count=[19] > > parse_streams: Elements=[ 4e 41 52 00 52 01 95 0e 03 c0 02 0a > 06 e2 40 f0 0f 56 05 65 6e 67 09 00 52 01 40 0e 03 c0 01 78 06 e2 41 > f0 0f 56 05 65 6e 67 10 88 52 01 41 0e 03 c0 00 bc 05 e9 80 f0 17 0e > 03 c0 46 d8 0f 04 4f 54 56 00 90 01 90 fe 04 45 54 30 31 52 01 5a 05 > e9 81 f0 17 0e 03] > parse_streams: Stream=[0], Stream Type=[78], Elementary > PID=[338], ES info length=[82] > > Cheers, > > Allan. From pat.c: static uint16_t parse_descriptor(struct program_descriptor *p_program_descriptor, uint8_t *buf, uint16_t pos) { p_program_descriptor->program_number = ((p_program_descriptor->program_number | buf[pos + 0]) << 8) | buf[pos + 1]; Doesn't look quite right. Why do we care what the program_number is before it's been parsed? If I change this to p_program_descriptor->program_number = ( buf[pos + 0] << 8) | buf[pos + 1]; Then the table comes out mostly fine. There's a couple of program_numbers at the beginning that look like 'noise' however... I think the offset of the start of the programs in the PAT may somehow be wrong. parse_pat: PAT => Section Length=[41], TS ID=[12270] service_id: 4703 program_number: 176 PID: 2311 program_number: 61155 PID: 0 program_number: 0 PID: 16 program_number: 4409 PID: 7937 program_number: 4602 PID: 7943 program_number: 4603 PID: 265 program_number: 4703 PID: 260 parse_si: PMT PID = [260] program_number: 4802 PID: 7948 program_number: 4809 PID: 267 program_number: 4906 PID: 266 Cheers, Allan.