[NUT-devel] Frame/Field problem

Rich Felker dalias at aerifal.cx
Wed Feb 20 17:43:35 CET 2008


On Wed, Feb 20, 2008 at 05:00:29PM +0100, Michael Niedermayer wrote:
> On Tue, Feb 19, 2008 at 11:51:40PM -0500, Rich Felker wrote:
> > On Wed, Feb 20, 2008 at 05:23:14AM +0100, Michael Niedermayer wrote:
> > > Hi
> > > 
> > > When we designed the pts->dts reorder algorithm we considered arbitrary
> > > frame reorderings, but there was something we missed, that are mixes of
> > > frame and field pictures, like:
> > > 
> > >     i1 p2 P3 p4 P5 p7 P8   (lower case is a field, upper is a frame)
> > > PTS 2  3  4  6  7  9  10
> > > DTS 0  1  2  4  5  7  8
> > > 
> > > As you can see no reordering of PTS can result in the DTS values.
> > 
> > I'm confused by this example. As there are no B frames, dts==pts is
> > just fine.
> 
> Fine in what respect? Certainly not fine in the respect of being a valid
> decoding timestamp for an mpeg2 decoder.

DTS in NUT was never designed to be able to meet odd additional
requirements beyond serving as a key for interleaving order. It
_works_ to use the dts as an actual time for decoding, but that
doesn't necessarily mean that doing so will meet more stringent
requirements on DTS from a particular codec like mpeg2.

> Anyway after some sleep it seems the example above is invalid as mpeg2 says:
> "If field pictures are used then they shall occur in  pairs"

This greatly reduces their usefulness for efficient coding of
hard-telecined content, I think... Of course a smart encoder would
just use RFF flag anyway.

> This also gives us an easy solution, just put both fields in a single nut
> frame.

I'm not sure whether this is a good idea or not. But it should be
discussed and considered.

> I also should likely try that in ffmpeg the code i commited yesterday
> to interpolate field picture timestamps is ugly, though it should work with
> any possible mixture ...

:-)

Rich



More information about the NUT-devel mailing list