EVOLUTION-MANAGER
Edit File: group__read__api.html
<!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"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.5"/> <title>liboggz: Oggz Read API</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">liboggz  <span id="projectnumber">1.1.1</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.5 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">Oggz Read API</div> </div> </div><!--header--> <div class="contents"> <p>Oggz parses Ogg bitstreams, forming ogg_packet structures, and calling your OggzReadPacket callback(s). <a href="#details">More...</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr class="memitem:gad9d6114ffc7c956fd179863e51e0d542"><td class="memItemLeft" align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__read__api.html#gad9d6114ffc7c956fd179863e51e0d542">OggzReadPacket</a> )(<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, <a class="el" href="structoggz__packet.html">oggz_packet</a> *packet, long serialno, void *user_data)</td></tr> <tr class="memdesc:gad9d6114ffc7c956fd179863e51e0d542"><td class="mdescLeft"> </td><td class="mdescRight">This is the signature of a callback which you must provide for Oggz to call whenever it finds a new packet in the Ogg stream associated with <em>oggz</em>. <a href="#gad9d6114ffc7c956fd179863e51e0d542">More...</a><br/></td></tr> <tr class="separator:gad9d6114ffc7c956fd179863e51e0d542"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga8a1df0166fad1a0a6fe55d24e1a4b2e6"><td class="memItemLeft" align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__read__api.html#ga8a1df0166fad1a0a6fe55d24e1a4b2e6">OggzReadPage</a> )(<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, const ogg_page *og, long serialno, void *user_data)</td></tr> <tr class="memdesc:ga8a1df0166fad1a0a6fe55d24e1a4b2e6"><td class="mdescLeft"> </td><td class="mdescRight">This is the signature of a callback which you must provide for Oggz to call whenever it finds a new page in the Ogg stream associated with <em>oggz</em>. <a href="#ga8a1df0166fad1a0a6fe55d24e1a4b2e6">More...</a><br/></td></tr> <tr class="separator:ga8a1df0166fad1a0a6fe55d24e1a4b2e6"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:ga6d5aae4f7f186fffe19d4fd3cd63148d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__read__api.html#ga6d5aae4f7f186fffe19d4fd3cd63148d">oggz_set_read_callback</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, long serialno, <a class="el" href="group__read__api.html#gad9d6114ffc7c956fd179863e51e0d542">OggzReadPacket</a> read_packet, void *user_data)</td></tr> <tr class="memdesc:ga6d5aae4f7f186fffe19d4fd3cd63148d"><td class="mdescLeft"> </td><td class="mdescRight">Set a callback for Oggz to call when a new Ogg packet is found in the stream. <a href="#ga6d5aae4f7f186fffe19d4fd3cd63148d">More...</a><br/></td></tr> <tr class="separator:ga6d5aae4f7f186fffe19d4fd3cd63148d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gafe738d4fdd4b00b1280f5978be19b2d5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__read__api.html#gafe738d4fdd4b00b1280f5978be19b2d5">oggz_set_read_page</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, long serialno, <a class="el" href="group__read__api.html#ga8a1df0166fad1a0a6fe55d24e1a4b2e6">OggzReadPage</a> read_page, void *user_data)</td></tr> <tr class="memdesc:gafe738d4fdd4b00b1280f5978be19b2d5"><td class="mdescLeft"> </td><td class="mdescRight">Set a callback for Oggz to call when a new Ogg page is found in the stream. <a href="#gafe738d4fdd4b00b1280f5978be19b2d5">More...</a><br/></td></tr> <tr class="separator:gafe738d4fdd4b00b1280f5978be19b2d5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga3ce7a31de5da56375057436c6b5108f2"><td class="memItemLeft" align="right" valign="top">long </td><td class="memItemRight" valign="bottom"><a class="el" href="group__read__api.html#ga3ce7a31de5da56375057436c6b5108f2">oggz_read</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, long n)</td></tr> <tr class="memdesc:ga3ce7a31de5da56375057436c6b5108f2"><td class="mdescLeft"> </td><td class="mdescRight">Read n bytes into <em>oggz</em>, calling any read callbacks on the fly. <a href="#ga3ce7a31de5da56375057436c6b5108f2">More...</a><br/></td></tr> <tr class="separator:ga3ce7a31de5da56375057436c6b5108f2"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga77d4158dd119f496f73311ace7f630d6"><td class="memItemLeft" align="right" valign="top">long </td><td class="memItemRight" valign="bottom"><a class="el" href="group__read__api.html#ga77d4158dd119f496f73311ace7f630d6">oggz_read_input</a> (<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, unsigned char *buf, long n)</td></tr> <tr class="memdesc:ga77d4158dd119f496f73311ace7f630d6"><td class="mdescLeft"> </td><td class="mdescRight">Input data into <em>oggz</em>. <a href="#ga77d4158dd119f496f73311ace7f630d6">More...</a><br/></td></tr> <tr class="separator:ga77d4158dd119f496f73311ace7f630d6"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <p>Oggz parses Ogg bitstreams, forming ogg_packet structures, and calling your OggzReadPacket callback(s). </p> <p>You provide Ogg data to Oggz with <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__read__api.html#ga77d4158dd119f496f73311ace7f630d6" title="Input data into oggz. ">oggz_read_input()</a>, and independently process it in OggzReadPacket callbacks. It is possible to set a different callback per <em>serialno</em> (ie. for each logical bitstream in the Ogg bitstream - see the <a class="el" href="group__basics.html">Ogg basics</a> section for more detail).</p> <p>When using an OGGZ* opened with the OGGZ_AUTO flag set, Oggz will internally calculate the granulepos for each packet, even though these are not all recorded in the file: only the last packet ending on a page will have its granulepos recorded in the page header. Within a OggzReadPacket callback, calling <a class="el" href="group__seek__api.html#ga29181fb4e8f4e3629cb84810614acd30" title="Provide the exact stored granulepos (from the page header) if relevant to the current packet...">oggz_tell_granulepos()</a> will retrieve the calculated granulepos.</p> <p>See <a class="el" href="group__seek__api.html">Oggz Seek API</a> for information on seeking on interleaved Ogg data, and for working with calculated granulepos values. </p> <h2 class="groupheader">Typedef Documentation</h2> <a class="anchor" id="gad9d6114ffc7c956fd179863e51e0d542"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef int(* OggzReadPacket)(<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, <a class="el" href="structoggz__packet.html">oggz_packet</a> *packet, long serialno, void *user_data)</td> </tr> </table> </div><div class="memdoc"> <p>This is the signature of a callback which you must provide for Oggz to call whenever it finds a new packet in the Ogg stream associated with <em>oggz</em>. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">oggz</td><td>The OGGZ handle </td></tr> <tr><td class="paramname">packet</td><td>The packet, including its position in the stream. </td></tr> <tr><td class="paramname">serialno</td><td>Identify the logical bistream in <em>oggz</em> that contains <em>packet</em> </td></tr> <tr><td class="paramname">user_data</td><td>A generic pointer you have provided earlier </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 to continue, non-zero to instruct Oggz to stop.</dd></dl> <dl class="section note"><dt>Note</dt><dd>It is possible to provide different callbacks per logical bitstream – see <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> for more information. </dd></dl> </div> </div> <a class="anchor" id="ga8a1df0166fad1a0a6fe55d24e1a4b2e6"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef int(* OggzReadPage)(<a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> *oggz, const ogg_page *og, long serialno, void *user_data)</td> </tr> </table> </div><div class="memdoc"> <p>This is the signature of a callback which you must provide for Oggz to call whenever it finds a new page in the Ogg stream associated with <em>oggz</em>. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">oggz</td><td>The OGGZ handle </td></tr> <tr><td class="paramname">op</td><td>The full ogg_page (see <ogg/ogg.h>) </td></tr> <tr><td class="paramname">user_data</td><td>A generic pointer you have provided earlier </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 to continue, non-zero to instruct Oggz to stop. </dd></dl> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="ga3ce7a31de5da56375057436c6b5108f2"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">long oggz_read </td> <td>(</td> <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> * </td> <td class="paramname"><em>oggz</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">long </td> <td class="paramname"><em>n</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Read n bytes into <em>oggz</em>, calling any read callbacks on the fly. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">oggz</td><td>An OGGZ handle previously opened for reading </td></tr> <tr><td class="paramname">n</td><td>A count of bytes to ingest </td></tr> </table> </dd> </dl> <dl class="retval"><dt>Return values</dt><dd> <table class="retval"> <tr><td class="paramname">> 0</td><td>The number of bytes successfully ingested. </td></tr> <tr><td class="paramname">0</td><td>End of file </td></tr> <tr><td class="paramname">OGGZ_ERR_BAD_OGGZ</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr> <tr><td class="paramname">OGGZ_ERR_INVALID</td><td>Operation not suitable for this OGGZ </td></tr> <tr><td class="paramname">OGGZ_ERR_SYSTEM</td><td>System error; check errno for details </td></tr> <tr><td class="paramname">OGGZ_ERR_STOP_OK</td><td>Reading was stopped by a user callback returning OGGZ_STOP_OK </td></tr> <tr><td class="paramname">OGGZ_ERR_STOP_ERR</td><td>Reading was stopped by a user callback returning OGGZ_STOP_ERR </td></tr> <tr><td class="paramname">OGGZ_ERR_HOLE_IN_DATA</td><td>Hole (sequence number gap) detected in input data </td></tr> <tr><td class="paramname">OGGZ_ERR_OUT_OF_MEMORY</td><td>Out of memory </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga77d4158dd119f496f73311ace7f630d6"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">long oggz_read_input </td> <td>(</td> <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> * </td> <td class="paramname"><em>oggz</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned char * </td> <td class="paramname"><em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">long </td> <td class="paramname"><em>n</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Input data into <em>oggz</em>. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">oggz</td><td>An OGGZ handle previously opened for reading </td></tr> <tr><td class="paramname">buf</td><td>A memory buffer </td></tr> <tr><td class="paramname">n</td><td>A count of bytes to input </td></tr> </table> </dd> </dl> <dl class="retval"><dt>Return values</dt><dd> <table class="retval"> <tr><td class="paramname">> 0</td><td>The number of bytes successfully ingested. </td></tr> <tr><td class="paramname">OGGZ_ERR_BAD_OGGZ</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr> <tr><td class="paramname">OGGZ_ERR_INVALID</td><td>Operation not suitable for this OGGZ </td></tr> <tr><td class="paramname">OGGZ_ERR_STOP_OK</td><td>Reading was stopped by a user callback returning OGGZ_STOP_OK </td></tr> <tr><td class="paramname">OGGZ_ERR_STOP_ERR</td><td>Reading was stopped by a user callback returning OGGZ_STOP_ERR </td></tr> <tr><td class="paramname">OGGZ_ERR_HOLE_IN_DATA</td><td>Hole (sequence number gap) detected in input data </td></tr> <tr><td class="paramname">OGGZ_ERR_OUT_OF_MEMORY</td><td>Out of memory </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga6d5aae4f7f186fffe19d4fd3cd63148d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int oggz_set_read_callback </td> <td>(</td> <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> * </td> <td class="paramname"><em>oggz</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">long </td> <td class="paramname"><em>serialno</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__read__api.html#gad9d6114ffc7c956fd179863e51e0d542">OggzReadPacket</a> </td> <td class="paramname"><em>read_packet</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>user_data</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Set a callback for Oggz to call when a new Ogg packet is found in the stream. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">oggz</td><td>An OGGZ handle previously opened for reading </td></tr> <tr><td class="paramname">serialno</td><td>Identify the logical bitstream in <em>oggz</em> to attach this callback to, or -1 to attach this callback to all unattached logical bitstreams in <em>oggz</em>. </td></tr> <tr><td class="paramname">read_packet</td><td>Your callback function </td></tr> <tr><td class="paramname">user_data</td><td>Arbitrary data you wish to pass to your callback </td></tr> </table> </dd> </dl> <dl class="retval"><dt>Return values</dt><dd> <table class="retval"> <tr><td class="paramname">0</td><td>Success </td></tr> <tr><td class="paramname">OGGZ_ERR_BAD_SERIALNO</td><td><em>serialno</em> does not identify an existing logical bitstream in <em>oggz</em>. </td></tr> <tr><td class="paramname">OGGZ_ERR_BAD_OGGZ</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr> <tr><td class="paramname">OGGZ_ERR_INVALID</td><td>Operation not suitable for this OGGZ </td></tr> <tr><td class="paramname">OGGZ_ERR_OUT_OF_MEMORY</td><td>Out of memory</td></tr> </table> </dd> </dl> <dl class="section note"><dt>Note</dt><dd>Values of <em>serialno</em> other than -1 allows you to specify different callback functions for each logical bitstream.</dd> <dd> It is safe to call this callback from within an OggzReadPacket function, in order to specify that subsequent packets should be handled by a different OggzReadPacket function. </dd></dl> </div> </div> <a class="anchor" id="gafe738d4fdd4b00b1280f5978be19b2d5"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int oggz_set_read_page </td> <td>(</td> <td class="paramtype"><a class="el" href="oggz_8h.html#a672d218df13da45a4b41d5366211bfee">OGGZ</a> * </td> <td class="paramname"><em>oggz</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">long </td> <td class="paramname"><em>serialno</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__read__api.html#ga8a1df0166fad1a0a6fe55d24e1a4b2e6">OggzReadPage</a> </td> <td class="paramname"><em>read_page</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>user_data</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Set a callback for Oggz to call when a new Ogg page is found in the stream. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">oggz</td><td>An OGGZ handle previously opened for reading </td></tr> <tr><td class="paramname">serialno</td><td>Identify the logical bitstream in <em>oggz</em> to attach this callback to, or -1 to attach this callback to all unattached logical bitstreams in <em>oggz</em>. </td></tr> <tr><td class="paramname">read_page</td><td>Your OggzReadPage callback function </td></tr> <tr><td class="paramname">user_data</td><td>Arbitrary data you wish to pass to your callback </td></tr> </table> </dd> </dl> <dl class="retval"><dt>Return values</dt><dd> <table class="retval"> <tr><td class="paramname">0</td><td>Success </td></tr> <tr><td class="paramname">OGGZ_ERR_BAD_OGGZ</td><td><em>oggz</em> does not refer to an existing OGGZ </td></tr> <tr><td class="paramname">OGGZ_ERR_INVALID</td><td>Operation not suitable for this OGGZ </td></tr> <tr><td class="paramname">OGGZ_ERR_OUT_OF_MEMORY</td><td>Out of memory</td></tr> </table> </dd> </dl> <dl class="section note"><dt>Note</dt><dd>Values of <em>serialno</em> other than -1 allows you to specify different callback functions for each logical bitstream.</dd> <dd> It is safe to call this callback from within an OggzReadPage function, in order to specify that subsequent pages should be handled by a different OggzReadPage function. </dd></dl> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.5 </small></address> </body> </html>