<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.3 - 20171107</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-2017 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.3 - 20171107</p></td>
</tr>
</table>


</body>

</html>
