Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] Re: Bug in software demux still in 2.6.10



HI

I tested this, (and slightly modified it to enable logging
of ununsed data if any)

From my tests it seems to work (don't know if it fixes your
issue but at least it doesn't loose data).

Please try this patch v3

Emard
--- dvb_demux.c.orig	2005-01-04 15:08:45.000000000 +0100
+++ dvb_demux.c	2005-01-04 19:31:04.000000000 +0100
@@ -251,7 +251,7 @@ static void dvb_dmx_swfilter_section_new
 /* 
 ** Losless Section Demux 1.4 by Emard
 */
-static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed, const u8 *buf, u8 len)
+static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed, const u8 *buf, u8 len, u8 use)
 {
 	struct dvb_demux *demux = feed->demux;
 	struct dmx_section_feed *sec = &feed->feed.sec;
@@ -295,7 +295,12 @@ static int dvb_dmx_swfilter_section_copy
 		sec->seclen = seclen;
 		sec->crc_val = ~0;
 		/* dump [secbuf .. secbuf+seclen) */
-		dvb_dmx_swfilter_section_feed(feed);
+		if(use)
+			dvb_dmx_swfilter_section_feed(feed);
+#ifdef DVB_DEMUX_SECTION_LOSS_LOG
+		else
+			printk("dvb_demux.c unused section data\n");
+#endif
 		sec->secbufp += seclen; /* secbufp and secbuf moving together is */
 		sec->secbuf += seclen; /* redundand but saves pointer arithmetic */
 	}
@@ -342,9 +347,10 @@ static int dvb_dmx_swfilter_section_pack
 			const u8 *after = before+before_len;
 			u8 after_len = count-1-before_len;
 
-			dvb_dmx_swfilter_section_copy_dump(feed, before, before_len);
+			dvb_dmx_swfilter_section_copy_dump(feed, before, before_len,
+			  feed->feed.sec.tsfeedp > 0 ? 1 : 0);
 			dvb_dmx_swfilter_section_new(feed);
-			dvb_dmx_swfilter_section_copy_dump(feed, after, after_len);
+			dvb_dmx_swfilter_section_copy_dump(feed, after, after_len, 1);
 		}
 #ifdef DVB_DEMUX_SECTION_LOSS_LOG
 		else
@@ -358,7 +364,8 @@ static int dvb_dmx_swfilter_section_pack
 		const u8 *entire = buf+p;
 		u8 entire_len = count;
 
-		dvb_dmx_swfilter_section_copy_dump(feed, entire, entire_len);
+		dvb_dmx_swfilter_section_copy_dump(feed, entire, entire_len,
+			feed->feed.sec.tsfeedp > 0 ? 1 : 0);
 	}
 	return 0;
 }

Home | Main Index | Thread Index