dbf-halloween2015

annotate libs/vorbis/codec.h @ 3:c37fe5d8a4ed

windows port
author John Tsiombikas <nuclear@member.fsf.org>
date Sun, 01 Nov 2015 06:04:28 +0200
parents
children
rev   line source
nuclear@1 1 /********************************************************************
nuclear@1 2 * *
nuclear@1 3 * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. *
nuclear@1 4 * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
nuclear@1 5 * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
nuclear@1 6 * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
nuclear@1 7 * *
nuclear@1 8 * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
nuclear@1 9 * by the Xiph.Org Foundation http://www.xiph.org/ *
nuclear@1 10
nuclear@1 11 ********************************************************************
nuclear@1 12
nuclear@1 13 function: libvorbis codec headers
nuclear@1 14 last mod: $Id: codec.h 17021 2010-03-24 09:29:41Z xiphmont $
nuclear@1 15
nuclear@1 16 ********************************************************************/
nuclear@1 17
nuclear@1 18 #ifndef _vorbis_codec_h_
nuclear@1 19 #define _vorbis_codec_h_
nuclear@1 20
nuclear@1 21 #ifdef __cplusplus
nuclear@1 22 extern "C"
nuclear@1 23 {
nuclear@1 24 #endif /* __cplusplus */
nuclear@1 25
nuclear@1 26 #include <ogg/ogg.h>
nuclear@1 27
nuclear@1 28 typedef struct vorbis_info{
nuclear@1 29 int version;
nuclear@1 30 int channels;
nuclear@1 31 long rate;
nuclear@1 32
nuclear@1 33 /* The below bitrate declarations are *hints*.
nuclear@1 34 Combinations of the three values carry the following implications:
nuclear@1 35
nuclear@1 36 all three set to the same value:
nuclear@1 37 implies a fixed rate bitstream
nuclear@1 38 only nominal set:
nuclear@1 39 implies a VBR stream that averages the nominal bitrate. No hard
nuclear@1 40 upper/lower limit
nuclear@1 41 upper and or lower set:
nuclear@1 42 implies a VBR bitstream that obeys the bitrate limits. nominal
nuclear@1 43 may also be set to give a nominal rate.
nuclear@1 44 none set:
nuclear@1 45 the coder does not care to speculate.
nuclear@1 46 */
nuclear@1 47
nuclear@1 48 long bitrate_upper;
nuclear@1 49 long bitrate_nominal;
nuclear@1 50 long bitrate_lower;
nuclear@1 51 long bitrate_window;
nuclear@1 52
nuclear@1 53 void *codec_setup;
nuclear@1 54 } vorbis_info;
nuclear@1 55
nuclear@1 56 /* vorbis_dsp_state buffers the current vorbis audio
nuclear@1 57 analysis/synthesis state. The DSP state belongs to a specific
nuclear@1 58 logical bitstream ****************************************************/
nuclear@1 59 typedef struct vorbis_dsp_state{
nuclear@1 60 int analysisp;
nuclear@1 61 vorbis_info *vi;
nuclear@1 62
nuclear@1 63 float **pcm;
nuclear@1 64 float **pcmret;
nuclear@1 65 int pcm_storage;
nuclear@1 66 int pcm_current;
nuclear@1 67 int pcm_returned;
nuclear@1 68
nuclear@1 69 int preextrapolate;
nuclear@1 70 int eofflag;
nuclear@1 71
nuclear@1 72 long lW;
nuclear@1 73 long W;
nuclear@1 74 long nW;
nuclear@1 75 long centerW;
nuclear@1 76
nuclear@1 77 ogg_int64_t granulepos;
nuclear@1 78 ogg_int64_t sequence;
nuclear@1 79
nuclear@1 80 ogg_int64_t glue_bits;
nuclear@1 81 ogg_int64_t time_bits;
nuclear@1 82 ogg_int64_t floor_bits;
nuclear@1 83 ogg_int64_t res_bits;
nuclear@1 84
nuclear@1 85 void *backend_state;
nuclear@1 86 } vorbis_dsp_state;
nuclear@1 87
nuclear@1 88 typedef struct vorbis_block{
nuclear@1 89 /* necessary stream state for linking to the framing abstraction */
nuclear@1 90 float **pcm; /* this is a pointer into local storage */
nuclear@1 91 oggpack_buffer opb;
nuclear@1 92
nuclear@1 93 long lW;
nuclear@1 94 long W;
nuclear@1 95 long nW;
nuclear@1 96 int pcmend;
nuclear@1 97 int mode;
nuclear@1 98
nuclear@1 99 int eofflag;
nuclear@1 100 ogg_int64_t granulepos;
nuclear@1 101 ogg_int64_t sequence;
nuclear@1 102 vorbis_dsp_state *vd; /* For read-only access of configuration */
nuclear@1 103
nuclear@1 104 /* local storage to avoid remallocing; it's up to the mapping to
nuclear@1 105 structure it */
nuclear@1 106 void *localstore;
nuclear@1 107 long localtop;
nuclear@1 108 long localalloc;
nuclear@1 109 long totaluse;
nuclear@1 110 struct alloc_chain *reap;
nuclear@1 111
nuclear@1 112 /* bitmetrics for the frame */
nuclear@1 113 long glue_bits;
nuclear@1 114 long time_bits;
nuclear@1 115 long floor_bits;
nuclear@1 116 long res_bits;
nuclear@1 117
nuclear@1 118 void *internal;
nuclear@1 119
nuclear@1 120 } vorbis_block;
nuclear@1 121
nuclear@1 122 /* vorbis_block is a single block of data to be processed as part of
nuclear@1 123 the analysis/synthesis stream; it belongs to a specific logical
nuclear@1 124 bitstream, but is independent from other vorbis_blocks belonging to
nuclear@1 125 that logical bitstream. *************************************************/
nuclear@1 126
nuclear@1 127 struct alloc_chain{
nuclear@1 128 void *ptr;
nuclear@1 129 struct alloc_chain *next;
nuclear@1 130 };
nuclear@1 131
nuclear@1 132 /* vorbis_info contains all the setup information specific to the
nuclear@1 133 specific compression/decompression mode in progress (eg,
nuclear@1 134 psychoacoustic settings, channel setup, options, codebook
nuclear@1 135 etc). vorbis_info and substructures are in backends.h.
nuclear@1 136 *********************************************************************/
nuclear@1 137
nuclear@1 138 /* the comments are not part of vorbis_info so that vorbis_info can be
nuclear@1 139 static storage */
nuclear@1 140 typedef struct vorbis_comment{
nuclear@1 141 /* unlimited user comment fields. libvorbis writes 'libvorbis'
nuclear@1 142 whatever vendor is set to in encode */
nuclear@1 143 char **user_comments;
nuclear@1 144 int *comment_lengths;
nuclear@1 145 int comments;
nuclear@1 146 char *vendor;
nuclear@1 147
nuclear@1 148 } vorbis_comment;
nuclear@1 149
nuclear@1 150
nuclear@1 151 /* libvorbis encodes in two abstraction layers; first we perform DSP
nuclear@1 152 and produce a packet (see docs/analysis.txt). The packet is then
nuclear@1 153 coded into a framed OggSquish bitstream by the second layer (see
nuclear@1 154 docs/framing.txt). Decode is the reverse process; we sync/frame
nuclear@1 155 the bitstream and extract individual packets, then decode the
nuclear@1 156 packet back into PCM audio.
nuclear@1 157
nuclear@1 158 The extra framing/packetizing is used in streaming formats, such as
nuclear@1 159 files. Over the net (such as with UDP), the framing and
nuclear@1 160 packetization aren't necessary as they're provided by the transport
nuclear@1 161 and the streaming layer is not used */
nuclear@1 162
nuclear@1 163 /* Vorbis PRIMITIVES: general ***************************************/
nuclear@1 164
nuclear@1 165 extern void vorbis_info_init(vorbis_info *vi);
nuclear@1 166 extern void vorbis_info_clear(vorbis_info *vi);
nuclear@1 167 extern int vorbis_info_blocksize(vorbis_info *vi,int zo);
nuclear@1 168 extern void vorbis_comment_init(vorbis_comment *vc);
nuclear@1 169 extern void vorbis_comment_add(vorbis_comment *vc, const char *comment);
nuclear@1 170 extern void vorbis_comment_add_tag(vorbis_comment *vc,
nuclear@1 171 const char *tag, const char *contents);
nuclear@1 172 extern char *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count);
nuclear@1 173 extern int vorbis_comment_query_count(vorbis_comment *vc, const char *tag);
nuclear@1 174 extern void vorbis_comment_clear(vorbis_comment *vc);
nuclear@1 175
nuclear@1 176 extern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
nuclear@1 177 extern int vorbis_block_clear(vorbis_block *vb);
nuclear@1 178 extern void vorbis_dsp_clear(vorbis_dsp_state *v);
nuclear@1 179 extern double vorbis_granule_time(vorbis_dsp_state *v,
nuclear@1 180 ogg_int64_t granulepos);
nuclear@1 181
nuclear@1 182 extern const char *vorbis_version_string(void);
nuclear@1 183
nuclear@1 184 /* Vorbis PRIMITIVES: analysis/DSP layer ****************************/
nuclear@1 185
nuclear@1 186 extern int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
nuclear@1 187 extern int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
nuclear@1 188 extern int vorbis_analysis_headerout(vorbis_dsp_state *v,
nuclear@1 189 vorbis_comment *vc,
nuclear@1 190 ogg_packet *op,
nuclear@1 191 ogg_packet *op_comm,
nuclear@1 192 ogg_packet *op_code);
nuclear@1 193 extern float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
nuclear@1 194 extern int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
nuclear@1 195 extern int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
nuclear@1 196 extern int vorbis_analysis(vorbis_block *vb,ogg_packet *op);
nuclear@1 197
nuclear@1 198 extern int vorbis_bitrate_addblock(vorbis_block *vb);
nuclear@1 199 extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
nuclear@1 200 ogg_packet *op);
nuclear@1 201
nuclear@1 202 /* Vorbis PRIMITIVES: synthesis layer *******************************/
nuclear@1 203 extern int vorbis_synthesis_idheader(ogg_packet *op);
nuclear@1 204 extern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
nuclear@1 205 ogg_packet *op);
nuclear@1 206
nuclear@1 207 extern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
nuclear@1 208 extern int vorbis_synthesis_restart(vorbis_dsp_state *v);
nuclear@1 209 extern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
nuclear@1 210 extern int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
nuclear@1 211 extern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
nuclear@1 212 extern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
nuclear@1 213 extern int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
nuclear@1 214 extern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
nuclear@1 215 extern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
nuclear@1 216
nuclear@1 217 extern int vorbis_synthesis_halfrate(vorbis_info *v,int flag);
nuclear@1 218 extern int vorbis_synthesis_halfrate_p(vorbis_info *v);
nuclear@1 219
nuclear@1 220 /* Vorbis ERRORS and return codes ***********************************/
nuclear@1 221
nuclear@1 222 #define OV_FALSE -1
nuclear@1 223 #define OV_EOF -2
nuclear@1 224 #define OV_HOLE -3
nuclear@1 225
nuclear@1 226 #define OV_EREAD -128
nuclear@1 227 #define OV_EFAULT -129
nuclear@1 228 #define OV_EIMPL -130
nuclear@1 229 #define OV_EINVAL -131
nuclear@1 230 #define OV_ENOTVORBIS -132
nuclear@1 231 #define OV_EBADHEADER -133
nuclear@1 232 #define OV_EVERSION -134
nuclear@1 233 #define OV_ENOTAUDIO -135
nuclear@1 234 #define OV_EBADPACKET -136
nuclear@1 235 #define OV_EBADLINK -137
nuclear@1 236 #define OV_ENOSEEK -138
nuclear@1 237
nuclear@1 238 #ifdef __cplusplus
nuclear@1 239 }
nuclear@1 240 #endif /* __cplusplus */
nuclear@1 241
nuclear@1 242 #endif
nuclear@1 243