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