Re: OGGZ Seeking in Theora

Conrad Parker <[email protected]>
Newsgroups gmane.comp.multimedia.ogg.theora.general
Message-ID <[email protected]>
On 7 June 2010 20:02, Stefan Weber <[email protected]> wrote:
> Hi Conrad
>
> Thanks for your reply to my request. I was able to eliminate some questions
> now.
> But I obviously still have some issues calculating the keyframe position.
> This is what I do:
>
> ogg_int64_t granule = oggz_tell_granulepos(oggz);
> int shift = oggz_get_granuleshift(oggz, sn);
> int noOfFramesSinceKeyframe = granule>>shift;
> int keyFramePosition = oldPosition - noOfFramesSinceKeyframe;
> oggz_seek_units(oggz, keyFramePosition, SEEK_SET);
>
> oldPosition being the position where initially has been seeked to as from
> oggz_tell_units().
>
> Seeking works, but not to keyframes :(  Am I getting wrong some units or
> something?

This line:

| int noOfFramesSinceKeyframe = granule>>shift;

calculates the position of the previous keyframe, not the offset since. See:

http://wiki.xiph.org/GranulePosAndSeeking

so you should be able to use that calculation directly for keyFramePosition.

>> If you're working with this now anyway, please try the seek-rewrite
>> branch, from the repo at github: http://github.com/kfish/liboggz
>
> Whats different in this branch? Why would I use it?

It has improvements in both efficiency and accuracy, but does not have
as much real-world testing. If people test it and report good results
then it will be released as the main version sooner.

Conrad.

> Am 06.06.2010 23:54, schrieb Conrad Parker:
>
> On 7 June 2010 02:12, Stefan Weber <[email protected]> wrote:
>
>
> Dear all
>
> Excuse me for pushing this again.
> Can't somebody give me a little hint on how to setup OGGZ for seeking
> with Theora?
>
>
>
> what you wrote sounds right. You should only need a page callback to
> handle the intermediate step. The callbacks are not asynchronous, they
> all happen in the same thread and only see data that gets passed
> through the most recent call to oggz_read().
>
> You can get the granuleshift with oggz_get_granuleshift(). The
> difference between ogg_page_granulepos() and oggz_tell_granulepos() is
> that the oggz version will work out the granulepos for a packet, even
> if it was not recorded in the stream. At the page level it doesn't
> matter so much.
>
> If you're working with this now anyway, please try the seek-rewrite
> branch, from the repo at github: http://github.com/kfish/liboggz
>
> cheers,
>
> Conrad.
>
>
>
> _______________________________________________
> theora mailing list
> [email protected]
> http://lists.xiph.org/mailman/listinfo/theora
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.