<html>

<head>
<title>libogg - function - ogg_stream_iovecin</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.2 - 20140527</p></td>
</tr>
</table>

<h1>ogg_stream_iovecin</h1>

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

<p>This function submits packet data (in the form of
an array of <a href="ogg_iovec_t.html">ogg_iovec_t</a>, rather than using
an <a href="ogg_packet.html">ogg_packet</a> structure) to the
bitstream for page encapsulation. After this is called, more packets
can be submitted, or pages can be written out.</p>

<p>In a typical encoding situation, this should be used after filling a 
packet with data.
The data in the packet is copied into the internal storage managed by 
the <a href="ogg_stream_state.html">ogg_stream_state</a>, so the caller
is free to alter the contents of <i>os</i> after this call has returned.

<br><br>
<table border=0 color=black cellspacing=0 cellpadding=7>
<tr bgcolor=#cccccc>
	<td>
<pre><b>
int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov, int count, long e_o_s, ogg_int64_t granulepos);
</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.</dd>
<dt><i>iov</i></dt>
<dd>Length-encoded buffers held in an array of <a href="ogg_iovec_t.html">ogg_iovec_t</a>.
<dt><i>count</i></dt>
<dd>Length of the iov array.
<dt><i>e_o_s</i></dt>
<dd>End of stream flag, analagous to the e_o_s field in an <a href="ogg_packet.html">ogg_packet</a>.
<dt><i>granulepos</i></dt>
<dd>Granule position value, analagous to the granpos field in an <a href="ogg_packet.html">ogg_packet</a>.
</dl>


<h3>Return Values</h3>
<blockquote>
<li>
0 returned on success.  -1 returned in the event of internal error.</li>
</blockquote>
<p>

<br><br>
<hr noshade>
<table border=0 width=100%>
<tr valign=top>
<td><p class=tiny>copyright &copy; 2000-2014 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.2 - 20140527</p></td>
</tr>
</table>


</body>

</html>
