<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.3 - 20171107</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-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>
