Blob Blame History Raw
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>liboggz: oggz.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>oggz.h File Reference</h1>
<p>The liboggz C API.  
<a href="#_details">More...</a></p>
<code>#include &lt;stdio.h&gt;</code><br/>
<code>#include &lt;sys/types.h&gt;</code><br/>
<code>#include &lt;ogg/ogg.h&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__constants_8h_source.html">oggz/oggz_constants.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__table_8h_source.html">oggz/oggz_table.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__off__t_8h_source.html">oggz/oggz_off_t.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__read_8h_source.html">oggz/oggz_read.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__stream_8h_source.html">oggz/oggz_stream.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__seek_8h_source.html">oggz/oggz_seek.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__write_8h_source.html">oggz/oggz_write.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__io_8h_source.html">oggz/oggz_io.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__comments_8h_source.html">oggz/oggz_comments.h</a>&gt;</code><br/>
<code>#include &lt;<a class="el" href="oggz__deprecated_8h_source.html">oggz/oggz_deprecated.h</a>&gt;</code><br/>

<p><a href="oggz_8h_source.html">Go to the source code of this file.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An opaque handle to an Ogg file.  <a href="#a672d218df13da45a4b41d5366211bfee"></a><br/></td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#a6eb34d123389ae38d993601f9e7bb9d6">oggz_new</a> (int flags)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a new OGGZ object.  <a href="#a6eb34d123389ae38d993601f9e7bb9d6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#a65197cdd03f755f7ebfabf2fdff4c7db">oggz_open</a> (const char *filename, int flags)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Open an Ogg file, creating an OGGZ handle for it.  <a href="#a65197cdd03f755f7ebfabf2fdff4c7db"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#ac49e9de0bc4ef1d91b43b13605f98b19">oggz_open_stdio</a> (FILE *file, int flags)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create an OGGZ handle associated with a stdio stream.  <a href="#ac49e9de0bc4ef1d91b43b13605f98b19"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#a8090c7e886af90dbea4dd5df8035dbf3">oggz_flush</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Ensure any associated io streams are flushed.  <a href="#a8090c7e886af90dbea4dd5df8035dbf3"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#a0561df532fc37f98725007a79f898356">oggz_run</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Run an OGGZ until completion, or error.  <a href="#a0561df532fc37f98725007a79f898356"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#ad500c8ed7147f7fb1ddc6c915a6c10d7">oggz_run_set_blocksize</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, long blocksize)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the blocksize to use internally for <a class="el" href="oggz_8h.html#a0561df532fc37f98725007a79f898356" title="Run an OGGZ until completion, or error.">oggz_run()</a>.  <a href="#ad500c8ed7147f7fb1ddc6c915a6c10d7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#aadcfc04b2930660710bbcbc93140b783">oggz_close</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close an OGGZ handle.  <a href="#aadcfc04b2930660710bbcbc93140b783"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#a357244f9e73d219015d9ce8260ee08d3">oggz_get_bos</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, long serialno)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if a given logical bitstream is at bos (beginning of stream).  <a href="#a357244f9e73d219015d9ce8260ee08d3"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#aee6a754e123ec0fd347d1ed0d4d4b3b7">oggz_get_eos</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, long serialno)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determine if a given logical bitstream is at eos (end of stream).  <a href="#aee6a754e123ec0fd347d1ed0d4d4b3b7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#a0dd3be49fc94531e35546318c14b64e7">oggz_get_numtracks</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query the number of tracks (logical bitstreams).  <a href="#a0dd3be49fc94531e35546318c14b64e7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#aaf89877e3e89408387d422f487bcf094">oggz_serialno_new</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request a new serialno, as required for a new stream, ensuring the serialno is not yet used for any other streams managed by this OGGZ.  <a href="#aaf89877e3e89408387d422f487bcf094"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="oggz_8h.html#ab1b16dec307b6544b5f82a60a14c8518">oggz_content_type</a> (<a class="el" href="oggz__constants_8h.html#ab20058e3d54fc5540aa719a99e1e9598">OggzStreamContent</a> content)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return human-readable string representation of a content type.  <a href="#ab1b16dec307b6544b5f82a60a14c8518"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>The liboggz C API. </p>
<h2><a class="anchor" id="general">
Generic semantics</a></h2>
<p>All access is managed via an OGGZ handle. This can be instantiated in one of three ways:</p>
<ul>
<li><a class="el" href="oggz_8h.html#a65197cdd03f755f7ebfabf2fdff4c7db" title="Open an Ogg file, creating an OGGZ handle for it.">oggz_open()</a> - Open a full pathname</li>
<li><a class="el" href="oggz_8h.html#ac49e9de0bc4ef1d91b43b13605f98b19" title="Create an OGGZ handle associated with a stdio stream.">oggz_open_stdio()</a> - Use an already opened FILE *</li>
<li><a class="el" href="oggz_8h.html#a6eb34d123389ae38d993601f9e7bb9d6" title="Create a new OGGZ object.">oggz_new()</a> - Create an anonymous OGGZ object, which you can later handle via memory buffers</li>
</ul>
<p>To finish using an OGGZ handle, it should be closed with <a class="el" href="oggz_8h.html#aadcfc04b2930660710bbcbc93140b783" title="Close an OGGZ handle.">oggz_close()</a>.</p>
<h2><a class="anchor" id="reading">
Reading Ogg data</a></h2>
<p>To read from Ogg files or streams you must instantiate an OGGZ handle with flags set to OGGZ_READ, and provide an OggzReadPacket callback with <a class="el" href="group__read__api.html#ga6d5aae4f7f186fffe19d4fd3cd63148d" title="Set a callback for Oggz to call when a new Ogg packet is found in the stream.">oggz_set_read_callback()</a>. See the <a class="el" href="group__read__api.html">Oggz Read API</a> section for details.</p>
<h2><a class="anchor" id="writing">
Writing Ogg data</a></h2>
<p>To write to Ogg files or streams you must instantiate an OGGZ handle with flags set to OGGZ_WRITE, and provide an OggzWritePacket callback with oggz_set_write_callback(). See the <a class="el" href="group__write__api.html">Oggz Write API</a> section for details.</p>
<h2><a class="anchor" id="seeking">
Seeking on Ogg data</a></h2>
<p>To seek while reading Ogg files or streams you must instantiate an OGGZ handle for reading, and ensure that an <a class="el" href="group__metric.html">OggzMetric </a> function is defined to translate packet positions into units such as time. See the <a class="el" href="group__seek__api.html">Oggz Seek API</a> section for details.</p>
<h2><a class="anchor" id="io">
Overriding the IO methods</a></h2>
<p>When an OGGZ handle is instantiated by <a class="el" href="oggz_8h.html#a65197cdd03f755f7ebfabf2fdff4c7db" title="Open an Ogg file, creating an OGGZ handle for it.">oggz_open()</a> or <a class="el" href="oggz_8h.html#ac49e9de0bc4ef1d91b43b13605f98b19" title="Create an OGGZ handle associated with a stdio stream.">oggz_open_stdio()</a>, Oggz uses stdio functions internally to access the raw data. However for some applications, the raw data cannot be accessed via stdio -- this commonly occurs when integrating with media frameworks. For such applications, you can provide Oggz with custom IO methods that it should use to access the raw data. Oggz will then use these custom methods, rather than using stdio methods, to access the raw data internally.</p>
<p>For details, see <a class="el" href="oggz__io_8h.html">&lt;oggz/oggz_io.h&gt; </a>.</p>
<h2><a class="anchor" id="headers">
Headers</a></h2>
<p><a class="el" href="oggz_8h.html" title="The liboggz C API.">oggz.h</a> provides direct access to libogg types such as ogg_packet, defined in &lt;ogg/ogg.h&gt;. </p>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="a672d218df13da45a4b41d5366211bfee"></a><!-- doxytag: member="oggz.h::OGGZ" ref="a672d218df13da45a4b41d5366211bfee" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef void <a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>An opaque handle to an Ogg file. </p>
<p>This is returned by <a class="el" href="oggz_8h.html#a65197cdd03f755f7ebfabf2fdff4c7db" title="Open an Ogg file, creating an OGGZ handle for it.">oggz_open()</a> or <a class="el" href="oggz_8h.html#a6eb34d123389ae38d993601f9e7bb9d6" title="Create a new OGGZ object.">oggz_new()</a>, and is passed to all other oggz_* functions. </p>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="aadcfc04b2930660710bbcbc93140b783"></a><!-- doxytag: member="oggz.h::oggz_close" ref="aadcfc04b2930660710bbcbc93140b783" args="(OGGZ *oggz)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int oggz_close </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td>
          <td class="paramname"> <em>oggz</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Close an OGGZ handle. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_BAD_OGGZ</em>&nbsp;</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_SYSTEM</em>&nbsp;</td><td>System error; check errno for details </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ab1b16dec307b6544b5f82a60a14c8518"></a><!-- doxytag: member="oggz.h::oggz_content_type" ref="ab1b16dec307b6544b5f82a60a14c8518" args="(OggzStreamContent content)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* oggz_content_type </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz__constants_8h.html#ab20058e3d54fc5540aa719a99e1e9598">OggzStreamContent</a>&nbsp;</td>
          <td class="paramname"> <em>content</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Return human-readable string representation of a content type. </p>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>string</em>&nbsp;</td><td>the name of the content type </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>NULL</em>&nbsp;</td><td><em>content</em> invalid </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a8090c7e886af90dbea4dd5df8035dbf3"></a><!-- doxytag: member="oggz.h::oggz_flush" ref="a8090c7e886af90dbea4dd5df8035dbf3" args="(OGGZ *oggz)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int oggz_flush </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td>
          <td class="paramname"> <em>oggz</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Ensure any associated io streams are flushed. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_BAD_OGGZ</em>&nbsp;</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_INVALID</em>&nbsp;</td><td>Operation not suitable for this OGGZ </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_SYSTEM</em>&nbsp;</td><td>System error; check errno for details </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a357244f9e73d219015d9ce8260ee08d3"></a><!-- doxytag: member="oggz.h::oggz_get_bos" ref="a357244f9e73d219015d9ce8260ee08d3" args="(OGGZ *oggz, long serialno)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int oggz_get_bos </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td>
          <td class="paramname"> <em>oggz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>serialno</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determine if a given logical bitstream is at bos (beginning of stream). </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>serialno</em>&nbsp;</td><td>Identify a logical bitstream within <em>oggz</em>, or -1 to query if all logical bitstreams in <em>oggz</em> are at bos </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>1</em>&nbsp;</td><td>The given stream is at bos </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>The given stream is not at bos </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_BAD_SERIALNO</em>&nbsp;</td><td><em>serialno</em> does not identify an existing logical bitstream in <em>oggz</em>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="aee6a754e123ec0fd347d1ed0d4d4b3b7"></a><!-- doxytag: member="oggz.h::oggz_get_eos" ref="aee6a754e123ec0fd347d1ed0d4d4b3b7" args="(OGGZ *oggz, long serialno)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int oggz_get_eos </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td>
          <td class="paramname"> <em>oggz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>serialno</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determine if a given logical bitstream is at eos (end of stream). </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>serialno</em>&nbsp;</td><td>Identify a logical bitstream within <em>oggz</em>, or -1 to query if all logical bitstreams in <em>oggz</em> are at eos </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>1</em>&nbsp;</td><td>The given stream is at eos </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>The given stream is not at eos </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_BAD_SERIALNO</em>&nbsp;</td><td><em>serialno</em> does not identify an existing logical bitstream in <em>oggz</em>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a0dd3be49fc94531e35546318c14b64e7"></a><!-- doxytag: member="oggz.h::oggz_get_numtracks" ref="a0dd3be49fc94531e35546318c14b64e7" args="(OGGZ *oggz)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int oggz_get_numtracks </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td>
          <td class="paramname"> <em>oggz</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Query the number of tracks (logical bitstreams). </p>
<p>When reading, this number is incremented every time a new track is found, so the returned value is only correct once the OGGZ is no longer at bos (beginning of stream): see <a class="el" href="oggz_8h.html#a357244f9e73d219015d9ce8260ee08d3" title="Determine if a given logical bitstream is at bos (beginning of stream).">oggz_get_bos()</a> for determining this. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The number of tracks in OGGZ </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_BAD_SERIALNO</em>&nbsp;</td><td><em>serialno</em> does not identify an existing logical bitstream in <em>oggz</em>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a6eb34d123389ae38d993601f9e7bb9d6"></a><!-- doxytag: member="oggz.h::oggz_new" ref="a6eb34d123389ae38d993601f9e7bb9d6" args="(int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a>* oggz_new </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>flags</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Create a new OGGZ object. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>OGGZ_READ or OGGZ_WRITE </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A new OGGZ object </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>NULL</em>&nbsp;</td><td>on system error; check errno for details </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a65197cdd03f755f7ebfabf2fdff4c7db"></a><!-- doxytag: member="oggz.h::oggz_open" ref="a65197cdd03f755f7ebfabf2fdff4c7db" args="(const char *filename, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a>* oggz_open </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>filename</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>flags</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Open an Ogg file, creating an OGGZ handle for it. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>filename</em>&nbsp;</td><td>The file to open </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>OGGZ_READ or OGGZ_WRITE </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A new OGGZ handle </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>NULL</em>&nbsp;</td><td>System error; check errno for details </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ac49e9de0bc4ef1d91b43b13605f98b19"></a><!-- doxytag: member="oggz.h::oggz_open_stdio" ref="ac49e9de0bc4ef1d91b43b13605f98b19" args="(FILE *file, int flags)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a>* oggz_open_stdio </td>
          <td>(</td>
          <td class="paramtype">FILE *&nbsp;</td>
          <td class="paramname"> <em>file</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>flags</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Create an OGGZ handle associated with a stdio stream. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>file</em>&nbsp;</td><td>An open FILE handle </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>OGGZ_READ or OGGZ_WRITE </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A new OGGZ handle </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>NULL</em>&nbsp;</td><td>System error; check errno for details </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a0561df532fc37f98725007a79f898356"></a><!-- doxytag: member="oggz.h::oggz_run" ref="a0561df532fc37f98725007a79f898356" args="(OGGZ *oggz)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">long oggz_run </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td>
          <td class="paramname"> <em>oggz</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Run an OGGZ until completion, or error. </p>
<p>This is a convenience function which repeatedly calls <a class="el" href="group__read__api.html#ga3ce7a31de5da56375057436c6b5108f2" title="Read n bytes into oggz, calling any read callbacks on the fly.">oggz_read()</a> or <a class="el" href="group__write__api.html#ga3c97d94ea425d64546adf9c368b71904" title="Write n bytes from an OGGZ handle.">oggz_write()</a> as appropriate. For an OGGZ opened for reading, an OggzReadPacket or OggzReadPage callback should have been set before calling this function. For an OGGZ opened for writing, either an OggzHungry callback should have been set before calling this function, or you can use this function to write out all unwritten Ogg pages which are pending. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>oggz</em>&nbsp;</td><td>An OGGZ handle previously opened for either reading or writing </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_BAD_OGGZ</em>&nbsp;</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_INVALID</em>&nbsp;</td><td>Operation not suitable for this OGGZ </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_SYSTEM</em>&nbsp;</td><td>System error; check errno for details </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_STOP_OK</em>&nbsp;</td><td>Operation was stopped by a user callback returning OGGZ_STOP_OK </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_STOP_ERR</em>&nbsp;</td><td>Operation was stopped by a user callback returning OGGZ_STOP_ERR </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_RECURSIVE_WRITE</em>&nbsp;</td><td>Attempt to initiate writing from within an OggzHungry callback </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ad500c8ed7147f7fb1ddc6c915a6c10d7"></a><!-- doxytag: member="oggz.h::oggz_run_set_blocksize" ref="ad500c8ed7147f7fb1ddc6c915a6c10d7" args="(OGGZ *oggz, long blocksize)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int oggz_run_set_blocksize </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td>
          <td class="paramname"> <em>oggz</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">long&nbsp;</td>
          <td class="paramname"> <em>blocksize</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Set the blocksize to use internally for <a class="el" href="oggz_8h.html#a0561df532fc37f98725007a79f898356" title="Run an OGGZ until completion, or error.">oggz_run()</a>. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>oggz</em>&nbsp;</td><td>An OGGZ handle previously opened for either reading or writing </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>blocksize</em>&nbsp;</td><td>The blocksize to use within <a class="el" href="oggz_8h.html#a0561df532fc37f98725007a79f898356" title="Run an OGGZ until completion, or error.">oggz_run()</a> </td></tr>
  </table>
  </dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_BAD_OGGZ</em>&nbsp;</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>OGGZ_ERR_INVALID</em>&nbsp;</td><td>Invalid blocksize (<em>run_blocksize</em> &lt;= 0) </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="aaf89877e3e89408387d422f487bcf094"></a><!-- doxytag: member="oggz.h::oggz_serialno_new" ref="aaf89877e3e89408387d422f487bcf094" args="(OGGZ *oggz)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">long oggz_serialno_new </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *&nbsp;</td>
          <td class="paramname"> <em>oggz</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Request a new serialno, as required for a new stream, ensuring the serialno is not yet used for any other streams managed by this OGGZ. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>oggz</em>&nbsp;</td><td>An OGGZ handle </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A new serialno, not already occuring in any logical bitstreams in <em>oggz</em>. </dd></dl>

</div>
</div>
</div>
<hr class="footer"/><address style="text-align: right;"><small>Generated on Sat Apr 24 09:13:55 2010 for liboggz by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>