On Thursday 10 Nov 2005 10:26, Mws wrote: > On Thursday 10 November 2005 10:25, Andrew de Quincey wrote: > > Hi, I was investigating the section demux code and I think spotted a > > bug... patch attached for review before I check it in: > > > > --- linux/drivers/media/dvb/dvb-core/dvb_demux.c 27 Oct 2005 > > 21:03:39 -0000 1.70 > > +++ linux/drivers/media/dvb/dvb-core/dvb_demux.c 10 Nov 2005 > > 09:22:35 -0000 > > @@ -118,7 +118,7 @@ > > int i; > > > > for (i = 0; i < DVB_DEMUX_MASK_MAX; i++) { > > - u8 xor = f->filter.filter_value[i] ^ > > feed->feed.sec.secbuf[i]; + u8 xor = > > f->filter.filter_value[i] ^ feed->feed.sec.secbuf[0]; > > > > if (f->maskandmode[i] & xor) > > return 0; > > > > I think its meant to be comparing the table ID of the section with the > > value in each of the possible filters - i.e. it should always read from > > secbuf[0]. > > > > _______________________________________________ > > > > linux-dvb@xxxxxxxxxxx > > http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb > > hi andrew, > > this is the normal check for have all of the filter values compared with > the actual section that is receveid. > > e.g. > filtering on pid 0011 > 42 00 02 01 00 00 00 85 00 00 00 00 00 00 00 00 > FF FF FF 01 00 00 FF FF 00 00 00 00 00 00 00 00 > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > > this is actually checking for > Table ID 42 SDT Actual Transport Stream > Transport Stream ID 0x0002 > currentNextIndicator 0x01 > and the ONID 0x0085 > > each of the filter values carries it's own Mask and negfilter value. > thus _each_ of these 16 values has to be compared within the loop, > if the wanted filter values do match. Ta - I'd always wondered exactly why there were 16 table id filters. It all makes perfect sense now. :)