<html>

<head>
<title>libogg - function - ogg_stream_packetout</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.1 - 20130512</p></td>
</tr>
</table>

<h1>ogg_stream_packetout</h1>

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

<p>This function assembles a data packet for output to the codec 
decoding engine. The data has already been submitted to the
<a href="ogg_stream_state.html">ogg_stream_state</a> and broken
into segments. Each successive call returns the next complete packet 
built from those segments.</p>

<p>In a typical decoding situation, this should be used after calling 
<a href="ogg_stream_pagein.html">ogg_stream_pagein()</a> to submit a 
page of data to the bitstream. If the function returns 0, more data is 
needed and another page should be submitted. A non-zero return value 
indicates successful return of a packet.</p>

<p>The <i>op</i> is filled in with pointers to memory managed by
the stream state and is only valid until the next call. The client
must copy the packet data if a longer lifetime is required.</p>

<br><br>
<table border=0 color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
	<td>
<pre><b>
int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
</b></pre>
	</td>
</tr>
</table>

<h3>Parameters</h3>
<dl>
<dt><i>os</i></dt>
<dd>Pointer to a previously declared <a
href="ogg_stream_state.html">ogg_stream_state</a> struct.  Before this function is called, an <a href="ogg_page.html">ogg_page</a> should be submitted to the stream using <a href="ogg_stream_pagein.html">ogg_stream_pagein()</a>.</dd>
<dt><i>op</i></dt>
<dd>Pointer to the packet to be filled in with pointers to the new data. 
This will typically be submitted to a codec for decode after this 
function is called. The pointers are only valid until the next call
on this stream state.</dd>
</dl>


<h3>Return Values</h3>
<blockquote>
<ul>
<li>-1 if we are out of sync and there is a gap in the data. This is usually a recoverable error and subsequent calls to ogg_stream_packetout are likely to succeed. <i>op</i> has not been updated.</li>
<li>0 if there is insufficient data available to complete a packet, or on unrecoverable internal error occurred. <i>op</i> has not been updated.
<li>1 if a packet was assembled normally. <i>op</i> contains the next packet from the stream.</li>
</ul>
</blockquote>

<br><br>

<hr noshade>

<table border=0 width=100%>
<tr valign=top>
<td><p class=tiny>copyright &copy; 2000-2010 xiph.org</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.1 - 20130512</p></td>
</tr>
</table>

</body>

</html>
