<html>

<head>
<title>libogg - function - ogg_stream_packetpeek</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_packetpeek</h1>

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

<p>This function attempts to assemble a raw data packet and returns
it without advancing decoding.</p>

<p>In a typical situation, this would be called
speculatively after <a
href="ogg_stream_pagein.html">ogg_stream_pagein()</a> to check
the packet contents before handing it off to a codec for
decompression. To advance page decoding and remove
the packet from the sync structure, call
<a href="ogg_stream_packetout.html">ogg_stream_packetout()</a>.</p>

<br><br>

<table border=0 color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
	<td>
<pre><b>
int ogg_stream_packetpeek(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 next packet available in the bitstream, if
any. A NULL value may be passed in the case of a simple "is there a
packet?" check.</dd>
</dl>


<h3>Return Values</h3>
<blockquote>
<ul>
<li>-1 if there's no packet available due to lost sync or a hole in the data.</li>
<li>0 if there is insufficient data available to complete a packet, or on unrecoverable internal error occurred.</li>
<li>1 if a packet is available.</li>
</ul>
</blockquote>


<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>
