On Thu, Sep 22, 2005 Mark Adams wrote: > There is a bug in dvb-core which causes large MPEG sections to be lost > when they follow very small sections. > > The problem happens when two sections begin in the same transport > packet. The dvb_demux code resets its buffer only before the first of > these sections. This means that when the second (or subsequent) > section begins, there is up to 182 bytes of buffer space already used. > If the following section is close to the maximum size, it currently > won't fit in the (4096-byte) buffer and is thrown away. > > The fix is simply to enlarge the buffer by the size of one transport > packet and correct one usage of the SECFEED_SIZE definition where what > is really meant is the maximum size of a section. I finally comitted your patch to CVS. Many thanks, Johannes > --- demux.h.orig 2005-03-02 07:37:55.000000000 +0000 > +++ demux.h 2005-09-21 18:41:10.000000000 +0100 > @@ -47,8 +47,11 @@ > * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private > section feed filter. > */ > > +#ifndef DMX_MAX_SECTION_SIZE > +#define DMX_MAX_SECTION_SIZE 4096 > +#endif > #ifndef DMX_MAX_SECFEED_SIZE > -#define DMX_MAX_SECFEED_SIZE 4096 > +#define DMX_MAX_SECFEED_SIZE (DMX_MAX_SECTION_SIZE+188) > #endif > > > --- dvb_demux.c.orig 2005-03-02 07:37:49.000000000 +0000 > +++ dvb_demux.c 2005-09-21 18:42:25.000000000 +0100 > @@ -302,7 +302,7 @@ static int dvb_dmx_swfilter_section_copy > for(n = 0; sec->secbufp + 2 < limit; n++) > { > seclen = section_length(sec->secbuf); > - if(seclen <= 0 || seclen > DMX_MAX_SECFEED_SIZE > + if(seclen <= 0 || seclen > DMX_MAX_SECTION_SIZE > || seclen + sec->secbufp > limit) > return 0; > sec->seclen = seclen; > > Signed-off-by: Mark Adams <mark147m@xxxxxxxxx> > > Regards, > > Mark > > _______________________________________________ > > linux-dvb@xxxxxxxxxxx > http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb >