<html>

<head>
<title>libogg - function - ogg_stream_pageout_fill</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_fill</h1>

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

<p>This function forms packets into pages, similar
to <a href="ogg_stream_pageout.html">ogg_stream_pageout()</a>, but
allows applications to explicitly request a specific page spill
size.</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 return a page when at least four packets have
been accumulated and accumulated packet data meets or exceeds the
specified number of bytes, <b>and/or</b> when the accumulated packet
data meets/exceeds the maximum page size regardless of accumulated
packet count.
Call <a href="ogg_stream_flush.html">ogg_stream_flush()</a> or
<a href="ogg_stream_flush_fill.html">ogg_stream_flush_fill()</a> if
immediate page generation is desired regardless of accumulated data.</p>

<br><br>
<table border=0 color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
	<td>
<pre><b>
int ogg_stream_pageout_fill(<a href="ogg_stream_state.html">ogg_stream_state</a> *os, <a href="ogg_page.html">ogg_page</a> *og, int fillbytes);
</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>
<dt><i>fillbytes</i></dt>
<dd>Packet data watermark in bytes.</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>
