From 11a753d2412b7b2c69a3c030ae3105ea8533a9e8 Mon Sep 17 00:00:00 2001 From: Johannes Stezenbach Date: Thu, 9 Oct 2003 12:13:49 +0000 Subject: dvb_dmx_swfilter_section_feed: check CRC only when section_syntax_indicator is set (to match hardware demux behaviour) --- linux/drivers/media/dvb/dvb-core/dvb_demux.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'linux/drivers') diff --git a/linux/drivers/media/dvb/dvb-core/dvb_demux.c b/linux/drivers/media/dvb/dvb-core/dvb_demux.c index 586a88f5b..29108599d 100644 --- a/linux/drivers/media/dvb/dvb-core/dvb_demux.c +++ b/linux/drivers/media/dvb/dvb-core/dvb_demux.c @@ -190,6 +190,7 @@ static inline int dvb_dmx_swfilter_section_feed (struct dvb_demux_feed *feed) struct dvb_demux_filter *f = feed->filter; struct dmx_section_feed *sec = &feed->feed.sec; u8 *buf = sec->secbuf; + int section_syntax_indicator; if (sec->secbufp != sec->seclen) return -1; @@ -200,8 +201,12 @@ static inline int dvb_dmx_swfilter_section_feed (struct dvb_demux_feed *feed) if (!f) return 0; - if (sec->check_crc && demux->check_crc32(feed, sec->secbuf, sec->seclen)) - return -1; + if (sec->check_crc) { + section_syntax_indicator = ((sec->secbuf[1] & 0x80) != 0); + if (section_syntax_indicator && + demux->check_crc32(feed, sec->secbuf, sec->seclen)) + return -1; + } do { if (dvb_dmx_swfilter_sectionfilter(feed, f) < 0) -- cgit v1.2.3