[gst-devel] [RFC] invalid buffers

Ted Gould ted at gould.cx
Sat Jun 15 10:15:02 CEST 2002

> Generally speaking, i would expect the seek code to somehow:
> 1. scan backward to the most recent I frame
> 2. decode it
> 3. skip the following P frames until exactly the desired P frame is found

Unfortunately it isn't quite that simple.  If you have a GOP like this:

	I P B B P B B P B B
	0 1 2 3 4 5 6 7 8 9

If you want to seek to frame 8 you need to decode frames: 0,1,4,7,8. 
This is because the P frames reference the last anchor frame, not to the
I frame.  So while it is very possible to do, you'll have to decode more
than a couple of frames.  This gets even more computationally intensive
as your GOP length increases (I've heard that 30 frames/GOP will become
common in the future).  This is also why things like DV and NLEs use I
frame only MPEG - much easier to seek in.

		Have fun,

PS - I don't know if GStreamer needs to handle this, but there is also
the issue of 'I-Slice' streams.  MPEG streams where there are no I
frames and instead there are just intracoded blocks on all of the
P-frames so that 10 P-frames make a solid picture.  This adds even
another complexity :)

More information about the gstreamer-devel mailing list