<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.4 - 20190830</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-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>
