[Theora-dev] Dropped / Duplicate Frames
giles at xiph.org
Fri Mar 10 19:17:35 PST 2006
On Sat, Mar 11, 2006 at 12:43:37AM +0000, Philip Heron wrote:
> Nudging off-topic, the libogg API pages at xiph.org seem to have gotten
> mixed up or corrupted. For example parts of the page for
> ogg_stream_pageout() seems to be describing ogg_stream_pagein().
I think that's just a long-standing cut and paste error. I'll clean up
> What I was actually looking for was who owns the memory the ogg_page
> structure points to after a call to ogg_stream_pageout()? I'd like to
> keep a copy of the initial pages for saving parts of the live stream to
> a local file later.
libogg owns the memory. The header is a pointer into storage in the
ogg_stream_state structure, and the body is an internal working buffer.
Basically, ogg_stream_packetin() memcpy()s each successive packet
body consecutively into this internal buffer, and then
ogg_stream_pageout() checks to see if there's enough data to complete a
page, then fills out the header and hands back a pointer to the start
of that data buffer. So the pointers filled out in the ogg_page
structure are valid until the next call to ogg_stream_packetin() for
the body data, and the next call to ogg_stream_pageout() (or _flush())
for the header.
So, if you want to keep the pages around, you have to write a
my_ogg_page_copy() routine to allocate new storage and copy
the header and body data into it.
Or you could help beta test libogg2 which passes you a refcounted
handle instead. :)
More information about the Theora-dev