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



On Thu, Jan 06, 2005 at 07:10:28PM +0100, Wolfgang Wegner wrote:
> On Thu, Jan 06, 2005 at 02:03:49PM +0100, emard@softhome.net wrote:
> > Should       if (!ccok || dc_i) 
> > be actually  if (!ccok && dc_i) ?
> 
> IMO it should be something like
> if (!ccok && !dc_i)
> because dc_i signals a discontinuity introduced by the transmitting
> multiplexer, such that the assumption of data being lost does not
> hold for this case.
> However, if I understand ISO13818-1 correctly, one should also
> have a look at wether the packet belongs to a PID carrying PCR or
> not.

ISO13818-1 is somewhat hard to understand ;-(
But: dc_i for section data is handled differently from
dc_i for PCR (ISO13818-1 makes a clear distinction). In
the section filter code the adaptation fields are stripped,
so we can't and won't handle PCR there.

My understanding of dc_i for sections is to mark a splice point,
i.e. stuff before packet with dc_i has nothing to do with
stuff after packet with dc_i (think "cat movie1.ts movie2.ts >new.ts").
dc_i here serves the purpose to make sure we recognize the
discontinuity, even if by chance the cc is continous (probability 1/16).
-> if (!ccok || dc_i)

BTW, the case where this matters is for playout of data/object
carousels via a TS multiplexer that does not adjust the cc. Every time
the carousel is repeated there is a discontinuity, and if we fail to
handle it corrrectly, the first section of the carousel is always lost
(when the carousel happens to have the "wrong" length), meaning that we
cannot retrieve the carousel at all.
For normal PSI/SI data the dc_i is pretty much irrelevant.

Johannes




Home | Main Index | Thread Index