Error return codes possible from libvorbis and libvorbisfile:

All 'failure' style returns are <0; this either indicates a generic
'false' value (eg, ready?  T or F) or an error condition.  Code can
safely just test for < 0, or look at the specific return code for more
detail.

*** Return codes:

OV_FALSE        The call returned a 'false' status (eg, ov_bitrate_instant 
		can return OV_FALSE if playback is not in progress, and thus 
		there is no instantaneous bitrate information to report.

OV_HOLE		libvorbis/libvorbisfile is alerting the application that 
		there was an interruption in the data (one of: garbage 
		between pages, loss of sync followed by recapture, or a 
		corrupt page)

OV_EREAD        A read from media returned an error.

OV_EFAULT       Internal logic fault; indicates a bug or heap/stack 
		corruption.

OV_EIMPL        The bitstream makes use of a feature not implemented in this 
		library version.

OV_EINVAL       Invalid argument value.

OV_ENOTVORBIS	Bitstream/page/packet is not Vorbis data.

OV_EBADHEADER   Invalid Vorbis bitstream header.

OV_EVERSION	Vorbis version mismatch.

OV_ENOTAUDIO	Packet data submitted to vorbis_synthesis is not audio data.

OV_EBADPACKET	Invalid packet submitted to vorbis_synthesis.

OV_EBADLINK	Invalid stream section supplied to libvorbis/libvorbisfile, 
		or the requested link is corrupt. 

OV_ENOSEEK	Bitstream is not seekable.


****************************************************************
*** Libvorbis functions that can return failure/error codes:

int vorbis_analysis_headerout()
    OV_EIMPL

int vorbis_analysis_wrote()
    OV_EINVAL

int vorbis_synthesis_headerin()
    OV_ENOTVORBIS, OV_EVERSION, OV_EBADHEADER

int vorbis_synthesis()
    OV_ENOTAUDIO, OV_EBADPACKET

int vorbis_synthesis_read()
    OV_EINVAL

****************************************************************
*** Libvorbisfile functions that can return failure/error codes:

int ov_open_callbacks()   
    OV_EREAD, OV_ENOTVORBIS, OV_EVERSION, OV_EBADHEADER, OV_FAULT

int ov_open()
    OV_EREAD, OV_ENOTVORBIS, OV_EVERSION, OV_EBADHEADER, OV_FAULT

long ov_bitrate()
    OV_EINVAL, OV_FALSE

long ov_bitrate_instant()
    OV_FALSE

ogg_int64_t ov_raw_total()
    OV_EINVAL

ogg_int64_t ov_pcm_total()
    OV_EINVAL

double ov_time_total()
    OV_EINVAL

int ov_raw_seek()
    OV_ENOSEEK, OV_EINVAL, OV_BADLINK

int ov_pcm_seek_page()
    OV_ENOSEEK, OV_EINVAL, OV_EREAD, OV_BADLINK, OV_FAULT

int ov_pcm_seek()
    OV_ENOSEEK, OV_EINVAL, OV_EREAD, OV_BADLINK, OV_FAULT

int ov_time_seek()
    OV_ENOSEEK, OV_EINVAL, OV_EREAD, OV_BADLINK, OV_FAULT

int ov_time_seek_page()
    OV_ENOSEEK, OV_EINVAL, OV_EREAD, OV_BADLINK, OV_FAULT

long ov_read()
    OV_HOLE, OV_EBADLINK
