18e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/********************************************************************
28e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *                                                                  *
38e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
48e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
58e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
68e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
78e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels *                                                                  *
88e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
98e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels * by the Xiph.Org Foundation http://www.xiph.org/                  *
108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************
128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels function: libvorbis codec headers
148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels last mod: $Id: codec.h 17021 2010-03-24 09:29:41Z xiphmont $
158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels ********************************************************************/
178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifndef _vorbis_codec_h_
198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define _vorbis_codec_h_
208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef __cplusplus
228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern "C"
238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels{
248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif /* __cplusplus */
258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#include <ogg/ogg.h>
278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_info{
298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int version;
308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int channels;
318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long rate;
328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  /* The below bitrate declarations are *hints*.
348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     Combinations of the three values carry the following implications:
358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     all three set to the same value:
378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels       implies a fixed rate bitstream
388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     only nominal set:
398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels       implies a VBR stream that averages the nominal bitrate.  No hard
408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels       upper/lower limit
418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     upper and or lower set:
428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels       implies a VBR bitstream that obeys the bitrate limits. nominal
438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels       may also be set to give a nominal rate.
448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     none set:
458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels       the coder does not care to speculate.
468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  */
478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long bitrate_upper;
498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long bitrate_nominal;
508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long bitrate_lower;
518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long bitrate_window;
528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  void *codec_setup;
548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_info;
558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* vorbis_dsp_state buffers the current vorbis audio
578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   analysis/synthesis state.  The DSP state belongs to a specific
588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   logical bitstream ****************************************************/
598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_dsp_state{
608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int analysisp;
618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  vorbis_info *vi;
628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  float **pcm;
648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  float **pcmret;
658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int      pcm_storage;
668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int      pcm_current;
678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int      pcm_returned;
688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int  preextrapolate;
708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int  eofflag;
718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long lW;
738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long W;
748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long nW;
758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long centerW;
768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ogg_int64_t granulepos;
788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ogg_int64_t sequence;
798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ogg_int64_t glue_bits;
818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ogg_int64_t time_bits;
828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ogg_int64_t floor_bits;
838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ogg_int64_t res_bits;
848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  void       *backend_state;
868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_dsp_state;
878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_block{
898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  /* necessary stream state for linking to the framing abstraction */
908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  float  **pcm;       /* this is a pointer into local storage */
918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  oggpack_buffer opb;
928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long  lW;
948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long  W;
958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long  nW;
968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int   pcmend;
978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int   mode;
988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int         eofflag;
1008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ogg_int64_t granulepos;
1018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  ogg_int64_t sequence;
1028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  vorbis_dsp_state *vd; /* For read-only access of configuration */
1038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  /* local storage to avoid remallocing; it's up to the mapping to
1058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     structure it */
1068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  void               *localstore;
1078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long                localtop;
1088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long                localalloc;
1098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long                totaluse;
1108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  struct alloc_chain *reap;
1118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  /* bitmetrics for the frame */
1138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long glue_bits;
1148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long time_bits;
1158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long floor_bits;
1168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  long res_bits;
1178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  void *internal;
1198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_block;
1218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* vorbis_block is a single block of data to be processed as part of
1238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsthe analysis/synthesis stream; it belongs to a specific logical
1248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsbitstream, but is independent from other vorbis_blocks belonging to
1258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsthat logical bitstream. *************************************************/
1268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsstruct alloc_chain{
1288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  void *ptr;
1298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  struct alloc_chain *next;
1308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels};
1318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* vorbis_info contains all the setup information specific to the
1338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   specific compression/decompression mode in progress (eg,
1348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   psychoacoustic settings, channel setup, options, codebook
1358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   etc). vorbis_info and substructures are in backends.h.
1368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels*********************************************************************/
1378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* the comments are not part of vorbis_info so that vorbis_info can be
1398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   static storage */
1408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelstypedef struct vorbis_comment{
1418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  /* unlimited user comment fields.  libvorbis writes 'libvorbis'
1428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels     whatever vendor is set to in encode */
1438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  char **user_comments;
1448e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int   *comment_lengths;
1458e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  int    comments;
1468e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels  char  *vendor;
1478e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1488e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels} vorbis_comment;
1498e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1508e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1518e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* libvorbis encodes in two abstraction layers; first we perform DSP
1528e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   and produce a packet (see docs/analysis.txt).  The packet is then
1538e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   coded into a framed OggSquish bitstream by the second layer (see
1548e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   docs/framing.txt).  Decode is the reverse process; we sync/frame
1558e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   the bitstream and extract individual packets, then decode the
1568e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   packet back into PCM audio.
1578e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1588e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   The extra framing/packetizing is used in streaming formats, such as
1598e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   files.  Over the net (such as with UDP), the framing and
1608e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   packetization aren't necessary as they're provided by the transport
1618e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels   and the streaming layer is not used */
1628e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1638e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Vorbis PRIMITIVES: general ***************************************/
1648e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1658e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void     vorbis_info_init(vorbis_info *vi);
1668e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void     vorbis_info_clear(vorbis_info *vi);
1678e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_info_blocksize(vorbis_info *vi,int zo);
1688e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void     vorbis_comment_init(vorbis_comment *vc);
1698e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void     vorbis_comment_add(vorbis_comment *vc, const char *comment);
1708e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void     vorbis_comment_add_tag(vorbis_comment *vc,
1718e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                       const char *tag, const char *contents);
1728e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern char    *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count);
1738e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_comment_query_count(vorbis_comment *vc, const char *tag);
1748e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void     vorbis_comment_clear(vorbis_comment *vc);
1758e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1768e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
1778e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_block_clear(vorbis_block *vb);
1788e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern void     vorbis_dsp_clear(vorbis_dsp_state *v);
1798e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern double   vorbis_granule_time(vorbis_dsp_state *v,
1808e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                    ogg_int64_t granulepos);
1818e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1828e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern const char *vorbis_version_string(void);
1838e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1848e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/
1858e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1868e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
1878e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
1888e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_analysis_headerout(vorbis_dsp_state *v,
1898e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                          vorbis_comment *vc,
1908e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                          ogg_packet *op,
1918e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                          ogg_packet *op_comm,
1928e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                          ogg_packet *op_code);
1938e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern float  **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
1948e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
1958e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
1968e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_analysis(vorbis_block *vb,ogg_packet *op);
1978e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
1988e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_bitrate_addblock(vorbis_block *vb);
1998e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
2008e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                           ogg_packet *op);
2018e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2028e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Vorbis PRIMITIVES: synthesis layer *******************************/
2038e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_idheader(ogg_packet *op);
2048e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
2058e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels                                          ogg_packet *op);
2068e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2078e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
2088e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_restart(vorbis_dsp_state *v);
2098e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
2108e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
2118e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
2128e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
2138e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
2148e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
2158e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern long     vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
2168e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2178e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_halfrate(vorbis_info *v,int flag);
2188e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckelsextern int      vorbis_synthesis_halfrate_p(vorbis_info *v);
2198e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2208e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels/* Vorbis ERRORS and return codes ***********************************/
2218e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2228e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_FALSE      -1
2238e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EOF        -2
2248e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_HOLE       -3
2258e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2268e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EREAD      -128
2278e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EFAULT     -129
2288e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EIMPL      -130
2298e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EINVAL     -131
2308e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ENOTVORBIS -132
2318e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EBADHEADER -133
2328e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EVERSION   -134
2338e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ENOTAUDIO  -135
2348e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EBADPACKET -136
2358e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_EBADLINK   -137
2368e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#define OV_ENOSEEK    -138
2378e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2388e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#ifdef __cplusplus
2398e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels}
2408e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif /* __cplusplus */
2418e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
2428e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels#endif
2438e01cdce135d5d816f92d7bb83f9a930aa1b45aeLucas Eckels
244