Mpeg video uses bidirectional prediction (see
http://en.wikipedia.org/wiki/MPEG-1#Frame.2Fpicture.2Fblock_types).
This requires the frames to be decoded in a different order to the
presentation order. Briefly, if the B frames depend on the reference
frames at the start and the end of the sequence, you need to decode
both the start and the end of the sequence before you can decode the B
frames in the middle, so they are stored and delivered in decoding
order like that.
The mpeg TS contains both presentation time and decode time. You will
find that the decode time is in sequential order, but the presentation
time is not. DirectShow passes the presentation time (converted to a
directshow timestamp) and in fact most decoders will use this
timestamp -- although they will extrapolate between timestamps where
necessary, so a single timestamp per GOP would be sufficient.
G
Thanks, I understand now.