[MPlayer-dev-eng] NUT (informal) proposal, based on discussions

Oded Shimon ods15 at ods15.dyndns.org
Wed Jan 18 20:30:56 CET 2006


On Wed, Jan 18, 2006 at 08:14:23PM +0100, Michael Niedermayer wrote:
> Hi
> 
> On Wed, Jan 18, 2006 at 08:57:18PM +0200, Oded Shimon wrote:
> > On Wed, Jan 18, 2006 at 07:47:43PM +0100, Michael Niedermayer wrote:
> > > On Wed, Jan 18, 2006 at 07:41:40PM +0200, Oded Shimon wrote:
> > > > writing a syncpoint will still point to last_target. Or did I completely 
> > > > miss something. (Also don't forget, for your back_ptr method we need to 
> > > > buffer several keyframes, not just the last one.)
> > > 
> > > hmm, my idea was to use the last keyframes (no buffering) and use their
> > > max pts as timetsamp, this seems pretty easy but maybe iam missing some
> > > issues associated with it?
> > 
> > Oh, I missed that - you never pointed that out.
> > 
> > > it wont give you the optimal keyframe in a single seek but there is no
> > > way that could be possible with a single pts anyway you would always end
> > > up with a syncpoint per keyframe and O(n^2*log n) overhead if there are many
> > > streams
> > 
> > Yes we gave up single seek with syncpoints, we still want single seek with 
> > index and that's a whole other and very easy story.
> > 
> > Now that you change the idea so you just use max pts of last keyframes for 
> > syncpoint ts instead of the dts mess it was before, yes, implementation is 
> > MUCH easier, no buffering, however...
> > 
> > A1  A2  A3  A4  A5  ...
> >   I5  B3  B4  P6  ...
> > 
> > All syncpoints between I5 and A5 will have pts 5. When seeking to 4, 
> > you'll end up at A2, and will have to linear search all the way till A4. 
> > This linear search is bounded by O(max_b_frames+decode_delay), which is 
> > quite worse than O(max_distance). :/
> 
> you need O(max_b_frames+decode_delay) anyway to display it dont you agree?
> feeding I5 in the decoder gives you ... nothing, I5 wont come out before you
> feed P6 into it ...

Actually I was reffering to audio being the only active stream, if I wanted 
video I would've went to I0... (Do backwards only B frames really exist? 
NUT can't handle them right anyway, and I'm not sure if we should at all, 
even though it is rather easy, use GOP boundries instead of keyframes..)

> so it seems we have
> per stream ptr&pts  O(streams log streams) overhead, O(log filesize) seeks
> per stream ptr&1pts O(streams log streams) overhead, O(log filesize) seeks
> 1 ptr+pts O(log streams) overhead and O(log filesize) seeks but not "optimal"

O(s*log(s))  is a bit unoptimistic, I think even false.
My syncpoint compression is worst case scenario O(s) and best case.. Well, 
still O(s) but with a much smaller constant. :)

IMO single back pts/ptr is O(1) really, and if you measure it differently, 
it is O(max keyint). It has little relavence to amount of streams...

> personally id vote for 1 ptr+pts, but if everyone else wants per
> stream ptrs then ok but i simply dont see how per stream pts are usefull

I'm not really advocating per stream pts right now, I'm probably advocating 
the solution we are working on right now, I just want to see what are it's 
flaws and understand it perfectly...

I think using max(key_pts) for syncpoint ts is very false, it doesn't even 
strictly interleave by MN rule, and it causes a very odd scenario of 
several syncpoints with same ts but different back_ptr (scenario above). 
Thought that might've always been a problem.. I'm not sure. One thing I did 
like about it is no buffering. :)


- ods15




More information about the MPlayer-dev-eng mailing list