Blame include/vorbis/codec.h

Packit 06404a
/********************************************************************
Packit 06404a
 *                                                                  *
Packit 06404a
 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
Packit 06404a
 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
Packit 06404a
 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
Packit 06404a
 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
Packit 06404a
 *                                                                  *
Packit 06404a
 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
Packit 06404a
 * by the Xiph.Org Foundation http://www.xiph.org/                  *
Packit 06404a
Packit 06404a
 ********************************************************************
Packit 06404a
Packit 06404a
 function: libvorbis codec headers
Packit 06404a
 last mod: $Id: codec.h 17021 2010-03-24 09:29:41Z xiphmont $
Packit 06404a
Packit 06404a
 ********************************************************************/
Packit 06404a
Packit 06404a
#ifndef _vorbis_codec_h_
Packit 06404a
#define _vorbis_codec_h_
Packit 06404a
Packit 06404a
#ifdef __cplusplus
Packit 06404a
extern "C"
Packit 06404a
{
Packit 06404a
#endif /* __cplusplus */
Packit 06404a
Packit 06404a
#include <ogg/ogg.h>
Packit 06404a
Packit 06404a
typedef struct vorbis_info{
Packit 06404a
  int version;
Packit 06404a
  int channels;
Packit 06404a
  long rate;
Packit 06404a
Packit 06404a
  /* The below bitrate declarations are *hints*.
Packit 06404a
     Combinations of the three values carry the following implications:
Packit 06404a
Packit 06404a
     all three set to the same value:
Packit 06404a
       implies a fixed rate bitstream
Packit 06404a
     only nominal set:
Packit 06404a
       implies a VBR stream that averages the nominal bitrate.  No hard
Packit 06404a
       upper/lower limit
Packit 06404a
     upper and or lower set:
Packit 06404a
       implies a VBR bitstream that obeys the bitrate limits. nominal
Packit 06404a
       may also be set to give a nominal rate.
Packit 06404a
     none set:
Packit 06404a
       the coder does not care to speculate.
Packit 06404a
  */
Packit 06404a
Packit 06404a
  long bitrate_upper;
Packit 06404a
  long bitrate_nominal;
Packit 06404a
  long bitrate_lower;
Packit 06404a
  long bitrate_window;
Packit 06404a
Packit 06404a
  void *codec_setup;
Packit 06404a
} vorbis_info;
Packit 06404a
Packit 06404a
/* vorbis_dsp_state buffers the current vorbis audio
Packit 06404a
   analysis/synthesis state.  The DSP state belongs to a specific
Packit 06404a
   logical bitstream ****************************************************/
Packit 06404a
typedef struct vorbis_dsp_state{
Packit 06404a
  int analysisp;
Packit 06404a
  vorbis_info *vi;
Packit 06404a
Packit 06404a
  float **pcm;
Packit 06404a
  float **pcmret;
Packit 06404a
  int      pcm_storage;
Packit 06404a
  int      pcm_current;
Packit 06404a
  int      pcm_returned;
Packit 06404a
Packit 06404a
  int  preextrapolate;
Packit 06404a
  int  eofflag;
Packit 06404a
Packit 06404a
  long lW;
Packit 06404a
  long W;
Packit 06404a
  long nW;
Packit 06404a
  long centerW;
Packit 06404a
Packit 06404a
  ogg_int64_t granulepos;
Packit 06404a
  ogg_int64_t sequence;
Packit 06404a
Packit 06404a
  ogg_int64_t glue_bits;
Packit 06404a
  ogg_int64_t time_bits;
Packit 06404a
  ogg_int64_t floor_bits;
Packit 06404a
  ogg_int64_t res_bits;
Packit 06404a
Packit 06404a
  void       *backend_state;
Packit 06404a
} vorbis_dsp_state;
Packit 06404a
Packit 06404a
typedef struct vorbis_block{
Packit 06404a
  /* necessary stream state for linking to the framing abstraction */
Packit 06404a
  float  **pcm;       /* this is a pointer into local storage */
Packit 06404a
  oggpack_buffer opb;
Packit 06404a
Packit 06404a
  long  lW;
Packit 06404a
  long  W;
Packit 06404a
  long  nW;
Packit 06404a
  int   pcmend;
Packit 06404a
  int   mode;
Packit 06404a
Packit 06404a
  int         eofflag;
Packit 06404a
  ogg_int64_t granulepos;
Packit 06404a
  ogg_int64_t sequence;
Packit 06404a
  vorbis_dsp_state *vd; /* For read-only access of configuration */
Packit 06404a
Packit 06404a
  /* local storage to avoid remallocing; it's up to the mapping to
Packit 06404a
     structure it */
Packit 06404a
  void               *localstore;
Packit 06404a
  long                localtop;
Packit 06404a
  long                localalloc;
Packit 06404a
  long                totaluse;
Packit 06404a
  struct alloc_chain *reap;
Packit 06404a
Packit 06404a
  /* bitmetrics for the frame */
Packit 06404a
  long glue_bits;
Packit 06404a
  long time_bits;
Packit 06404a
  long floor_bits;
Packit 06404a
  long res_bits;
Packit 06404a
Packit 06404a
  void *internal;
Packit 06404a
Packit 06404a
} vorbis_block;
Packit 06404a
Packit 06404a
/* vorbis_block is a single block of data to be processed as part of
Packit 06404a
the analysis/synthesis stream; it belongs to a specific logical
Packit 06404a
bitstream, but is independent from other vorbis_blocks belonging to
Packit 06404a
that logical bitstream. *************************************************/
Packit 06404a
Packit 06404a
struct alloc_chain{
Packit 06404a
  void *ptr;
Packit 06404a
  struct alloc_chain *next;
Packit 06404a
};
Packit 06404a
Packit 06404a
/* vorbis_info contains all the setup information specific to the
Packit 06404a
   specific compression/decompression mode in progress (eg,
Packit 06404a
   psychoacoustic settings, channel setup, options, codebook
Packit 06404a
   etc). vorbis_info and substructures are in backends.h.
Packit 06404a
*********************************************************************/
Packit 06404a
Packit 06404a
/* the comments are not part of vorbis_info so that vorbis_info can be
Packit 06404a
   static storage */
Packit 06404a
typedef struct vorbis_comment{
Packit 06404a
  /* unlimited user comment fields.  libvorbis writes 'libvorbis'
Packit 06404a
     whatever vendor is set to in encode */
Packit 06404a
  char **user_comments;
Packit 06404a
  int   *comment_lengths;
Packit 06404a
  int    comments;
Packit 06404a
  char  *vendor;
Packit 06404a
Packit 06404a
} vorbis_comment;
Packit 06404a
Packit 06404a
Packit 06404a
/* libvorbis encodes in two abstraction layers; first we perform DSP
Packit 06404a
   and produce a packet (see docs/analysis.txt).  The packet is then
Packit 06404a
   coded into a framed OggSquish bitstream by the second layer (see
Packit 06404a
   docs/framing.txt).  Decode is the reverse process; we sync/frame
Packit 06404a
   the bitstream and extract individual packets, then decode the
Packit 06404a
   packet back into PCM audio.
Packit 06404a
Packit 06404a
   The extra framing/packetizing is used in streaming formats, such as
Packit 06404a
   files.  Over the net (such as with UDP), the framing and
Packit 06404a
   packetization aren't necessary as they're provided by the transport
Packit 06404a
   and the streaming layer is not used */
Packit 06404a
Packit 06404a
/* Vorbis PRIMITIVES: general ***************************************/
Packit 06404a
Packit 06404a
extern void     vorbis_info_init(vorbis_info *vi);
Packit 06404a
extern void     vorbis_info_clear(vorbis_info *vi);
Packit 06404a
extern int      vorbis_info_blocksize(vorbis_info *vi,int zo);
Packit 06404a
extern void     vorbis_comment_init(vorbis_comment *vc);
Packit 06404a
extern void     vorbis_comment_add(vorbis_comment *vc, const char *comment);
Packit 06404a
extern void     vorbis_comment_add_tag(vorbis_comment *vc,
Packit 06404a
                                       const char *tag, const char *contents);
Packit 06404a
extern char    *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count);
Packit 06404a
extern int      vorbis_comment_query_count(vorbis_comment *vc, const char *tag);
Packit 06404a
extern void     vorbis_comment_clear(vorbis_comment *vc);
Packit 06404a
Packit 06404a
extern int      vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
Packit 06404a
extern int      vorbis_block_clear(vorbis_block *vb);
Packit 06404a
extern void     vorbis_dsp_clear(vorbis_dsp_state *v);
Packit 06404a
extern double   vorbis_granule_time(vorbis_dsp_state *v,
Packit 06404a
                                    ogg_int64_t granulepos);
Packit 06404a
Packit 06404a
extern const char *vorbis_version_string(void);
Packit 06404a
Packit 06404a
/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/
Packit 06404a
Packit 06404a
extern int      vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
Packit 06404a
extern int      vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
Packit 06404a
extern int      vorbis_analysis_headerout(vorbis_dsp_state *v,
Packit 06404a
                                          vorbis_comment *vc,
Packit 06404a
                                          ogg_packet *op,
Packit 06404a
                                          ogg_packet *op_comm,
Packit 06404a
                                          ogg_packet *op_code);
Packit 06404a
extern float  **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
Packit 06404a
extern int      vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
Packit 06404a
extern int      vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
Packit 06404a
extern int      vorbis_analysis(vorbis_block *vb,ogg_packet *op);
Packit 06404a
Packit 06404a
extern int      vorbis_bitrate_addblock(vorbis_block *vb);
Packit 06404a
extern int      vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
Packit 06404a
                                           ogg_packet *op);
Packit 06404a
Packit 06404a
/* Vorbis PRIMITIVES: synthesis layer *******************************/
Packit 06404a
extern int      vorbis_synthesis_idheader(ogg_packet *op);
Packit 06404a
extern int      vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
Packit 06404a
                                          ogg_packet *op);
Packit 06404a
Packit 06404a
extern int      vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
Packit 06404a
extern int      vorbis_synthesis_restart(vorbis_dsp_state *v);
Packit 06404a
extern int      vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
Packit 06404a
extern int      vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
Packit 06404a
extern int      vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
Packit 06404a
extern int      vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
Packit 06404a
extern int      vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
Packit 06404a
extern int      vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
Packit 06404a
extern long     vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
Packit 06404a
Packit 06404a
extern int      vorbis_synthesis_halfrate(vorbis_info *v,int flag);
Packit 06404a
extern int      vorbis_synthesis_halfrate_p(vorbis_info *v);
Packit 06404a
Packit 06404a
/* Vorbis ERRORS and return codes ***********************************/
Packit 06404a
Packit 06404a
#define OV_FALSE      -1
Packit 06404a
#define OV_EOF        -2
Packit 06404a
#define OV_HOLE       -3
Packit 06404a
Packit 06404a
#define OV_EREAD      -128
Packit 06404a
#define OV_EFAULT     -129
Packit 06404a
#define OV_EIMPL      -130
Packit 06404a
#define OV_EINVAL     -131
Packit 06404a
#define OV_ENOTVORBIS -132
Packit 06404a
#define OV_EBADHEADER -133
Packit 06404a
#define OV_EVERSION   -134
Packit 06404a
#define OV_ENOTAUDIO  -135
Packit 06404a
#define OV_EBADPACKET -136
Packit 06404a
#define OV_EBADLINK   -137
Packit 06404a
#define OV_ENOSEEK    -138
Packit 06404a
Packit 06404a
#ifdef __cplusplus
Packit 06404a
}
Packit 06404a
#endif /* __cplusplus */
Packit 06404a
Packit 06404a
#endif
Packit 06404a