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