[MPlayer-dev-eng] NUT (informal) proposal, based on discussions
Rich Felker
dalias at aerifal.cx
Wed Jan 18 03:20:02 CET 2006
On Wed, Jan 18, 2006 at 12:44:02AM +0100, Michael Niedermayer wrote:
> Hi
>
> On Tue, Jan 17, 2006 at 05:59:23PM -0500, Rich Felker wrote:
> [...]
> > Without index:
> >
> > 1. Binary search for the latest syncpoint with timestamp less than the
> > requested PTS.
> >
> > 2. Linear search forward until next syncpoint (bounded by
> > max_distance). If a keyframe is found for each [active] stream with
> > PTS less than the target PTS, you are done searching.
> >
> > 3. If any [active] stream is missing a keyframe when you reach the
> > next syncpoint, use the back_ptr values stored in this syncpoint
> > (at the end of the search range) to seek back and linear search for
> > the missing keyframes (bounded by max_distance).
> >
> > Example with out-of-order frames, provided by Oded...sort of a
> > worst-case thing:
> >
> > S1 K2 .....several_megs_no_K..... K15 S13 ...no_K_or_S... S24
> >
> > * Trying to seek to timestamp 14. Should get K15.
>
> hmm shouldnt that be timestamp 16? otherwise a keyframe at ts=15 seems
> wrong ideal target ...
oops yeah, sorry. i meant the right thing, just wrote it wrong.. :)
> > * Binary search will put you at S13. S13's back_ptr points all the way
> > back to S1, which is incorrect.
> >
> > * Linear search S13 to S24. Keyframe not found.
> >
> > * Jump back to S24's back_ptr. This will (necessarily) point to K15.
> >
> > * Win!
> >
> > The main disadvantage of this method is that it cannot guarantee that
> > you will not perform an additional media seek after the binary search.
> > But just like the index case, I see no way to guarantee this without
> > full per-stream pts which would be very large at the syncpoint level
> > (since you can't code them relative to previous syncpoint).
>
> what about
>
> S1 K2 .....several_megs_no_K..... K15 S13 K17 ...no_K_or_S... S24
>
> * Trying to seek to timestamp 16. Should get K15.
> * Binary search will put you at S13. S13's back_ptr points all the way
> back to S1, which is not optimal.
> * Linear search S13 to S24. K17 found but thats after ts=16
> * Jump back to S24's back_ptr. This points to K17/S13 again not helpfull
>
> -> K15 not found, or did i violate some rule?
yes, there are problems we've been discussing on irc too. some of the
problems have a fix by changing the definition of the back_ptr
appropriately, but i don't know if they all do. i'm still
investigating. will let you know when there's an update, unless you
come up with a brilliant idea first. :)
rich
More information about the MPlayer-dev-eng
mailing list