New pages on using libvorbisfile with threading and callbacks. New
authorMonty <xiphmont@xiph.org>
Tue, 2 Jul 2002 21:41:36 +0000 (21:41 +0000)
committerMonty <xiphmont@xiph.org>
Tue, 2 Jul 2002 21:41:36 +0000 (21:41 +0000)
ref page for erturn codes.

svn path=/trunk/vorbis/; revision=3496

doc/vorbisfile/callbacks.html [new file with mode: 0644]
doc/vorbisfile/return.html [new file with mode: 0644]
doc/vorbisfile/threads.html [new file with mode: 0644]

diff --git a/doc/vorbisfile/callbacks.html b/doc/vorbisfile/callbacks.html
new file mode 100644 (file)
index 0000000..4b80e6a
--- /dev/null
@@ -0,0 +1,113 @@
+<html>
+
+<head>
+<title>Vorbisfile - Callbacks and non-stdio I/O</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>Vorbisfile documentation</p></td>
+<td align=right><p class=tiny>libVorbisfile version 1.65 - 20020702</p></td>
+</tr>
+</table>
+
+<h1>Callbacks and non-stdio I/O</h1>
+
+Although stdio is convenient and nearly universally implemented as per
+ANSI C, it is not suited to all or even most potential uses of Vorbis.
+For additional flexibility, embedded applications may provide their
+own I/O functions for use with Vorbisfile when stdio is unavailable or not
+suitable.  One common example is decoding a Vorbis stream from a
+memory buffer.<p>
+
+Use custom I/O functions by populating an <a
+href="ov_callbacks.html">ov_callbacks</a> structure and calling <a
+href="ov_open_callbacks.html">ov_open_callbacks()</a> or <a
+href="ov_test_callbacks.html">ov_test_callbacks()</a> rather than the
+typical <a href="ov_open.html">ov_open()</a> or <a
+href="ov_test.html">ov_test()</a>.  Past the open call, use of
+libvorbisfile is identical to using it with stdio.
+
+<h2>Read function</h2> 
+
+The read-like function provided in the <tt>read_func</tt> field is
+used to fetch the requested amount of data.  It expects the fetch
+operation to function similar to file-access, that is, a multiple read
+operations will retrieve contiguous sequential pieces of data,
+advancing a position cursor after each read.<p>
+
+The following behaviors are also expected:<p>
+<ul>
+<li>a return of '0' indicates end-of-data (if the by-thread errno is unset)
+<li>short reads mean nothing special (short reads are not treated as error conditions)
+<li>a return of zero with the by-thread errno set to nonzero indicates a read error
+</ul>
+<p>
+
+<h2>Seek function</h2> 
+
+The seek-like function provided in the <tt>seek_func</tt> field is
+used to request non-sequential data access by libvorbisfile, moving
+the access cursor to the requested position.<p>
+
+libvorbisfile expects the following behavior:
+<ul>
+<li>The seek function must always return -1 (failure) if the given
+data abstraction is not seekable.  It may choose to always return -1
+if the application desires libvorbisfile to treat the Vorbis data
+strictly as a stream (which makes for a less expensive open
+operation).<p>
+
+<li>If the seek function initially indicates seekability, it must
+always succeed upon being given a valid seek request.<p>
+
+<li>The seek function must implement all of SEEK_SET, SEEK_CUR and
+SEEK_END.  The implementation of SEEK_END should set the access cursor
+one past the last byte of accessible data, as would stdio
+<tt>fseek()</tt><p>
+</ul>
+
+<h2>Close function</h2>
+
+The close function should deallocate any access state used by the
+passed in instance of the data access abstraction and invalidate the
+instance handle.  The close function is assumed to succeed.<p>
+
+One common use of callbacks and the close function is to change the
+behavior of libvorbisfile with respect to file closure for applications
+that <em>must</em> <tt>fclose</tt> data files themselves. By passing
+the normal stdio calls as callback functions, but passing a
+<tt>close_func</tt> that does nothing, an application may call <a
+href="ov_clear.html">ov_clear()</a> and then <tt>fclose()</tt> the
+file originally passed to libvorbisfile.
+
+<h2>Tell function</h2> 
+
+The tell function is intended to mimic the
+behavior of <tt>ftell()</tt> and must return the byte position of the
+next data byte that would be read.  If the data access cursor is at
+the end of the 'file' (pointing to one past the last byte of data, as
+it would be after calling <tt>fseek(file,SEEK_END,0)</tt>), the tell
+function must return the data position (and thus the total file size),
+not an error.<p>
+
+The tell function need not be provided if the data IO abstraction is
+not seekable.<p.
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Vorbisfile documentation</p></td>
+<td align=right><p class=tiny>libVorbisfile version 1.65 - 20020702</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/doc/vorbisfile/return.html b/doc/vorbisfile/return.html
new file mode 100644 (file)
index 0000000..4494413
--- /dev/null
@@ -0,0 +1,77 @@
+<html>
+
+<head>
+<title>Vorbisfile - Return Codes</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>Vorbisfile documentation</p></td>
+<td align=right><p class=tiny>libVorbisfile version 1.65 - 20020702</p></td>
+</tr>
+</table>
+
+<h1>Return Codes</h1>
+
+<p>
+
+The following return codes are <tt>#define</tt>d in "vorbis/codec.h"
+may be returned by libvorbisfile.  Descriptions of a code relevant to
+a specific function are found in the reference description of that
+function.
+
+<dl>
+
+<dt>OV_FALSE</dt>
+<dd>Not true, or no data available</dd>
+
+<dt>OV_HOLE</dt>
+<dd>Vorbisfile encoutered missing or corrupt data in the bitstream.  Recovery
+is normally automatic and this return code is for informational purposes only.</dd>
+
+<dt>OV_EREAD</dt>
+<dd>Read error while fetching compressed data for decode</dd>
+
+<dt>OV_EFAULT</dt>
+<dd>Internal inconsistency in decode state.  Continuing is likely not possible.</dd>
+
+<dt>OV_EIMPL</dt>
+<dd>Feature not implemented</dd>
+
+<dt>OV_EINVAL</dt>
+<dd>Either an invalid argument, or incompletely initialized argument passed to libvorbisfile call</dd>
+
+<dt>OV_ENOTVORBIS</dt>
+<dd>The given file/data was not recognized as Ogg Vorbis data.</dd>
+
+<dt>OV_EBADHEADER</dt>
+<dd>The file/data is apparently an Ogg Vorbis stream, but contains a corrupted or undecipherable header.</dd>
+
+<dt>OV_EVERSION</dt>
+<dd>The bitstream format revision of the given stream is not supported.</dd>
+
+<dt>OV_EBADLINK</dt>
+<dd>The given link exists in the Vorbis data stream, but is not decipherable due to garbacge or corruption.</dd>
+
+<dt>OV_ENOSEEK</dt>
+<dd>The given stream is not seekable</dd>
+
+</dl>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Vorbisfile documentation</p></td>
+<td align=right><p class=tiny>libVorbisfile version 1.65 - 20020702</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>
diff --git a/doc/vorbisfile/threads.html b/doc/vorbisfile/threads.html
new file mode 100644 (file)
index 0000000..f10e836
--- /dev/null
@@ -0,0 +1,50 @@
+<html>
+
+<head>
+<title>Vorbisfile - Thread Safety</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>Vorbisfile documentation</p></td>
+<td align=right><p class=tiny>libVorbisfile version 1.65 - 20020702</p></td>
+</tr>
+</table>
+
+<h1>Thread Safety</h1>
+
+Vorbisfile's libvorbisfile may be used safely in a threading environment
+so long as thread access to individual <a
+href="OggVorbis_File.html">OggVorbis_File</a> instances is serialized.  
+<ul>
+
+<li>Only one thread at a time may enter a function that takes a given <a
+href="OggVorbis_File.html">OggVorbis_File</a> instance, even if the
+functions involved appear to be read-only.<p>
+
+<li>Multiple threads may enter
+libvorbisfile at a given time, so long as each thread's function calls
+are using different <a href="OggVorbis_File.html">OggVorbis_File</a>
+instances. <p>
+
+<li>Any one <a
+href="OggVorbis_File.html">OggVorbis_File</a> instance may be used safely from multiple threads so long as only one thread at a time is making calls using that instance.<p>
+</ul>
+
+<br><br>
+<hr noshade>
+<table border=0 width=100%>
+<tr valign=top>
+<td><p class=tiny>copyright &copy; 2002 Xiph.org</p></td>
+<td align=right><p class=tiny><a href="http://www.xiph.org/ogg/vorbis/">Ogg Vorbis</a></p></td>
+</tr><tr>
+<td><p class=tiny>Vorbisfile documentation</p></td>
+<td align=right><p class=tiny>libVorbisfile version 1.65 - 20020702</p></td>
+</tr>
+</table>
+
+</body>
+
+</html>