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