<html>

<head>
<title>libogg - function - ogg_stream_pageout</title>
<link rel=stylesheet href="style.css" type="text/css">
</head>

<body bgcolor=white text=black link="#5555ff" alink="#5555ff" vlink="#5555ff">
<table border=0 width=100%>
<tr>
<td><p class=tiny>libogg documentation</p></td>
<td align=right><p class=tiny>libogg release 1.3.4 - 20190830</p></td>
</tr>
</table>

<h1>ogg_stream_pageout</h1>

<p><i>declared in "ogg/ogg.h";</i></p>

<p>This function forms packets into pages.</p>

<p>In a typical encoding situation, this would be called after using <a
href="ogg_stream_packetin.html">ogg_stream_packetin()</a> to submit
data packets to the bitstream. Internally, this function assembles
the accumulated packet bodies into an Ogg page suitable for writing
to a stream. The function is typically called in a loop until there
are no more pages ready for output.</p>

<p>This function will only return a page when a "reasonable" amount of
packet data is available. Normally this is appropriate since it
limits the overhead of the Ogg page headers in the bitstream, and so
calling ogg_stream_pageout() after ogg_stream_packetin() should be the
common case. Call <a href="ogg_stream_flush.html">ogg_stream_flush()</a>
if immediate page generation is desired. This may be occasionally
necessary, for example, to limit the temporal latency of a variable
bitrate stream.</p>

<br><br>
<table border=0 color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
	<td>
<pre><b>
int ogg_stream_pageout(<a href="ogg_stream_state.html">ogg_stream_state</a> *os, <a href="ogg_page.html">ogg_page</a> *og);
</b></pre>
	</td>
</tr>
</table>

<h3>Parameters</h3>
<dl>
<dt><i>os</i></dt>
<dd>Pointer to a previously declared <a href="ogg_stream.html">ogg_stream</a> struct, which represents the current logical bitstream.</dd>
<dt><i>og</i></dt>
<dd>Pointer to an <a href="ogg_page.html">ogg_page</a> structure to fill
in. Data pointed to is owned by libogg. The structure is valid until the
next call to ogg_stream_pageout(), ogg_stream_packetin(), or
ogg_stream_flush().</dd>
</dl>


<h3>Return Values</h3>
<blockquote>
<li>Zero means that insufficient data has accumulated to fill a page, or an internal error occurred. In
this case <i>og</i> is not modified.</li>
<li>Non-zero means that a page has been completed and returned.</li>
</blockquote>
<p>

<br><br>
<hr noshade>
<table border=0 width=100%>
<tr valign=top>
<td><p class=tiny>copyright &copy; 2000-2019 Xiph.Org Foundation</p></td>
<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/">Ogg Container Format</a></p></td>
</tr><tr>
<td><p class=tiny>libogg documentation</p></td>
<td align=right><p class=tiny>libogg release 1.3.4 - 20190830</p></td>
</tr>
</table>


</body>

</html>
