[theora] Ogg index and Skeleton 4.0

Gregory Maxwell gmaxwell at gmail.com
Thu Apr 29 05:16:17 PDT 2010


In the interest of having another person explain something to validate
that as a group we all understand what this is doing...

On Thu, Apr 29, 2010 at 6:21 AM,  <xiphmont at xiph.org> wrote:
> What I mean is, is there the unstated assumption that PTS==DTS for keyframes?

I believe the idea is that the index encodes the latest offset which
is able to decode to the requested presentation time stamp.  So it's
basically encoding the decode byte-time for the named presentation
time.

The decoder is still expected to be smart enough to realize that where
it landed wasn't where it asked for, only that the location was
sufficiently early, and to either accept the inaccuracy or suppress
output until it gets to the right time.

In the case of PTS=DTS  it's just coding the requested location
directly, in the case of a rolling-intra or a stream with pre-roll
it's encoding some time before the the requested time.

>> For exact seeking you need to decode forwards from the lowest offset, not
>> the earliest timestamp. If you don't decode from the lowest offset, you
>> can't guarantee that you've started decoding before the start of all the
>> data required to render the seek target on all streams.
>
> I am thoroughly misunderstanding what 'the lowest offset' is then.  I
> read that and interpreted it to mean 'look at all the syncpoints.
> Choose the latest one' ie, the one closest to the desired time.  What
> did you actually mean?


#1 0:50:0 -> byte 10000
#2 0:50:0 -> byte 9000

If you want 0:50:0 and you care about streams #1 and #2 you seek to
min(10000,9000) and start priming your decoders there.


More information about the theora mailing list